Siemens SIMATIC IOT2040 – configurazione ed utilizzo con l’IDE Arduino

L’obiettivo di questa lezione introduttiva sull’uso di IOT2040 è quello di aiutare un gruppo di miei studenti nelle sperimentazioni che in questi giorni si stanno svolgendo nell’ambito delle attività di PCTO. Seguiranno nelle prossime settimane ulteriori guide che andranno ad ampliare il curricolo del percorso di Automazione per le classi 4′ e 5′ che svolgo presso l’ITIS Pininfarina di Moncalieri.

La semplicità di utilizzo, unita all’affidabilità e alla storia in campo industriale di Siemens, rendono la serie SIMATIC IOT2000 la scelta perfetta come gateway industriale. La possibilità di programmare SIMATIC IOT2000 con l’IDE Arduino permette un facile inserimento all’interno del percorso di studi, infatti il gateway è la normale evoluzione in campo industriale di Arduino, da esso ne eredita la possibilità di utilizzare i medesimi  shield che vengono usati per la scheda Arduino UNO R3. Con IOT2000 è possibile usare protocolli di comunicazione come MQTT e Modbus.

Il funzionamento del gateway di Siemens è basato su Yocto Linux. La serie SIMATIC IOT2000 comprende i modelli IOT2000, IoOT2020 e IOT2040 compatibili con la maggior parte degli sketch Arduino che possono essere caricati direttamente dall’IDE Arduino.


Nella scheda che segue vengono evidenziate le differenze tra i vari dispositivi. L’IOT2040 è ideale per un impiego in azienda, mentre l’IOT2020 può essere utilizzato in campo didattico. Per il mio istituto ho scelto di utilizzare la serie di IOT2040 in modo che gli studenti fossero già formati su un prodotto che avesse performance adatte ad un uso aziendale.

Caratteristiche principali IOT 2040

  • SIMATIC quality
    Realizzato per operare 24/7 In ambiente industriale
  • AutomatIon.ConnecTed
    Connessione facile all’automazione con supporto PROFINET, interfacce standard e apertura a soluzioni basate su Cloud
  • Aperto
    Programmabile con linguaggi ad alto livello (es. Java, C++) tramite diversi IDE (es. Eclipse) e compilatori per Yocto Linux
  • Performance
    Processore 32bit deterministico Intel Quark®x1020, 1 GB RAM e real-time-clock con batteria di buffer
  • Espandibilità & Connettività
    Compatibile con mPCIe, Arduino Shields e varie interfacce, protocolli e driver standard

Famiglia SIMATIC IOT2000 – Scheda tecnica

SIMATIC IOT2020

  • Target: Per Università e istituti scolastici
  • Hardware:
    • Intel Quark® x1000 (Galileo)
    • 512 MB RAM
    • 1 Ethernet interface
  • Espandibilità
    Arduino shield / mPCIe / µSD card slot
  • Software
    Profinet driver
  • Programmazione
    Yocto Linux/programmazione con linguaggi ad alto livello
  • Supporto Tecnico
    Sito internet, forum dedicato

SIMATIC IOT2040

  • Target: Variante “Industrial IoT” – Gateway / Collettore dati in applicazioni industriali
  • Hardware:
    • Intel Quark® x1020 (+secure boot)
    • 1 GB RAM
    • 2 Ethernet interfaces
    • 2 x RS232/485 interfaces
    • battery buffered RTC
  • Espandibilità
    Arduino shield / mPCIe / µSD card slot
  • Software
    Profinet driver
  • Programmazione
    Yocto Linux/programmazione con linguaggi ad alto livello
  • Supporto Tecnico
    Sito internet, forum dedicato

Ambienti di sviluppo e programmazione

  • Eclipse – programmazione in C/C++, Java
  • Arduino IDE – programmazione in C
  • Python
  • Node-RED

Interfacce

1 – Cover sinistra (Arduino interface)
2 – LED
3 – Cover destra (µSD card, battery)
4 – Chiusura di sicurezza
5 – Pulsante user programmabile
6 – Pulsante RESET

7 – Porte COM (RS232/422/485)
8 – Preforati per installazione antenne
9 – Fori per alette a pressione per montaggio a muro
10 – Alimentazione

11 – USB Type A
12 – USB Type Micro B
13 – Porta Ethernet 10/100 Mbps
14 – Porta Ethernet 10/100 Mbps PoE

15 – Fissaggio a guida DIN

Nella parte interna sono ben evidenti, partendo da sinistra, i pin a cui è possibile connettere gli shield Arduino, a destra invece l’alloggiamento per la micro SD e batteria per l’RTC.

Configurazione di SIMATIC IOT2040

Per lo svolgimento di questa esercitazione è indispensabile avere:

  • Cavo ethernet
  • SD Card da almeno 8GB
  • Alimentazione a 24 Vcc
  • Arduino IDE
  • Siemens SIMATIC IOT 2040

Manuali di riferimento

Impostazione

