=================================== Lezioni del Giovedi' =================================== :Author: Andrea Manni :Copyright: GFDL :Version: 0.1 Traccia degli argomenti del corso base su Arduino Make++ tenuto al Giovedi' (gli studenti del Lunedi' guardino l'altro documento!) nel Laboratorio NetGarage 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 sono disponibili su: http://lab.piffa.net/testi.html .. sectnum:: .. contents:: Indice degli argomenti .. |date| date:: Generato il |date| con: http://docutils.sourceforge.net/rst.html Giovedi' 7/5 ============================= Attiny85 ----------- - MCU attiny: http://wiki.piffa.net/index.php/Attiny85 - Arduino come programmatore: http://www.logicaprogrammabile.it/programmare-attiny85-attiny45/ - Comparativa tra Le schede Arduino Nano - Mini e Attiny: http://avrprogrammers.com/articles/attiny13-vs-attiny85 - http://www.arduino.cc/en/Products.Compare - Installare librerie sul PC: /usr/share/arduino - Caricare e testare uno sketch su Attiny85 Giovedi' 30/4 ============================= 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/ Funzioni ------------- - Argomenti : sketch sketchbook_andrea/programming/functions/argomenti_2 - Variabili globali e locali: sketchbook_andrea/programming/functions/scope_1 Giovedi' 23/4 ============================= 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, - http://wiki.piffa.net/index.php/Piezo - Audio, tradurre frequenze in notazione musicale - Trascrivere brani musicali, note, intervalli, accordi - Generare allarmi e jingle come feed-bak per gli operatori 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/ Giovedi' 18/4 ============================= Photoresistenza --------------------------- - Resistenza in serie - Calibrazione con map() - Constrain() per impostare un range - Calibrazione automatica Input analogico: sensore di luminosita'. Lettura valori, calibrazione manuale, calibrazione automatica, map(), constrain(), smoothing. Sketch basic/analog_input[3,4,5,6]. trasformazione input -> output analogico di un piezo: poibilita' di percepire soglie e range non percepibili con i sensi umani. Smothing (semplificato), claibrazione automatica. Sketches: basic/analog_input/photo_[3,4,5,6]. Giovedi' 9/4 ============================= - Tipi di dati (data types): byte - int - long , link su: Introduction to types (part 1) - http://www.ladyada.net/learn/arduino/lesson4.html PWM ----- PWN con bytes per introdurre i cicli iterativi: loop(), while() e cicli for. Sketches utilizzati: - http://lab.piffa.net/sketchbook_andrea/basic/pwm/ Approfondimenti su PWM: - http://arduino.cc/en/Tutorial/PWM - http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM Cicli For ---------- Cicli for e operatore ternario, utilizzare un for loop per dichiarare i PIN: - http://arduino.cc/en/Reference/for - http://arduino.cc/en/Tutorial/ForLoop Sketches utilizzati: - http://lab.piffa.net/sketchbook_andrea/programming/loops/loop_3_multi_led/ - http://lab.piffa.net/sketchbook_andrea/programming/loops/loop_4_multi_led_array/ - Introduzione agli array: http://arduino.cc/en/reference/array - Utilizzare un array in un ciclo for. Giovedi' 2/4 ============================= Operatori logici boleani ------------------------------------------------------------ - http://lab.piffa.net/sketchbook_andrea/programming/operators/operator_3_logic/operator_3_logic.ino State Machine --------------- Primo approccio alle State Machine tramite la realizzazione di un circuito che rileva la pressione di un bottone momentaneo per modificare lo stato di un LED. Sketch di esempio: - http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_state_3/button_state_3.ino - http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_state_4_state/button_state_4_state.ino - http://lab.piffa.net/sketchbook_andrea/basic/buttons/button_state_4_state_and_condition/button_state_4_state_and_condition.ino 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 PWM -------------------- - http://arduino.cc/en/Tutorial/PWM - http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM PWM, fatto con intervalli di un millisecondo, cenno a delayMicroseconds(), introdurre i PWM automatici: base con un byte per luminosita': cicli iterativi. PWM gestito da Arduino con AnalogWrite(): http://arduino.cc/en/Tutorial/PWM Dimostrazione con analizzatore logico di un circuito con PWM - Esercizio: http://lab.piffa.net/sketchbook_andrea/basic/pwm/pwm_0_manuale/ Anteprima dello sketch: http://lab.piffa.net/sketchbook_andrea/basic/pwm/pwm_1_while_byte/ da rivedere dopo aver fatto gli operatori ( http://lab.piffa.net/sketchbook_andrea/programming/operators/ ) e i tipi di dati (byte in particolare). Per chi fosse curioso la dimostrazione fatta dalla mia postazione con l'analizzatore logico per "vedere" il PWM e' basata su questo sketch: http://lab.piffa.net/sketchbook_andrea/advanced_projects/led_PWM_logical_analyzer_demo/ Giovedi' 26/3 ============================= Operatori binari per operazioni e comparativi: ------------------------------------------------------------ - http://lab.piffa.net/sketchbook_andrea/programming/operators/operator_1_basic/ - http://lab.piffa.net/sketchbook_andrea/programming/operators/operator_2_comparison/ Input digitale: la funzione digital.read() ----------------------------------------------- - i cicli condizionali: IF ELSE http://www.maffucci.it/2012/04/10/appunti-di-programmazione-su-arduino-controllo-di-flusso/ - il debug via seriale - gli interruttori ( micro switch momentanei 2PST) con PULL DOWN 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/button_1_bb.png - http://lab.piffa.net/schemi/button_1_schem.png 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 Non abbiamo fatto le state machine, la prossima volta faremo input analogico e poi output analogico. Giovedi' 19/3 ============================= 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. - LED:, diodo polarizzato, forward voltage e forward current. - http://www.ladyada.net/learn/arduino/lesson3.html Concetti generali di elettronica: http://ishtar.df.unibo.it/em/elet/cover.html Legge di Ohm, calcolare resistenze per LED i 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/uploa ... adbord.pdf Esercizio con Arduino: collegare un secondo LED tramite breadboard: - http://lab.piffa.net/sketchbook_andrea/ ... _5_2_leds/ - Schema: http://lab.piffa.net/schemi/led_single_bb.png - Tutorial simile: http://www.ladyada.net/learn/arduino/lesson3.html Vi ricordo che se non avete a disposizione una scheda Arduino e i componenti elettronici necessari potete provare ad usare il simulatore on-line: viewtopic.php?f=3&t=7 Seriali ----------------- Utilizzare la seriale per debug: funzioni print, println e flush . Bound Rate: BPS, velocita' di trasferimento dati. Sketch di esempio utilizzato: http://lab.piffa.net/sketchbook_andrea/ ... _world.ino Giovedi' 12/3 ============================= Ripasso (per chi vuole) su informatica di base e sistemi operativi: - http://doc.andreamanni.com/informatica_base.html - http://doc.andreamanni.com/sistemi.html Arduino IDE ------------------ - 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). - http://arduino.cc/en/Guide/Environment - Accenni al build process / tool chain: http://arduino.cc/en/Hacking/BuildProcess Programmazione ------------------ - Esercizio Blink, 4 parti: commenti - dichiarazione variabili - funzione setup - funzione loop. - istruzioni e sequenze di istruzioni. - Singola Istruzione termina con puntoe 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() Se volete rivedere i listati dello sketch Blink visti in aula: - http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_1_variabili/blink_1_variabili.ino - http://lab.piffa.net/sketchbook_andrea/basic/blinks/blink_2_funzioni/blink_2_funzioni.ino Altri link: ------------ - Installazione su Windows: http://arduino.cc/en/Guide/Windows - Introduzione all'ambiente di sviluppo: http://arduino.cc/en/Guide/Environment Il primo esercizio base, Blink, e' ampiamente trattato su una moltitudine di siti internet e manuali, vi lascio in proposito un paio di links: - http://www.maffucci.it/2010/11/17/arduino-lezione-02-facciamo-lampeggiare-un-led/ - http://arduino.cc/en/Tutorial/Blink - https://learn.adafruit.com/adafruit-arduino-lesson-1-blink/overview 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. - LED: catodo / anodo, diodo Giovedi' 5/3 ============================= HardWare ----------------- - Arduino, Breadboard e componenti. ATmega32 MCU, IC montato DIP / DLP (dual in line package) e non SMD (surface mounted), sostituibile. 20 / 22 pin utilizzabili: 14 digital in/outi (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 (13 con resistenza). Architettura di un elaboratore ------------------------------ Architettura PC: Multipourpose - 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: BUS di dati, interazione con perifieriche (USB), multitasking. - Software: sistema operativo. RPi e' un sistema linux, ARduino Yun utilizza un OS Unix che fa da ponte tra MCU e PC. - Comparativa tra vari arduino: http://arduino.cc/en/Products.Compare 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).