=================================== Arduino Base: Lezioni =================================== :Author: Andrea Manni :Copyright: GFDL :Version: 1.0 Traccia degli argomenti del corso base su Arduino Make++ tenuto da Febbraio 2016 al Lunedi' 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 Venerdi' 21 Ottobre: 10 lezione ======================================== Hardware ---------- Introduzione alla scheda MSP432 http://wiki.piffa.net/index.php/MSP432 , dimostrazione della gestione di led multipli in multitasking tramite un RTOS: http://energia.nu/guide/multitasking/ Piezo --------- Piezo: Layer di cercamica e layer metallico, eccitato vibra producendo onde quadre. Suono: onde sonore quadre, triangolari, tonde. Sketch: pitch follower, keyboard con pull up, INPUT_PULLUP --------------- - INPUT_PULLUP : http://www.arduino.cc/en/Tutorial/DigitalPins - https://learn.adafruit.com/adafruit-arduino-lesson-6-digital-inputs/arduino-code Meldie varie, sirene. Pitch follower, melodia con 3 tasti in pullup, melodia pre impostata con include di libreria. Sketches: - piezo/piezo_1_tonePitchFollower/ - piezo/piezo_2_keyboard/ - piezo/piezo_3_toneMelody/ - piezo/piezo_4_mario_tune/ Include ----------- Per includere un file nell'Arduino IDe si puo' utilizzare l'apposita volce nel menu' [SKETCH],oppure creare un nuovo TAB che dovrebbe essere immediatamente concatenato al file principale. - http://www.arduino.cc/en/Reference/Include - http://www.arduino.cc/en/Hacking/BuildProcess - http://provideyourown.com/2011/advanced-arduino-including-multiple-libraries/ Programmazione ----------------- Array e cicli iterativi, Riprendere lo sketch dei cicli for per introdurre gli 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/ - Introduzione agli array: http://arduino.cc/en/reference/array - Utilizzare un array in un ciclo for. 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/ Mercoledi' 19 Ottobre: nona lezione ======================================== Arduino ---------- Introduzione ad Arduino Mini Pro: http://wiki.piffa.net/index.php/Arduino_Mini_Pro , FTDI . Multitasking --------------- - Eseguire diversi task contemporaneamente: problemi dell'uso della funzione delay(): sketch: sketchbook_andrea/multitasking/blink_0 - Utilizzo della funzione ``millis()`` per coordinare diverse istruzioni: sketch - sketchbook_andrea/multitasking/BlinkWithoutDelay_1/ - sketchbook_andrea/multitasking/BlinkWithoutDelay_2_led/ - Isolare il codice di ogni task in una funzione: sketchbook_andrea/multitasking/BlinkWithoutDelay_2_led/ - Passare un argomento a una funzione: variabili locali e globali: sketchbook_andrea/multitasking/BlinkWithoutDelay_4_argomento/ - Programmazione orientata agli oggetti, sketch sketchbook_andrea/multitasking/BlinkWithoutDelay_6_class Refactoring -------------- Procedere per interventi minimali per ottimizzare il codice al fine di renderlo portabile / riutilizzabile in contesti diversi. Venerdi 14 Ottobre: ottava lezione ======================================== Programmazione ----------------- - Operatori logici Bolleani: http://lab.piffa.net/sketchbook_andrea/programming/operators/operator_3_logic/ Arduino ------------ Introduzione al concetto di state machine e cambio di stato: gestione di un LED tramite stato e cambio di stato di un bottone. - https://www.arduino.cc/en/Tutorial/StateChangeDetection Sketch utilizzati: - http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_state_3/ - http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_state_4_state/ - http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_state_4_state/ - http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_state_4_final/ Gli schemi per la breadboard sono sostanzialmente simili a quelli di un bottone in pull down e un LED: - http://lab.piffa.net/schemi/button_1_bb.png - http://lab.piffa.net/schemi/button_1_schem.png Elettronica: LED RGB --------------------- - LED RGB, catodo / anodo condiviso: https://learn.adafruit.com/adafruit-arduino-lesson-3-rgb-leds/overview - http://lab.piffa.net/sketchbook_andrea/RGB_LED/rgb_0/ - http://lab.piffa.net/sketchbook_andrea/RGB_LED/rgb_0_soluzione/ - http://lab.piffa.net/sketchbook_andrea/RGB_LED/rgb_1_all_color/ - http://lab.piffa.net/sketchbook_andrea/RGB_LED/rgb_4_array/ - http://lab.piffa.net/sketchbook_andrea/RGB_LED/rgb_5_struct/ - http://lab.piffa.net/sketchbook_andrea/RGB_LED/rgb_6_obj/ Mercoledi' 12 Ottobre: settima lezione ======================================== Arduino ----------- Calibratura sensori analogici: - 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/analog_input/photo_3_serial/ - Anteprima: http://lab.piffa.net/sketchbook_andrea/basic/analog_input/photo_5_calibration/ Funzioni ~~~~~~~~~ - constrain(): https://www.arduino.cc/en/Reference/Constrain - map(): https://www.arduino.cc/en/Reference/Map Elettronica ----------------- Introduzione delle fotoreseistenze: - http://wiki.piffa.net/index.php/Fotoresistenze - http://playground.arduino.cc/Learning/PhotoResistor - Teoria ~~~~~~~~ * Divisore di voltaggio * Resistivita' e conduttivita' ToDo: link a top, sketch usati Venerdi' 7 Ottobre: sesta lezione ======================================== 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_0_stati/ - http://lab.piffa.net/sketchbook_andrea/basic/pwm/pwm_4_analog_input/ Mercoledi' 5 Ottobre: quinta lezione ======================================== Programmazione ---------------- Programmi non deterministici, utilizzo di variabili esterne per modificare il flusso del programma: i cicli condizionali. Debugging via seriale. 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/ - debug via seriale - 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 - http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_2_serial_debug/button_2_serial_debug.ino 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 Operatori binari ~~~~~~~~~~~~~~~~~~ - http://lab.piffa.net/sketchbook_andrea/programming/operators/operator_1_basic/ - http://lab.piffa.net/sketchbook_andrea/programming/operators/operator_2_comparison/ - http://www.maffucci.it/2012/03/18/appunti-di-programmazione-su-arduino-aritmetica/ Arduino: serial debug --------------------- - http://www.ladyada.net/learn/arduino/lesson4.html - 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 Elettronica ---------------- Bottoni Momentanei, SPST * https://learn.sparkfun.com/tutorials/switch-basics/poles-and-throws-open-and-closed Venerdi' 30 Settembre: quarta lezione ======================================== Elettronica -------------- Legge di Ohm, calcolare resistenze per LED in un circuito. Approfondimenti sulla necessita' di usare una resistenza con i LED: http://www.thebox.myzen.co.uk/Tutorial/LEDs.html - http://playground.arduino.cc/Italiano/Led - http://wiki.piffa.net/index.php/LED Arduino ----------- 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/ Programmazione ---------------- Introduzione ai cicli condizionali. - http://www.maffucci.it/2012/04/10/appunti-di-programmazione-su-arduino-controllo-di-flusso/ Non sono state ancora fatte le resistenze in PULL DOWN. Mercoledi' 28 Settembre: terza lezione ======================================== 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/ * Primi accenni all'utilizzo dei tab in Arduino IDE * 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 Elettronica -------------- 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 Realizzazione del primo circuito elettrico su breadboard alimentato da Arduino: - http://lab.piffa.net/schemi/circuito_led_bb.png - http://lab.piffa.net/schemi/led_single_bb.png - http://lab.piffa.net/schemi/led_single_schem.png Venerdi' 23 Settembre: seconda lezione ====================================== Linux Desktop -------------- - Introduzione all'Ambiente desktop KDE: https://www.kde.org/workspaces/plasmadesktop/ - [ALT][F3] : impostazioni avanzate delle finestre: rimozione bordi, schermo intero, shortcut per finestre e applicazioni. - Spostare e ridimensionare le finestre con [ALT] + mouse - Desktop virtuali: [CTR][F2] , [CTR][F1]. Abilitare nel caso i desktop virtuali da "Virtual Desktops". CLI ---- I primi comandi: sintassi * STDout, STDin, STDerr * ls, cd, pwd, whoami, sudo, git Arduino ---------- 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 - 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/ * http://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() Kit Arduino --------------- 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 Mercoledi' 21 Settembre: prima lezione ====================================== Linux e Arduino ---------------------------------------- Vedi slides: http://lab.piffa.net/slides/arduino_linux.pdf - Interaction design a physical computing: Arduino come piattaforma semplificata - Free software e Open Hardware: ambienti aperti, condivisione, redistribuzione, concorrenza. - Presentazione delle schede, framework, ambiente Arduino - 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). 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). 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 I testi consigliati per il corso li trovate su: http://lab.piffa.net/testi.html