Prima di procedere è indispensabile prelevare il software e la documentazione necessario dal portale di supporto di Siemens, registratevi e accedete al portale di supporto Siemens per poter poi prelevare tutto ciò che serve per configurare il dispositivo.
Il punto di riferimento da cui partire è il forum dedicato su cui troverete tutto ciò che vi serve e da cui potrete ottenere il supporto di Siemens per qualsiasi richiesta relativa all’hardware. Tutti i modelli della serie serie IOT2000 si configura allo stesso modo quindi, quindi questo tutorial risulta valido per: IOT2000, IOT2020 e IOT2040.

  • Per procedere alla creazione dell’SD di boot da inserire all’interno dell’IOT 20×0 fate riferimento alla seguente pagina web sul sito di Siemens: Immagine di esempio scheda SD SIMATIC IOT2000
  • Eseguire il download di: Example_Image_V2.4.0.zip (365,0 MB)
  • Inserire la micro SD all’interno del vostro computer, oppure utilizzate un’adattatore esterno.
  • Scompattate il file che avete scaricato e copiatelo sull’SD. Per la copia su SD per gli utenti Windows rimando alla pagina 9 del manuale allegato: SETTING UP the SIMATIC IOT2020, SIMATIC IOT2040 in cui viene utilizzato Win32 Disk Imager.
    In alternativa per gli utenti MacOSX, Window e Linux consiglio l’utilizzo balenaEtcher applicazione estremamente utile e semplice da utilizzare.

Avviare balenaEtcher e selezionare il file compattato sul vostro HD:

Selezionare l’unità su cui compare l’immagine:

Selezionare la periferica:

Avviare la copia facendo click su “Flash!”:

Verrà richiesto l’inserimento della password di amministratore per effettuare cambiamenti sul disco di destinazione:

 L’operazione di copia può durare parecchi minuti:

Inserire ma micro SD all’interno del dispositivo

Aprire la cover destra (µSD card, battery)

Spostare verso il basso il blocco SD

Aprire il blocco

Inserire la micro SD

Chiudere il blocco e spostare verso l’alto

Primo avvio del Simatic IOT 2040

I passi che seguono mostrano come accedere al SIMATIC IOT2040 mediante l’IP statico per configurare la rete. E’ importante ricordare che SIMATIC IOT 2040 ha come impostazione predefinita l’indirizzo DHCP sulla porta porta Ethernet – X2P1 e se lo si desidera è possibile accedere direttamente utilizzando l’indirizzo IP assegnato.

Con IOT2040 spento collegare un’estremità del cavo Ethernet al computer e l’altra alla porta Ethernet-X1P1 del dispositivo SIMATIC IOT2000, se state usando un IOT2040 la porta X1P1 è quella che si trova sulla sinistra.

Attenzione: Usare una tensione di alimentazione continua dai 9 ai 36V massimi

Una volta acceso SIMATIC IOT2000, vedrete il seguente comporatamento dei LED:

  • PWR: fisso; dispositivo acceso
  • SD: intermittente successivamente si spegnerà
  • USB: fisso; dispositivo acceso

Il LED SD sarà intermittente perché viene modificata la dimensione del filesystem, questa fase potrebbe durare qualche minuto (dipende da che tipo di SD state utilizzando) attendere fino a quando non cambia lo stato del LED da fisso a spento, a questo punto potrete accedere all’IOT.

SIMATIC IOT2000 permette l’accesso tramite seriale, SSH e Telnet; in questa guida effettueremo una connessione SSH.

SIMATIC IOT2000 ha come indirizzo statico di default: 192.168.200.1. Per stabilire una connessione SSH, il vostro computer dovrà avere la stessa sottorete di SIMATIC IOT2000.

Se state utilizzando Windows utilizzate la guida SETTING UP the SIMATIC IOT2020, SIMATIC IOT2040

Gli utenti Linux e MacOSX possono seguire i passi che seguono.

Quanto la rete del vostro computer è configurata con la stessa sottorete del SIMATIC IOT2040 verificare la connettività con un ping:

Il risultato dovrebbe essere simile a quanto indicato nell’immagine che segue, se ciò accade vuol dire che il dispositivo è correttamente configurato

Accedere al gateway utilizzando il comando

Al primo accesso verrà chiesto di approvare la connessione SSH, scrivete “yes” e premete invio per continuare.

Una volta stabilito l’accesso vedrete la seguente struttura sul vostro terminale:

Come dette sopra, l’indirizzo statico del SIMATIC IOT 2040 è impostata a 192.168.200.1 pertanto, se è necessario un altro indirizzo IP statico o un indirizzo DHCP, questo può essere impostato nel file “interfaces” nella directory “/etc/network”.

Per fare questo dovete spostarvi nella directory:

Aprire il file “interfaces” usando l’editor nano:

Il contenuto del file “interface” è per default impostato come di indicato di seguito:

 

Se state lavorando con SIMATIC IOT2040 l’indirizzo DHCP è configurato per default sulla seconda porta (X2P1LAN). Accertatevi che il cavo di rete sia connesso sulla seconda porta Ethernet e riavviate il gateway

Se lavorate con SIMATIC IOT2020 e desiderate impostare l’indirizzo DHCP dovete modificare l’interfaccia come indicato di seguito e riavviare successivamente il gateway:

