Arduino Base: Lezioni

Author:Andrea Manni
Copyright:GFDL
Version:1.0

Traccia degli argomenti del corso base su Arduino MakeItModena tenuto da Marzo 2017 al Mercoledi’ e Giovedi’ in via Barchetta. Questo documento non costituisce un manuale per il corso ma solo una traccia degli argomenti trattati nelle varie giornate di lezione, i riferimenti per testi e risorse consigliati li trovate su: http://lab.piffa.net/testi.html

Generato il 2017-04-21 con: http://docutils.sourceforge.net/rst.html

Mercoledi’ 22 Marzo

Linux

  • Free software e Open Hardware: condivisione del lavoro.
  • Portabilita’, multiarch, flessibilita’

Architettura di un elaboratore

  • Schema CPU - RAM - HD STORAGE
  • CPU - BIT (word) e frequenza, features: multitasking
  • INPUT e OUTPUT = PC: tastiera monitor + rete, USB BT...
  • MCU: tutto integrato nel IC
  • INPUT OUTPUT: 20 {22) pin , 14 input / output, 6 analog input 10bit resolution 1024 values , 6 PWM output (8bit resolution).
  • Communication: serial in / outi (UART TTL), I2C + SPI (sarebbero i 2 pin MISO MOSI in piu’ per arrivare a 22).
  • http://arduino.cc/en/Main/arduinoBoardUno
  • Differenze con un PC: interazione con perifieriche (USB), multitasking, prestazioni per flussi di dati (da 8 a 32bit).
  • Software: firmware o sistema operativo. Arduino non ha un OS ma viene caricato direttamente un firmware con al massimo un bootloader allegato, RPi e’ un sistema linux completo, altri embedded possono usare soluzioni intermedie come FreeRTOS per MCU come ESP8266.
  • Comparativa tra vari arduino: http://arduino.cc/en/Products.Compare , http://www.makershed.com/pages/microcontroller-comparison

HardWare

  • Arduino: architettura di base e le varie schede della famiglia.
  • ATmega328 MCU, IC montato DIP / DLP (dual in line package) e non SMD (surface mounted), sostituibile. 20 / 22 pin utilizzabili: 14 digital in/out (6PWM), 6 analog input, USB, 2 ICSP, reset button.
  • Power: via USB, via l’entrata regolata (7-12v) con protezione di reverse polarity, i connettori POWER Vin non sono protetti.
  • 4 LED: power, RX, TX, LED (pin 13 con resistenza).

Arduino IDE

Primo approccio all’IDE Arduino.

  • Compilazione - sorgente (passaggi vari: precompilatore, linker) ->
  • codice oggetto specifico per CPU / Architettura. Upload (burn)
  • codice su flash di arduino via USB. Poi USB come seriale (non possono lavorare assieme).

Arduino IDE: sistema integrato. Utilizzare IDE.

Tools -> serial / board

Barra strumenti - Short cuts

Ctrl + R      Verify
Ctrl + U      Upload
Ctrl + Shift + M      Serial Monitor
Menu Contestuale: cerca nella guida

Upload -> LED: rx tx power led

Giovedi’ 23 Marzo

Software

Compilazione - sorgente (passaggi vari: precompilatore, linker) -> codice oggetto specifioc per CPU / Architettura. Upload (burn) codice su flash di arduino via USB. Poi USB come seriale (non possono lavorare assieme).

Programmazione

Primi sketch:

Argomenti:

  • Esercizio Blink, 4 parti: commenti - dichiarazione variabili - funzione setup() - funzione loop.
  • istruzioni e sequenze di istruzioni.
  • Singola Istruzione termina con punto e virgola.
  • Partire dalla funzione digitalWrite(), modificare i tempi e ripetere: sequenze di istruzioni.
  • Variabili: impostare i tempi di delay() con una variabile.
  • fare una funzione per rapido() - lento(), guardare loop() e setup()

Mailing list

Si ricorda agli utenti che e’ stata attivata la lista arduinobase:

Mercoledi’ 29 Marzo

