=================================== 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 .. contents:: Indice degli argomenti .. |date| date:: Generato il |date| 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 Uno ~~~~~~~~~~~~~~~~ Scheda Arduino Uno: * Info di base: http://wiki.piffa.net/index.php/ArduinoUno * `Arduino `_ * Mini guida: ftp://www.ladispe.polito.it/download/Corsi/gestinnovazioneict/Arduino%20UNO.pdf 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: * http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_0/ * http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_1_variabili/ * http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_2_funzioni/ * https://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_2_1_sos/ 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``: - https://lists.andreamanni.com/cgi-bin/mailman/listinfo/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 * Elenco componenti: http://www.piffa.net/kit/1 * Wiki: Info sui componenti: http://wiki.piffa.net/index.php/Kit_studenti * forum: http://forum.piffa.net/viewtopic.php?f=3&t=22 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: * Elenco strumenti e accessoii per saldature: http://lab.piffa.net/accessori.html#saldatori * Schede preforate: http://lab.piffa.net/accessori.html#prefboard * Altri accessori (lenti ingrandimento, lampade): http://lab.piffa.net/accessori.html#id3 * WishList di Andrea su Aliexpress per saldature: https://my.aliexpress.com/wishlist/wish_list_product_list.htm?currentGroupId=3102329025 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: - Datasheet: http://wiki.piffa.net/index.php/LED Legge di Ohm, calcolare resistenze per LED in un circuito. - http://playground.arduino.cc/Italiano/Led Introduzione alle breadboard: - http://www.peduto.it/UsoBreadBoard/uso_breadboard.htm - http://www.maffucci.it/wp-content/uploads/2008/09/breadbord.pdf Esercizio con Arduino: collegare un secondo LED tramite breadboard: - http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_5_2_leds/ - http://www.ladyada.net/learn/arduino/lesson3.html Programma per generare schemi per Arduino + breadboard: http://fritzing.org/home/ Chi volesse altri tutorial a riguardo: - http://www.maffucci.it/scuola-arduino/esercizio-2-blink-con-led-esterno/ - http://www.thebox.myzen.co.uk/Tutorial/LEDs.html - http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_5_2_leds/ Arduino ---------- Sketch visti in aula: - Schema senza programmazione: http://lab.piffa.net/schemi/circuito_led_bb.png - http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_6_doppio_leds/ Programmazione ---------------- Funzioni: * Variabili e costanti: differenze e dichiarazione di una costante con **const** * Funzioni: isolare sequenze di istruzioni tramite funzioni, primi esempi di incapsulamento. * http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_2_1_sos/ * Passare un argomento a una funzione. * http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_2_2_funzioni_argomenti/ Cicli iterativi: automatizzare sequenze di istruzioni ripetitive. * Informatica: automatismi per operazioni ripetitive. * Introdurre un ciclo while() con un iteratore, ragionare sulla gestione dell'iteratore, scope dell'iteratore * Primo esempio di un ciclo **while**: http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_3_ciclo_while/ * Individuare gli elementi fondamentali della struttura ternaria di un ciclo for: * http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_4_ciclo_for/ * https://www.arduino.cc/en/Reference/For * Accenno veloce: Utilizzare l'iteratore di un ciclo iterativo per modificare il corso di un programma: * Con un ciclo while: http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_3_1_while_veloce/ * Con un ciclo for: http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_4_1_ciclo_for_veloce/ 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 ===================== Arduino ----------------------------- Utilizzare la seriale per debug: funzioni print, println e flush . Bound Rate: BPS, velocita' di trasferimento dati. Links: - http://www.ladyada.net/learn/arduino/lesson4.html Sketch: * http://lab.piffa.net/sketchbook_andrea/basic/serial_debug/serial_hello_world/serial_hello_world.ino * http://lab.piffa.net/sketchbook_andrea/basic/serial_debug/switch_test_serial/switch_test_serial.ino 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. - cicli condizionali: IF ELSE http://www.maffucci.it/2012/04/10/appunti-di-programmazione-su-arduino-controllo-di-flusso/ - interruttori ( micro switch momentanei SPST) con PULL DOWN Per gli interruttori e le resistenze in PULL DOWN / UP potete dare un'occhiata anche agli schemi sul tutorial all'URL: * http://www.ladyada.net/learn/arduino/lesson5.html * https://learn.sparkfun.com/tutorials/switch-basics/poles-and-throws-open-and-closed Gli sketch che abbiamo utilizzato sono: - http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_1/button_1.ino .. NOTE:: 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: - http://lab.piffa.net/schemi/led_condizionale.png - http://lab.piffa.net/schemi/circuito_led_button_bb.png - http://lab.piffa.net/schemi/button_1_bb.png - http://lab.piffa.net/schemi/button_1_schem.png 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 ===================== Programmazione ---------------- - Operatori binari: - http://lab.piffa.net/sketchbook_andrea/programming/operators/operator_1_basic/ - http://www.maffucci.it/2012/03/18/appunti-di-programmazione-su-arduino-aritmetica/ Tipi di dati: byte 8 bit, INT 16bit , Long 32bit: http://www.ladyada.net/learn/arduino/lesson4.html Informatica ---------------- - Bit e byte: http://doc.andreamanni.com/intro_informatica.html#come-funzionano-gli-elaboratori -http://www.informaticapertutti.com/che-cose-il-sistema-binario-e-che-differenza-ce-tra-bit-e-byte/ - Sistema binario, trasformazioni da decimale -> binario -> decimale - http://www.youmath.it/lezioni/algebra-elementare/lezioni-di-algebra-e-aritmetica-per-scuole-medie/1816-sistema-numerico-binario.html - Trasformazione deciamle -> binario: https://vimeo.com/6419202 - https://www.khanacademy.org/math/pre-algebra/applying-math-reasoning-topic/alternate-number-bases/v/number-systems-introduction - Grandezze analogiche e digitali, conversioni AD - DA, bitrate. - http://doc.andreamanni.com/informatica_base.html#analogico-e-digitale - https://it.wikipedia.org/wiki/Digitale_%28informatica%29 Elettronica -------------- - Potenziometri, partitori di tensione, divisori di voltaggio - http://www.vitobarone.it/elettrotecnica/potenziometro.htm - https://it.wikipedia.org/wiki/Potenziometro - https://it.wikipedia.org/wiki/Partitore_di_tensione Arduino -------------- - Byte, int, long: http://www.ladyada.net/learn/arduino/lesson4.html - Input e output analogici: http://www.maffucci.it/2012/08/31/appunti-di-programmazione-su-arduino-ingressi-e-uscite-analogiche/ - analogRead(): - https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage - Uso di un potenziometro: http://www.html.it/pag/48719/arduino-leggere-i-movimenti-da-un-potenziometro/ - PWM, emulazione output analogico: - http://www.maffucci.it/2011/11/29/arduino-lezione-06-modulazione-di-larghezza-di-impulso-pwm/ - http://pietrolodi.altervista.org/arduino4/ - https://www.arduino.cc/en/Tutorial/PWM - https://learn.sparkfun.com/tutorials/sik-experiment-guide-for-arduino---v32/experiment-2-reading-a-potentiometer Sketch utilizzati: - http://lab.piffa.net/sketchbook_andrea/programming/operators/operator_1_basic/ - http://lab.piffa.net/sketchbook_andrea/basic/analog_input/analogInput_1/ - http://lab.piffa.net/sketchbook_andrea/basic/analog_input/analogInput_2_serial/ - http://lab.piffa.net/sketchbook_andrea/basic/pwm/pwm_4_analog_input/ Mercoledi' 12 Aprile ==================== PWM: ripasso sui concetti di base Input analogico e pwm: mappatura di un input analogico su un output analogico: - http://lab.piffa.net/sketchbook_andrea/basic/pwm/pwm_4_analog_input/pwm_4_analog_input.ino - http://lab.piffa.net/sketchbook_andrea/basic/analog_input/ Tutti 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. Giovedi' 13 Aprile ==================== Programmazione: Array ------------------------ Introduzione agli Array: forme di dati strutturate. Dichiarazione, dimensionamento, indicizzazione zero indexed, estrazione dei dati, gestione tramite cicli iterativi. * https://www.arduino.cc/en/Reference/Array Sketches utilizzati: - http://lab.piffa.net/sketchbook_andrea/programming/loops/loop_0_rider/ - http://lab.piffa.net/sketchbook_andrea/programming/loops/loop_1_array_loop/ - http://lab.piffa.net/sketchbook_andrea/programming/loops/loop_2_array_loop_serial/ Approfondimenti ~~~~~~~~~~~~~~~~~~~ Altri esercizi non visti in aula a dimostrazione di tipi di dati strutturati: - https://lab.piffa.net/sketchbook_andrea/programming/structured_data_types/ Reference avanzata: - Beginning C for Arduino: Learn C Programming for the Arduino: https://books.google.it/books?id=ATYwCgAAQBAJ&lpg=PA62&ots=MJ3nQ-40g-&dq=c%20symbol%20table%20lvalues%20rvalues&pg=PA59#v=onepage&q&f=false - C++ Primer Plus: Testo molto completo ed esaustivo sul C++ - http://www.cplusplus.com/doc/tutorial/arrays/ LED RGB ------------- Info e guide: - http://www.maffucci.it/2014/09/27/arduino-lezione-09-uso-di-led-rgb-parte-1/ - https://learn.adafruit.com/adafruit-arduino-lesson-3-rgb-leds/overview Eercizi: - I primi 4 esercizi della serie RGB: http://lab.piffa.net/sketchbook_andrea/RGB_LED/ Mercoledi' 19 Aprile ==================== Multitasking --------------- - Eseguire diversi task contemporaneamente: problemi dell'uso della funzione delay(): - http://lab.piffa.net/sketchbook_andrea/multitasking/blink_0/blink_0.ino - http://lab.piffa.net/sketchbook_andrea/multitasking/blink_0_soluzione/blink_0_soluzione.ino - Utilizzo della funzione ``millis()`` per coordinare diversi eventi: sketch - http://lab.piffa.net/sketchbook_andrea/multitasking/BlinkWithoutDelay_1/BlinkWithoutDelay_1.ino - http://lab.piffa.net/sketchbook_andrea/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino - http://lab.piffa.net/sketchbook_andrea/multitasking/BlinkWithoutDelay_2_led_cleanup/BlinkWithoutDelay_2_led_cleanup.ino 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: - http://lab.piffa.net/sketchbook_andrea/multitasking/millis/loop_array_millis/loop_array_millis.ino - http://lab.piffa.net/sketchbook_andrea/multitasking/millis/pwm_millis/pwm_millis.ino Se invece volete solo usare direttamente gli oggetti basati su millis potete usare la libreria common inclusa nello sketchbook_andrea. - http://lab.piffa.net/sketchbook_andrea/libraries/common/ - http://lab.piffa.net/sketchbook_andrea/libraries/common/examples/ Tutorial on-line ~~~~~~~~~~~~~~~~~~~~~~ * https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay * https://www.baldengineer.com/blink-without-delay-explained.html * https://learn.adafruit.com/multi-tasking-the-arduino-part-1/using-millis-for-timing * Italiano: http://www.provalotu.com/millis-scandiamo-il-tempo-del-nostro-arduino/ Informatica -------------- Introduzione alle dinamiche di funzonamento di uno scheduler, kernel e sistema operativo. Accenni a FreeRTOS per arduino: - Esempio visto (non approfondito!) https://lab.piffa.net/sketchbook_andrea/multitasking/blink_10_freeRTOS/ Dimostazione di una scheda TI MSP432 con il framework RTOS Energia per lesecuzione di thread separati in vari TAB: - http://energia.nu/guide/multitasking/ 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: * https://lab.piffa.net/sketchbook_andrea/basic/buttons/blink_5_pooling/ * https://lab.piffa.net/sketchbook_andrea/basic/buttons/blink_6_interrupt/ Tutorial: * https://www.arduino.cc/en/Reference/attachInterrupt * https://www.allaboutcircuits.com/technical-articles/using-interrupts-on-arduino/ Giovedi' 20 Aprile ==================== Elettronica: semiconduttori, diodi e transistor: * Wiki: http://wiki.piffa.net/index.php/Semiconduttori Diodi ~~~~~~~~~~~ * Funzionamento di una giuntura PN * Video: https://www.youtube.com/watch?v=JNi6WY7WKAI&index=2&list=PLuUdFsbOK_8o1BzPcXHwILC7UN0MmTo5- * Esercizio: https://lab.piffa.net/schemi/diodi_bb.png - https://lab.piffa.net/schemi/diodi_bb.png Transistor ------------- Video: https://www.youtube.com/watch?v=7ukDKVHnac4&list=PLuUdFsbOK_8o1BzPcXHwILC7UN0MmTo5-&index=1 Schemi esercizi: * https://lab.piffa.net/schemi/transistor_5v_150ma_bb.png * https://lab.piffa.net/schemi/transistor_5v_150ma_push_button_bb.png Il circuito e' pilotabile con qualsiasi sketch simile a Blink Per altre risorse vedi la pagina wiki: https://www.youtube.com/watch?v=7ukDKVHnac4&list=PLuUdFsbOK_8o1BzPcXHwILC7UN0MmTo5-&index=1 Motori DC ----------- * Illustrazione del funzionamento di un motore DC: https://www.youtube.com/watch?v=LAtPHANEfQo * Tutorial e risorse: https://www.youtube.com/watch?v=LAtPHANEfQo * Esercizi: https://www.youtube.com/watch?v=LAtPHANEfQo (fino all'esercizio n.4)