Utilizzo dell’Arduino IDE

SIMATIC IOT2000 è compatibile con l’IDE Arduino attraverso il pacchetto Galileo. Seguire i passi in elenco per configurare correttamente la scheda.

1 – Aprite l’IDE Arduino

2 – in Tools selezionare Board > Boards Manager

3 – inserire nel campo di ricerca Intel i5 e fate click su Install

4 – Selezionare Intel Galileo Gen2 dal menù Tools > Board 


5 – Utilizzare la connessione micro USB per connettere IOT2040 al computer

6 – Selezionare la porta COM assegnata da Tools > Port > Intel Galileo

7 – Aprire lo sketch di esempio Blink: File > Examples > 01.Basics > Blink e effettuare l’upload sullo IOT2040, al termine del trasferimento il LED USER lampeggerà. Se il vostro computer non rileva la scheda l’IOT2040 dovrete provvedere ad aggiornare manualmente i driver seguendo il link.

Lunga vita e  prosperità! 🙂

 

Articoli simili:

Pubblicato in i miei allievi, siemens | Contrassegnato , , , , , , | Lascia un commento

Errori comuni nell’uso di Arduino – fare più azioni nell’if senza l’uso delle parentesi graffe

Continua la segnalazione degli errori che spesso vengono commessi durante le prime attività di programmazione con Arduino.
La sequenza di istruzioni da eseguire se risulta vera la condizione dell’istruzione if  (il corpo della if) deve essere racchiusa tra parentesi graffe. L’errore è immaginare che l’indentazione sia sufficiente per indicarne l’appartenenza al corpo della if, modalità valida in altri linguaggi di programmazione come in Python, ma non in C:

Uso non corretto

Uso corretto

Buon lavoro 🙂

Articoli simili:

Pubblicato in arduino, i miei allievi | Contrassegnato , , | 1 commento

Gestire con micro:bit un display 1602 I2C

Ho realizzato questo tutorial come risposta ad un quesito che mi è stato posto da un’amica collega sull’utilizzo del display 1602 I2C comandato da micro:bit.
Per quanto riguarda la descrizione tecnica del display vi rimando al post su questo sito:

Utilizzo dell’LCD 16×2 Hitachi HD44780 1602 con modulo I2C PCF8574T

Per un utilizzo con micro:bit è sufficiente conoscere il tipo esatto di integrato I2C che gestisce la comunicazione tra display e micro:bit nella modalità indicata da questo tutorial.

Aprite un nuovo progetto dall’ambiente grafico di programmazione di micro:bit.
Aggiungiamo l’estensione che consente la gestione di un display 16×2 I2C, per far ciò selezionate “+Extensions”:

nel campo di ricerca inserite: I2C

dovreste ottenere il seguente risultato:

Selezionate l’estensione indicata nell’immagine:

All’interno dei blocchi disponibili ritroverete quelli che fanno riferimento al display:

Ogni dispositivo I2C dispone di un indirizzo, un codice a cui bisogna far riferimento in fase di programmazione e per quanto riguarda la scheda di comunicazione I2C disposta sul retro del display troverete due tipi di dispositivi con indirizzo differenti l’uno dall’altro. La differenza consiste nel tipo di circuito integrato che gestisce la comunicazione I2C:

  • PCF8574 > indirizzo 39
  • PCF8574A > indirizzo 63

L’indirizzo dovrà essere inserito all’interno di un apposito blocco come indicato di seguito.

Per sapere quale indirizzo usare potete leggere la sigla dell’integrato, come indicato nell’immagine che segue:

nel mio caso l’indirizzo da inserire sarà il 39.

L’altro metodo consiste nel sostituire, nel codice che segue, gli indirizzi sopra indicati in modo da individuare il numero corretto che permette la visualizzazione del testo sul  display.

Per il collegamento del circuito avete necessità di alimentare il display a 5V, in commercio esistono degli edge connector (connettore per collegare micro:bit alla breadboard) che prelevano dalla USB i 5 volt, nel mio caso questa funzionalità non è fornita, l’unica tensione disponibile è di 3,3V non sufficienti per alimentare il display.

Se anche voi siete nelle medesime condizioni allora alimenterete via USB il micro:bit mentre il display dovrà essere alimentato esternamente mediante una tensione di 5V. Se agite in questo modo ricordate che la terra (GND) dovrà essere la medesima (collegate insieme) per entrambi i dispositivi. Fate riferimento allo schema di seguito indicato:

Sul micro:bit il pin 20 corrisponde all’SDA e il pin 19 all’SCL, pin che avranno una corrispondenza con il display. Per le mie sperimentazioni dispongo di un cavo USB modificato per poter inserire su breadboard la tensione di 5V proveniente dalla USB del computer.

Realizzeremo un semplice programma che consente di visualizzare su due righe il testo:

BBC micro:bit
Italy timer

dove timer è il numero di secondi trascorsi dall’avvio del programma.

L’inserimento della prima istruzione provocherà la visualizzazione del display I2C:

L’istruzione “LCD initialize with Address 39” assegna al display l’indirizzo 39

L’istruzione “show string” mostrerà sul display il testo incluso nel primo campo: “BBC micro:bit” che verrà scritto a partire dalla colonna 0 e riga 0 (in prima riga).

La seconda “show string” mostrerà sul display il testo “Italy” alla colonna 0 e riga 1 (in seconda riga):

Definiamo una nuova variabile che andremo successivamente ad incrementare:

assegnamo alla variabile il nome: contatore

All’interno della funzione “forever” inserire l’istruzione “change” per incrementare di una unità la variabile “contatore”.

Con l’istruzione “show number” visualizziamo sul display un numero, inserendo nel primo campo la variabile “contatore” il numero visualizzato sarà quello memorizzato nella variabile contatore:

La visualizzazione del numero contenuto in “contatore” avverrà in colonna 6 riga 1:

Aggiungendo una pausa di 1 secondo l’incremento del numero che appare sul display sarà di 1 secondo:

Questo il risultato:

Buon Coding a tutti 🙂

Articoli simili:

Pubblicato in i miei allievi, micro:bit | Contrassegnato , , , , | Lascia un commento

Storie di making scolastico: oggetti “parlanti” con i tag NFC

Consigli di classe per consegna pagelle.
30 min liberi prima che si riparta con il successivo consiglio… scrivo sul mio iPhone una relazione, la mente divaga e rifletto sulla modalità con cui ho pagato con il precedente smartphone l’iPhone 11 che sto utilizzando per scrivere, ho usato Apple Pay che sfrutta la tecnologia NFC….Tecnologia NFC… pensa che ti ripensa… idea! Attività semplice e coinvolgente per i ragazzi!

mi chiedo: ma se disseminassi di tag NFC il laboratorio di automazione “per far parlare” ogni oggetto forse potrebbe essere utile… si sì mi piace mi piace!

Tra le moltissime attività in programma per il PCTO (ex alternanza) aggiungo questa:

Titolo: “oggetti parlanti – automazione del laboratorio di automazione – NFC ovunque, piccoli oggetti per migliorare la vita lavorativa” 🙂

Sottotitolo:
Ricavare informazioni da qualsiasi oggetto.
Avvicina lo smartphone dotato di tecnologia NFC ad un oggetto su cui è disposto un tag NFC e provochi l’apertura di una pagina web o di altra azione sul tuo smartphone.

La tecnologia NFC: Near Field Communication, in italiano ”Comunicazione di prossimità” è una tecnologia di trasmissione a corto raggio senza fili, che permette di mettere in comunicazione due dispositivi. La comunicazione NFC è stata sviluppata nel 2004 da LG, Sony, Samsung, Philips e Nokia.

Lo standard prevede una comunicazione 13,56 MHz e può raggiungere una velocità di trasmissione massima di 424 kbit/s quindi velocità non troppo elevate, ma adatta alla trasmissione di piccole quantità di dati tra due dispositivi vicini, non superiore ai 10 cm. L’attivazione della comunicazione bidirezionale peer-to-peer avviene se i dispositivi non superano una distanza di 4 cm.

I dispositivi compatibili con NFC come ad esempio smartphone, tablet dispongono a bordo di un chip elettronico che permette questo tipo di comunicazione dati. Nel caso il vostro dispositivo non fosse dotato di questa tecnologia in commercio potete trovare micro SD e SIM con chip NFC.

Le applicazioni più comuni si riferiscono ai pagamenti elettronici.
Utilizzare NFC per acquistare biglietti della metropolitana o ancora per effettuare pagamenti registrando la propria carta di credito all’interno di una applicazione specifica: Wallet per Apple, Android Pay per smartphone Android.

Il chip NFC può essere programmato tramite applicazioni per smartphone o programmi specifici per PC per svolgere una specifica azione quando il dispositivo viene avvicinato ad un tag NFC.

Con due Smartphone dotati di NFC si posono scambiare rapidamente foto, video e file e molto altro come ad esempio la condivisione della propria posizione su Google Maps.

Utilizzo dell’NFC a scuola:

  1. fuori dall’aula per far si che chiunque possa avere informazioni sull’impegno orario dell’aula;
  2. su ogni armadio per avere immediatamente informazioni sulle dotazioni e avvisi su spostamenti o riparazioni strumenti;
  3. su ogni strumento di laboratorio per avere il manuale di utilizzo;
  4. sperimentarne l’uso per persone ipovedenti, il tag NFC attiverà audio sullo smartphone (già in sperimentazione per progetto scolastico);
  5. realizzare involucri per tag NFC facilmente applicabili su confezioni di alimenti per avere informazioni sulla data di acquisto e scadenza del prodotto conservato ad esempio in frigorifero;
  6. assegnare un tag ad ogni PC del lab. per avere un rapido resoconto sui software installati.

Venerdì mattina durante “l’ora buca” una corsa al Lab. Territoriale del Pininfarina, rapidissimo disegno di un contenitore e taglio laser dei primi 5 contenitori per tag NFC da collocare il Lab. Automazione.