Elettronica

Oggi sono stati distribuiti i kit Arduino da 5e, chi avesse problemi a usare la scheda con MS Windows puo’ usare il driver: http://www.5v.ru/zip/ch341ser.zip

Saldatura

Oggi e’ stata fatta un’esercitazione di saldatura elettronica, dalla preparazione delle schede microcontroller (piedinatura) a esercizi base per i principianti: congiunzione di cavi, congiunzione di 3 cavi, congiunzione a T, preparazione di blinker LEDs.

Tra i materiali visti:

Teoria Elettronica

Prima introducione ai fenomeni elettronici, introduzione ai concetti di base quali ‘’differenza di potenziale, corrente, resistenza’‘, prima occhiata ad un circuito elettrico.

Circuito elettrico: sempre tre elementi (fonte di energia, carico, circuito), flusso di elettroni, carico, circuito aperto e chiuso, corto circuito.

  • elettricita’ : spostamento di carica per unita’ di tempo. ampere / coulomb. Metafora anelli di una catena.
  • voltaggio: differenza di potenziale, metafora con pressione acqua. 1 joule / ampere
  • Resistenze: mix chimico tra conduttore e semiconduttore. Limitano il passaggio di corrente.

Testo consigliato per il ripasso: http://www.amazon.co.uk/Electronics-All-One-For-Dummies/dp/0470147040

Tutti questi concetti verrano riesaminati tramite esperimenti pratici nel corso delle prossime lezioni, con relativi link a tutorial e documentazione.

Giovedi’ 30 Marzo

Elettronica

Ripasso su argomenti visti e accennati nella giornata precedente. Circuito elettrico: sempre tre elementi (fonte di energia, carico, circuito), flusso di elettroni, carico, circuito aperto e chiuso, corto circuito.

  • elettricita ‘ : spostamento di carica per unita’ di tempo. ampere / coulomb. Metafora anelli di una catena.
  • voltaggio: differenza di potenziale, metafora con pressione acqua. 1 joule / ampere
  • Resistenze: mix chimico tra conduttore e semiconduttore. Limitano il passaggio di corrente.

Testo consigliato per il ripasso: http://www.amazon.co.uk/Electronics-All-One-For-Dummies/dp/0470147040

Componenti: Led:

Legge di Ohm, calcolare resistenze per LED in un circuito.

Introduzione alle breadboard:

Esercizio con Arduino: collegare un secondo LED tramite breadboard:

Programma per generare schemi per Arduino + breadboard: http://fritzing.org/home/

Chi volesse altri tutorial a riguardo:

Programmazione

Funzioni:

Cicli iterativi: automatizzare sequenze di istruzioni ripetitive.

Nota: non e’ stata ancora introdotta la struttura do - while . Prime considerazioni sulle differenze di utilizzo di un ciclo while (indefinito, perdurare di una situazione es. pressione di un bottone) e ciclo for (iterazione ben conosciuta e delimitata).

Risorse

Per fondamenti di programmazione in ambiente Arduino si puo’ consultare on-line in italiano: http://www.alberti-porro.gov.it/wordpress/wp-content/uploads/2014/01/ProgrammareArduino.pdf

Un altro testo piu’ approfondito adatto a chi ha gia’ buone basi di programmazione o vuole cimentarsi comunque con una trattazione esaustiva: http://www.apress.com/9781484209417

Vedi sempre: http://lab.piffa.net/testi.html

Mercoledi’ 5 Aprile

Cicli condizionali

Programmi non deterministici, utilizzo di variabili esterne per modificare il flusso del programma: i cicli condizionali.

Differenza tra cicli while e cicli if per la gestione degli eventi.

Per gli interruttori e le resistenze in PULL DOWN / UP potete dare un’occhiata anche agli schemi sul tutorial all’URL:

Gli sketch che abbiamo utilizzato sono:

Nota

Non sono stati ancora introdotti gli strumenti per il Debug via seriale, ad es. http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_2_serial_debug/ - http://lab.piffa.net/sketchbook_andrea/basic/serial_debug/

