=================================== 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 Addendum: Giovedi' 7 Aprile ==================================== 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. Lunedi' 4 Aprile: ultima lezione ==================================== Comunicazione Giovedi' 7 si terra una ulteriore lezione di recupero su gli argomenti pasquali e il 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/ Percorsi relativi e assoluti ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L'IDE di arduino dovrebbe permettere l'include di un file nello stesso PATH del file attuale ( ``./``) . Dovrebbe in oltre cercare automaticamente nei percorsi: - ``/home/nome_utente/sketchbook/libraries/`` - ``/usr/share/arduino/libraries/`` - http://www.chim.unifi.it/~signo/did/unix/lez-split/node44.htm Giovedi' 31 Marzo ================= 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/ 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/ Giovedi' 24 Marzo ================= Lunedi' 28 non si terra' lezione in occasione delle festivita' pasquali, il laboratorio sara' comunque aperto dalle 20:30 alle 23:00 per il corso di aeromodellismo per chi volesse venire a esercitarsi con Arduino. Programmazione ----------------- - Operatori ligici 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 Lunedi' 21 Marzo ================= Calendario: Giovedi' 24 Marzo si terra' normalmente lezione, Lunedi' 28 non si terra' lezione in occasione delle festivita' pasquali. Arduino ---------------- Ripasso e esercizio su byte, PWM, input analogico, si vedano le risorse suggerite per la lezione precedente. Oggi sono stati fatti i seguenti sketch come esercizio su applicazione di cicli iterativi (while e for loop) a PWM e lettura di input analogico: - http://lab.piffa.net/sketchbook_andrea/basic/pwm/pwm_1_while_byte/ - http://lab.piffa.net/sketchbook_andrea/basic/pwm/pwm_1_while_byte/ - http://lab.piffa.net/sketchbook_andrea/basic/pwm/pwm_4_analog_input/ Per la calibratura di sensori analogici che verra' rivista nella prossima lezione: - 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 Programmazione --------------- Sono stati introdotti gli operatori comparativi binari: - http://lab.piffa.net/sketchbook_andrea/programming/operators/operator_2_comparison/ - http://digilander.libero.it/uzappi/C/C-operatori.html Elettronica ----------------- Introduzione delle fotoreseistenze: - http://wiki.piffa.net/index.php/Fotoresistenze - http://playground.arduino.cc/Learning/PhotoResistor Esercizi da fare a casa ------------------------ Si suggerisce di esercitarsi a creare degli sketch che in base all'input di un sensore analogico (photoresistenza o un potenziometro) cambino i parametri di un LED (luminosita', tipo di luccichio) utilizzando gli operatori comparativi e i cicli iterativi. Es: 1. fade up and fade down 2. fade con potenziometro che cambia velocita 3. fade con potenziometro che imposta valore massimo / minimo. 4. Utilizzo di constrain() 5. Serial Debug per tutti i valori Giovedi' 17 Marzo ================= 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/ Lunedi' 14 Marzo ================= Programmazione --------------- - 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 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, SPDT * https://learn.sparkfun.com/tutorials/switch-basics/poles-and-throws-open-and-closed * Giovedi' 10 Marzo =================== Elettronica -------------- Circuito elettrico: sempre tre elementi (fonte di energia, carico, circuito), flusso di elettroni, carico, circuito aperto e chiuso, corto circuito. - elettricità' : 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/ Lunedi' 7 Marzo: terza lezione ====================================== In questa lezione abbiamo ripreso parte degli argomenti visti nelle due lezioni precedenti approfondendo le funzioni (argomenti, primi cenni allo scope) e introducendo i cicli iterativi in fondamenti di programmazione. Linux ------- Ripasso su l'uso dei comandi da console CLI, sono stati accennati: * pagine man dei comandi, es: man ls * Uso di un **pager** per le pagine man: per uscire da man si usa il tasto [q] * http://linuxcommand.org/reading_man_pages.php * sintassi di un comando: comando --flag [oggetti_opzionali] * comando **history** per vedere l'elenco dei comandi utilizzati recentemente. * primi accenni a redirezione dell'output di un comando ( > ) e pipe ( | ). * ls -l: ownship dei file * aggiornamento di un archivio \*.git: sudo git pull Si ricorda che l'uso della riga comando non e' argomento *essenziale* del corso di Arduino quindi se questi argomenti risultano particolarmente alieni a chi e' abituato a lavorare esclusivamente su ambiente Windows: niente panico, non dovete utilizzare pipe e pagers per programmare Arduino! Nota: il docente Andrea puo' eseguire comandi e quindi aggiornare gli esercizi git su *tutti i computer del laboratorio contemporaneamente*: se avete dei problemi ad aggiornare il vostro PC in aula segnalatelo e Andrea fara' un giro di aggiornamento. Gli esercizi di Arduino sono comunque visionabili anche a casa via web all'indirizzo: http://lab.piffa.net/sketchbook_andrea/ . 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 Giovedi' 3 Marzo: 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/ 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 Lunedi' 29 Febbraio: prima lezione ====================================== 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). 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 Rimandi a ripasso su informatica di base ---------------------------------------------------------------- - Informatica di base: http://doc.andreamanni.com/informatica_base.html - Sistemi operativi: http://doc.andreamanni.com/sistemi.html I testi consigliati per il corso li trovate su: http://lab.piffa.net/testi.html