In settimana incollerò su ogni PLC Siemens che abbiamo in laboratorio automazione, altri tag su cui inserirò link a pagina web che rimanda a manuali e mie lezioni e così farò sulle schede Arduino, in questo modo nessuna scusa da parte degli studenti 🙂 “Prof. dove trovo le dispense?”,  “Prof. dove trovo il manuale?” chiedilo al PLC! Accarezzalo coi il tuo smartphone 🙂

Quasi quasi incollo tag NFC anche agli appunti cartacei 😉 in modo da aggiungere contenuti multimediali che potrò modificare anche nel tempo (un tag può essere riscritto), meglio di un QR Code, all’interno della memoria del tag posso personalizzare e modificare i contenuti.

Drin Drin! Suona la campanella!
Appena in tempo per concludere il progettino NFC
si va al prossimo consiglio di classe.

Buon making a tutti 🙂

Articoli simili:

  • Non sono presenti articoli simili.
Pubblicato in elettronica | Contrassegnato , , , , , | Lascia un commento

Utilizzare M5StickC con l’IDE UIFlow

UIFlow è una piattaforma di programmazione appositamente progettata per i dispositivi M5Stack. L’IDE di programmazione grafico a blocchi è basato su blockly, linguaggio grafico di programmazione ben conosciuto in campo didattico. UIFlow consente inoltre di programmare qualsiasi oggetto M5Stack in MicroPython, implementazione di Python 3 per microcontrollori e sistemi embedded. MicroPython, come molti di voi sapranno, è un linguaggio di programmazione snello ed efficiente ideale per attività di Coding a scuola e da sempre impiegato in campo scientifico.

UIFlow fornisce le funzionalità necessarie per la realizzazione, in maniera estremamente semplice, progetti con forte interazione con il mondo reale, ideale quindi per chi si avvicina al mondo della prototipazione elettronica, dell’automazione e della programmazione.

L’IDE UIFlow può essere utilizzato on-line oppure localmente scaricandolo dal sito principale. Per prelevarlo collegatevi al sito https://m5stack.com/ e selezionate dal menù principale: software > download:

Nella pagina posizionate il mouse sul pulsante “Download” di UIFlow-Desktop-IDE, apparirà un menù a discesa, selezionate il sistema operativo su cui dovrà essere istallato UIFlow

Una volta prelevato il programma scompattate il file ed eseguite facendo doppio click

All’avvio dell’IDE viene controllato se sono presenti i driver necessari per poter gestire i dispositivi M5StickC.
M5StickC non necessita di installazione driver per i sistemi operativi Windows 10, Mac (High Sierra+), Linux. Per altri sistemi operativi, oppure se il dispositivo non dovesse essere rilevato dai sopracitati SO dovete installare il driver CP210X per il vostro sistema operativo, il driver può essere prelevato sempre dall’area download.

Al termine dell’installazione di UIFlow collegate M5StickC con il cavo USB C al computer.

M5StickC può essere programmato via USB o in modalità WiFi, in questo tutorial procederemo ad una prima programmazione in modalità USB.

Una pressione di 2 secondi sul power button, sulla sinistra di M5SickC provoca l’accensione del dispositivo, non appena compare il logo di UIFlow premete il pulsante grande M5 per accedere al menù di setting. Per spostarsi tra i menù disponibili utilizzare il pulsante sulla destra in alto di M5StickC:

Dal menù Setup potrete scegliere la modalità di programmazione e potrete impostare il WiFi. Per questo tutorial selezionate la modalità USB.

Selezionare la modalità di programmazione:

Selezionare la modalità USB:

Nell’IDE di programmazione dovete selezionare la seriale facendo click sulla parte in basso a sinistra della finestra dove compare la segnalazione COM:

Il click permetterà di aprire la finestra di selezione della COM:

Dal menù a discesa COM selezionare la porta seriale a cui avete collegato l dispositivo:

Per Windows 10 la seriale è identificata da COM seguito da un numero, mentre per sistemi Mac e Linux dalla sigla tty seguito da una serie di numeri e lettere. La modalità di selezione della seriale è la medesima per tutti i sistemi operativi.

Realizziamo il primo programma: Accensione del LED interno

Selezionare “Hardwares” dalla blocks list, selezionare LED e successivamente l’istruzione “LED ON” che dovrete trascinare nell’area di programmazione collegandola al blocco Setup.

Per eseguire il programma sul dispositivo fate click sul pulsante play che trovate in alto a destra della finestra, il LED rosso della scheda si accende.

Realizziamo il secondo programma: Blink del LED interno

Dalla sezione Event selezionare Loop ed collegarlo al Setup, nel Loop inserire la sequenza delle istruzioni: LED ON, Wait 1 S, LED OFF, Wait 1 S, così come indicato nell’immagine che segue. Per eseguire sul dispositivo un click sul pulsante Play:

Interfaccia di programmazione

01. Titolo del progetto
Inserite il nome del vostro progetto in questa area.

02. Blockly/Python
Consente di selezionare la modalità di programmazione Blockly oppure Python

03. Tab menù
Per accedere al forum, alla documentazione, agli esempi, ripetere l’ultima azione eseguita, fare l’upload dei file, eseguire il programma ed accedere alle impostazioni del dispositivo.

04. Anteprima UI
Trascinare testo e immagini sullo schermo del dispositivo virtuale per creare l’interfaccia grafica. Non appena inserite elementi grafici, appariranno nella lista delle istruzioni centrali le funzioni specifiche per manipolare gli oggetti grafici

05. Units
Aggiungere unità hardware che fanno parte del progetto tra quelle standard disponibili su M5Steck e stabilire le porte di connessione.

06. Hide UI
Possibilità di nascondere il dispositivo virtuale per aumentare lo spazio disponibile per la programmazione

07. Menù istruzioni Code Block
Contiene tutti i blocchi necessari per la programmazione. La sezione Hardware contiene le istruzioni che agiscono direttamente sull’elettronica dell’M5StickC. Troverete la sezione Math che include operazioni matematiche e Logic che raccoglie operatori logici e strutture di controllo.

08. Area di Codice
L’area in cui saranno trascinati i blocchi per realizzare il programma

Lista delle istruzioni

01. Event
Funzione Loop e gli eventi legati alla pressione dei pulsanti

02. Hardware
Blocchi dedicati all’elettronica del dispositivo: LED, IMU e gestione alimentazione

03. Units
Ogni volta che si aggiunge un’unità specifica in questa sezione appaiono i blocchi specifici alla sua gestione

04. Math
Blocchi per eseguire calcoli matematici

05. Logic
Blocchi per l’esecuzione di operazioni logiche e controllo di flusso

06. Advanced
Sezione dedicata per i programmatori esperti. Blocchi per il networking, per la gestione dei pin analogici e digitali e molto altro.

Come costruire un programma con Blockly

Setup

Il blocco Setup è essenziale per eseguire qualsiasi programma è il primo blocco che viene eseguito non appena il programma viene caricato sul dispositivo. Il Setup viene eseguito una sola volta.

Loop

Questo blocco esegui in modo continuo per sempre tutte le istruzioni in esso contenute, ciò implica che l’esecuzione del loop può essere interrotta solamente se viene tolta l’alimentazione al dispositivo.

Wait

Il blocco Wait pone in attesa il programma per un tempo specificato dal parametro numerico che può essere impostato dall’utente.

Sequenza di programmazione

Connessione blocchi

Come sicuramente avrete intuito blockly ricorda molto la filosofia di programmazione di altri ambienti di programmazione come ad esempio Scratch o il MakeCode editor di BBC micro:bit. Anche per UIFlow che utilizza blockly, i blocchi si uniscono “magneticamente” insieme, incastrandosi e cambiando colore, nel caso non si abbia un cambiamento colore vuol dire che blocchi non sono uniti.

Alcuni trucchi per chi comincia con UIFlow

  • Per duplicare un blocco tasto destro del mouse sul blocco e fare click sulla voce del menù contestuale che appare: duplicate.
  • Per cancellare un blocco trascinarlo sulla lista della collezioni delle istruzioni oppure sull’icona del cestino in basso a destra o ancora click tasto destro del mouse e “Delete block”

Nella prossima lezione vedremo come realizzare i primi programmi.

Buon Coding a tutti 🙂

Articoli simili:

Pubblicato in elettronica | Contrassegnato , , , , , , | Lascia un commento

Errori comuni nell’uso di Arduino – uso non corretto della digitalWrite

Errore: considerare la “,” come separatore di istruzioni e non come separatore di valori. In C una scrittura del tipo: (a, b, c) è una sequenza di espressioni separate da virgola che valuta l’ultima espressione c, mentre {a; b; c;} è una sequenza di istruzioni che non valuta nulla.
La virgola si inserisce solamente tra due espressioni a differenza del punto e virgola che si inserisce alla fine di un’istruzione (ma non di un’istruzione di blocco come: if, for, while, do while).

Esempio non corretto

Esempio corretto

O ancora meglio usando un ciclo for:

Domanda che in genere faccio ai ragazzi:
“perché ho dichiarato i come byte e non come int?”

La risposta la trovate in: Appunti di programmazione su Arduino: tipi di dati in cui viene evidenziato che la dimensione del tipo byte è di 8 bit (1 byte) e rappresenta interi (senza decimali) ed hanno un range da 0 a 255, mentre gli int sono dei tipi di dato usati per memorizzare numeri senza decimali e memorizzano valori a 16 bit (2 byte) nel range da 32.767 a -32.768, quindi usando il tipo byte occupiamo meno spazio in memoria.

Buon Coding a tutti 🙂

Articoli simili:

Pubblicato in arduino, i miei allievi | Contrassegnato , , , | Lascia un commento

M5 StickC

E’ da qualche mese che sto utilizzando M5 StickC per la progettazione di future esercitazioni di laboratorio, mi piace considerarlo il fratellino 🙂 di M5Stack Fire segnalato su queste pagine qualche mese fa.
M5StickC ESP32 Development Board è una scheda di sviluppo estremamente versatile programmabile in diverse modalità e vi permette di realizzare facilmente e rapidamente progetti IoT. In questi mesi ho realizzato una serie di progetti: datalogger, telecomando WiFi e IR,  utilizzo con sensore PIR, controllo velocità motori e molto altro. Grazie all’interfaccia GROVE e GPIO è possibile connettere dispositivi esterni, sul sito ufficiale ne trovate moltissimi. Attualmente, connesso ad un piccolo altoparlante, sto sviluppando un dispositivo per persone ipovedenti.

Il sito ufficiale è: https://m5stack.com/

Sul sito di riferimento troverete moltissimi dispositivi e moduli di espansione, tra questi il già citato M5Stack FIRE ed altri prodotti molto interessanti di recente presentazione: ATOM Matrix ESP32 e M5StickV K210 AI Camera di cui vi parlerò in prossimi post e che sto utilizzando per altre tipologie di sperimentazioni.

Il piccolo “mattoncino” ha dimensioni estremamente contenute 5×2,5cm

all’interno trovano posto:

  • ESP32
  • display da 0,96 pollici (risoluzione 160×80)
  • microfono
  • buzzer
  • trasmettitore IR
  • WiFi
  • Bluetooth
  • accelerometro
  • giroscopio (6 gradi di libertà)
  • LED di segnalazione integrato
  • due pulsanti (A e B) programmabili
  • batteria da 80 mAh
  • memoria flash da 4MB
  • modalità di programmazione via USB e WiFi
  • Linguaggi di programmazione: UIFlow (blockly), C (pronto per essere programmato con IDE Arduino), MicroPython

I due video che allego di seguito forniscono una rapida presentazione sulla programmazione usando UIFlow e Arduino:

M5 Stick C può essere acquistato anche con un pratico cinturino da polso, ciò vi permetterà ad esempio di realizzare il vostro smartwatch IoT.

Per l’acquisto di M5 Stick C potete utilizzare il sito di riferimento, oppure direttamente su AliExpress. Alcuni prodotti di M5Stack potete trovarli anche su Amazon.

Per comprendere possibili applicazioni vi segnalo le sezioni del sito ufficiale:

Seguiranno a questo post una serie di tutorial sulla configurazione e aggiornamento del firmware, programmazione ed esempi di applicazioni.

Buon Making a tutti 🙂

Articoli simili:

Pubblicato in elettronica, news | Contrassegnato , , , , | Lascia un commento

Disegnare caratteri personalizzati con Arduino per un LCD 16×2

Durante le attività di sperimentazione capita spesso la necessità di utilizzare caratteri speciali o icone che non fanno parte del set di caratteri ASCII standard (https://www.asciitable.com) visualizzatili su un display 16×2. Ovviamente un display LCD 16×2 non permette risoluzioni elevate, ma la qualità che si riesce ad ottenere è più che accettabile.

Tutti i display LCD basati sul controller Hitachi HD44780 hanno due tipi di memorie in cui vengono memorizzati i caratteri: CGROM e CGRAM (Character Generator ROM & RAM). La memoria CGROM non è volatile e non può essere modificata mentre la memoria CGRAM è volatile e può essere modificata in qualsiasi momento.

CGROM è usato per memorizzare tutti i caratteri permanenti che possono essere visualizzati usando il loro codice ASCII. Ad esempio, se scriviamo 0x4D, sul display viene visualizzato il carattere “M”. CGRAM è un’altra memoria che può essere utilizzata per la memorizzazione di caratteri definiti dall’utente.

Questa RAM è limitata a 64 byte, cioè implica che per LCD a 5 × 8 pixel come LCD 16×2 Hitachi HD44780, nel CGRAM possono essere memorizzati fino a 8 caratteri definiti dall’utente.

Un carattere sul display viene realizzato utilizzando una matrice di pixel 5 × 8, quindi per definire un nostro carattere dovremo lavorare in quest’area.

La definizione del carattere personale avviene utilizzando la funzione createChar() della libreria LiquidCrystal.

Prima di utilizzare la libreria createChar() è necessario impostare un array di 8 byte ed ognuno di essi definisce una riga della matrice costituita dalla lettera b che definisce il tipo del dato (byte) e la serie di 1 e 0 definiscono i pixel attivi o disattivi: nell’array i bit a 1 indicano i pixel attivi, mentre gli 0 indicano i pixel disattivi.

Nell’esempio che segue viene utilizzato un display 16×2 i2c

Per quanto riguarda la libreria LiquidCrystal_I2C vi rimando alla lezione:
Utilizzo dell’LCD 16×2 Hitachi HD44780 1602 con modulo I2C PCF8574T

Nel caso abbiate necessità di sviluppare in modo più semplice ed agevole i vostri caratteri personalizzati potete utilizzare una soluzione grafica che immediatamente vi permettessi impostare l’array di byte, fate riferimento a questi due link:

da cui ho realizzato velocemente le icone, il codice corrispondenti è poi stato inserito all’interno dello sketch come si può evincere dallo sketch che segue:

Dopo aver incluso la libreria, è necessario inizializzare l’array che definisce il carattere personalizzato definito da 8 byte.

Nel setup() bisogna inizializzare il carattere personalizzato mediante la funzione createChar(), che accetta due parametri, il primo, compreso tra  0 e 7 è utilizzato come indirizzo ad uno degli 8 caratteri creati personalizzati, il secondo parametro definisce il nome dell’array di byte che definisce il carattere personalizzato.

Successivamente nel loop, per la visualizzazione del carattere personalizzato viene utilizzata la funzione write() che ha come parametro il numero (l’indirizzo) assegnato al carattere.

Esercizi per i miei studenti

Esercizio 1

Realizzare uno sketch che mostra un omino che cammina da sinistra verso destra e ritorno, in modo continuo. Il movimento deve essere accompagnato dall’emissione di due note che mettono in evidenza il passo.

Esercizio 2

Realizzare un Pac Man che partendo dalla riga 0 colonna 0 mangi una serie di puntini , scende alla riga 1 colonna 0 e prosegue fino alla riga 1 colonna 15 dove si trova un fantasma che deve essere mangiato. Predisporre un buzzer che emette due tipi di suoni, uno che identifica quando Pac Man mangia un puntino ed uno quando Pac Man mangia il fantasma. Quando il fantasma viene mangiato il display fa un 3 blink e l’azione comincia nuovamente con il Pac Man che si posizione in riga 0 colonna 0.

Esercizio 3

Realizzare un sistema che rilevi il livello di carica di batterie da 1,5V.
Utilizzare 7 icone che definiscono livelli diversi di carica della batteria e a fianco di ogni icona deve anche apparire in modo numerico il valore di tensione misurato.

Esercizio 4

Realizzare uno sketch che valuta in percentuale la quantità di luce in una stanza e la mostra su display mediante numero in percentuale e una barra di livello realizzata con caratteri personalizzati che può aumentare o diminuire in funzione della quantità di luce che colpisce l’LDR.
Mediante la pressione di un pulsante viene attivata la calibrazione del sistema, questa fase dura 5 secondi in cui viene misurate il valore minimo di luce (comprendo con mano il sensore) e valore massimo della luce (togliendo la mano dal sensore). La fase di calibrazione deve essere evidenziato dalla scrittura su display del messaggio: “calibrazione” e icone animate che dovete inventare.

Articoli simili:

Pubblicato in arduino, i miei allievi | Contrassegnato , , , , , , , | Lascia un commento

Utilizzare un orologio RTC con Arduino – Modulo Tiny RTC I2C – Visualizzazione su display I2C

Continuo la serie di post dedicati all’uso dell’RTC con integrato DS1307, in questa lezione viene suggerito come visualizzare su un display 16×2 Hitachi HD44780 1602 con modulo I2C PCF8574T: giorno della settimana, data e ora.
L’obiettivo che si vorrà raggiungere nei prossimi tutorial sarà quello di realizzare un timer programmabile da utilizzare in diverse esercitazioni di automazione.

Lo Schema di collegamento è il seguente:

Allego lo Sketch generale in cui ho inserito commenti di spiegazione sulle varie parti del codice e sull’utilizzo di specifiche funzioni.

Per quanto riguarda la libreria LiquidCrystal_I2C vi rimando alla lezione:
Utilizzo dell’LCD 16×2 Hitachi HD44780 1602 con modulo I2C PCF8574T

Di seguito riprendo quanto già inserito nei commenti:

Definisce un Array multidimensionale costituito da 7 righe, i giorni della settimana e 4 colonne, le lettere che compongono il giorno (3 lettere) più il carattere null con cui deve terminare una stringa.

Il controllo della disconnessione dell’RTC viene effettuato anche all’interno del loop, se ciò non venisse eseguito, una disconnessione dell’RTC non permetterebbe la visualizzazione del messaggio “RTC non risponde”, ma verrebbero mostrati valori numerici errati. La successiva connessione dell’RTC farà riapparire data e ora, ma in una modalità non allineata, in cui saranno mostrati i valori numerici derivanti dalla precedente disconessione.

La cancellazione del display avviene una sola volta, solo se si è verificata una precedente disconnessione dell’RTC. L’azione è necessaria perché in fase di riconnessione dell’RTC appaiono sul display numeri non coerenti. La cancellazione potrebbe essere effettuata direttamente nel corpo della prima if, ma ciò causerebbe un flikering del testo così come appare nell’immagine che segue:

int sprintf(char *str, const char *format, …); ha lo stesso funzionamento della printf, con la differenza che l’output non sarà visualizzato sullo schermo (standard output), ma immagazzinato nel vettore str.

%d è uno dei possibili specificatori di formato che può essere usato nella sprintf ha il compito di indicare alla funzione (la sprintf) il tipo della variabile che deve essere visualizzata, in questo caso con d indichiamo decimale. Con %02d si specifica la stampa di solo due numeri decimali.

Per i miei allievi:

Esercizio 1

Modificare lo sketch proposto in modo che la retroilluminazione dello schermo venga spenta dopo 15 secondi e la pressione di un pulsante la riattivi.

Esercizio 2

Modificare lo sketch realizzato al punto 2 inserendo anche un sensore DHT11 che mostra temperatura ed umidità dell’ambiente.

Articoli simili:

Pubblicato in arduino, i miei allievi | Contrassegnato , , , , , , | Lascia un commento