Gli schemi per la breadboard:

Risorse

Per fondamenti di programmazione in ambiente Arduino si puo’ consultare on-line in italiano: http://www.alberti-porro.gov.it/wordpress/wp-content/uploads/2014/01/ProgrammareArduino.pdf

Un altro testo piu’ approfondito adatto a chi ha gia’ buone basi di programmazione o vuole cimentarsi comunque con una trattazione esaustiva: http://www.apress.com/9781484209417

Vedi sempre: http://lab.piffa.net/testi.html

Giovedi’ 6 Aprile

Mercoledi’ 12 Aprile

PWM: ripasso sui concetti di base

Input analogico e pwm: mappatura di un input analogico su un output analogico:

Fotoresistenza

Guida: https://learn.adafruit.com/photocells/using-a-photocell

  • Elettronica: valutare il valore della resistenza da mettere in pulldown con la Fotoresistenza.
  • calibrazione sensore con map()
  • constrain() per impostare un range e eliminare i valori spuri
  • calibrazione automatica
  • Smooth: arrotondare l’input di un sensore analogico traendo una media tra piu’ letture.
  • input analogico: sensore di luminosita’, fotoresistenza.

Mercoledi’ 19 Aprile

Multitasking

Gli esercizi succesivi della serie multitasking non sono stati guardati in aula, trattano vari passaggi di refactoring per passare dal codice procedurale nel loop a funzioni quanto piu’ possibile isolate per poi raggiungere come soluzione finale degli oggetti autonomi tramite l’analisi delle problematiche legate ai contesti (scope) locali / globali delle variabili utilizzate.

Per chi fosse interessato prettamente all’uso di millis() al posto della funzione delay() per rendere “non blocking” il codice ci sono alcuni esempi di PWM e luci in sequenza:

Se invece volete solo usare direttamente gli oggetti basati su millis potete usare la libreria common inclusa nello sketchbook_andrea.

Informatica

Introduzione alle dinamiche di funzonamento di uno scheduler, kernel e sistema operativo. Accenni a FreeRTOS per arduino:

Dimostazione di una scheda TI MSP432 con il framework RTOS Energia per lesecuzione di thread separati in vari TAB:

Confronto tra microcontrollers (arduino), embedded, single-board computer (Rasperry PI, su cui gira il kernel di Linux), personal computer: prestazioni, multitasking, consumi, latenze, utilizzo di diversi linguaggi di programmazione (es Python e altri linguaggi di alto livello per Rpi, Arduino e’ limitata al C / C++ ).

Programmazione: Refactoring

Procedere per interventi minimali per ottimizzare il codice al fine di renderlo portabile / riutilizzabile in contesti diversi. Nell’esercizio svolto in aula basato sugli esercizi https://lab.piffa.net/sketchbook_andrea/multitasking/ si e’ proceduto a modificare in modo incrementale il codice di partenza per arrivare al risultato richiesto (due LED che lampeggiano contemporaneamente). In aula e’ stato fatto fino al punto https://lab.piffa.net/sketchbook_andrea/multitasking/BlinkWithoutDelay_2_led_cleanup/ , gli studenti del corso base potrebbero approfondire fino alla versione https://lab.piffa.net/sketchbook_andrea/multitasking/BlinkWithoutDelay_5_cleanup/ per realizzare il codice tramite funzioni.

I successivi esempi 6/7/8 sono un po’ ostici, per chi volesse un esempio piu’ semplice sulla programmazione a oggetti meglio guardare l’esercizio sui LED RGB: https://lab.piffa.net/sketchbook_andrea/RGB_LED/ .

Multitasking e bottoni: interrupt

Introdizione al concetto di interrupt e descrizione delle dinamiche di funzionamento paragonate all’uso di millis, in particolare e’ stato illustrato un esempio di uso di interrupt per la lettura di un evento - cambio di stato di un bottone per superare i limiti dell’uso contemporaneo di delay() e analogRead() (polling).

Esempi:

Tutorial: