Introduzione a Arduino Gianpaolo Gonnelli gianpaolo.gonnelli@gmail.com Arduino 1
Contenu7 l Cosa è? l Da cosa è composto? l Alcuni componen7 u7li l Programmare Arduino l Esperimen7 l Comunicare col PC l Schede ARM Arduino 2
Cosa è? Arduino è una scheda elebronica che ci permebe di programmare in maniera semplice un microcontrollore ProgeBo Italiano: Massimo Banzi ex- docente all Interac7on Design Ins7tute di Ivrea Arduino è il nome di un pub Arduino 3
Applicazioni Arduino 4
Modelli di Arduino Arduino 5
Arduino Shields Arduino 6
A cosa serve Arduino può essere visto come una centralina di controllo U7lizzato per la creazione di sistemi embedded (una volta caricato il codice, occorre solo l alimentazione) Arduino 7
Da cosa è composto Il cuore di Arduino: il Microcontrollore Il risuonatore ceramico La porta seriale e l alimentazione Componen7 elebronici Arduino 8
Microcontrollore Atmel Atmega328 Computer on chip Programmazione a basso livello Bootloader Arduino 9
Porte e alimentazione l Seriale USB per la programmazione e l'alimentazione 5v l Ingresso alimentatore Arduino 10
Caratteristiche di Arduino Microcontroller ATmega328 Opera7ng Voltage 5V Input Voltage (recommended) 7-12V Input Voltage (limits) 6-20V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40 ma DC Current for 3.3V PinFlash 50 ma Memory 32 KB (ATmega328) of which 0.5 KB bootloader SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Clock Speed 16 MHz Arduino 11
Digital vs Analog vs Digital PWM Digital Due livelli 0-1 (basso alto) Analog Misura la tensione Digital PWM Simula l analogica Arduino 12
PWM di Arduino Pulse Width Modulation ed è una tecnica per simulare la variazione di tensione Tensione a step discreti tra 0 e i 5V Il rapporto fra i livelli viene variato all interno del singolo ciclo(duty cicle) per simulare una variazione di tensione Per inviare un segnale pwm, analogwrite invia la il rapporto tra basso e alto rimappato su valori interi da 0 a 255. La funzione writemicroseconds per specificare per quanto tempo il segnale rimarrà alto Arduino 13
l Breadboard l Resistenze l Led Alcuni Componen7 u7li l Potenziometri l Fotoresistenze l Servo motori l Panoramica sensori l (I soli7: condensatori, diodi, transistor etc..) Arduino 14
La breadboard: proto7pazione circui7 Standard Schema di collegamenti Arduino 15
Resistenze: come leggerle Normalmente le resistenze sono caratterizzate da 4 strisce colorate: per conoscere l ordinamento delle strisce si guarda dove si trova quella che dista di più dalle altre (che nell ordinamento sarà l ultima) Significato dato dall ordine: 1a e 2a: valore numerico 3a: moltiplicatore (normalmente in ohm) 4a: tolleranza (percentuale) NOTA: Esistono anche resistenze a 6 strisce dette di precisione il loro significato è lo stesso di quelle presentate solo che anche la 3 è un valore numerico la 4 il moltiplicatore la 5 la tolleranza e la 6 la variazione di tolleranza a seconda della temperatura Arduino 16
Resistenze: come leggerle Significato del colore Prima e seconda striscia Terza striscia Quarta striscia Valore = <rosso><nero>*<rosso>=20*100=2 Kohm Tolleranza = <oro>= 5% Arduino 17
Light Emiing Diode: LED Sfruttano la proprietà di alcuni semiconduttori di emettere fotoni (solitamente giunzioni p/n) grazie all effetto noto come emissione spontanea I più comuni hanno due terminali: anodo e catodo. Solitamente l anodo è più lungo del catodo oppure il catodo presenta una piegatura Per il collegamento: Anodo al polo positivo Catodo al polo negativo Resistenza in serie all alimentazione(limita la corrente in ingresso al led) Calcolo della resistenza: R = (V-Vled)/I Vled è la caduta di tensione nel led stesso che è proporzionale alla frequenza emessa Arduino 18
Light Emiing Diode: LED Valori nominali LED rossi = 1,6 V LED giallo = 2,2V LED verde = 2,4 V LED bianco = 3,0 V ( warm o sunny ) LED bianco ( cold ) o blu = 3,5 V Calcolo della resistenza: R = (V-Vled)/I Valori standard I valori di corrente sono intorno ai 10/15mA Esempio (LED rosso) R=(V- Vled)/I=(5-1,6)/0,016=218.77 ohm 220ohm (standard) Arduino 19
Potenziometri Il potenziometro è equivalente ad un partitore di tensione variable Il potenziometro è un dispositivo con un contatto strisciante sulla reistenza interna Permette la variazione della tensione letta in uscita (attuato manualmente) Applicazioni: Joystick, robot, interruttori etc.. E caratterizzato da tre terminali ed una manopola, i terminali più esterni vanno connessi all alimentazione (+ e - intercambili) mentre da quello centrale è possibile leggere la tensione che varia ruotando la manopola. Arduino 20
Fotoresistenze Componente elettronico la cui resistenza è inversamente proporzionale alla quantità di luce lo colpisce un potenziometro attuato con la luce Applicazione principale: Interruttore crepuscolare Arduino 21
Servo comandi Attuatori con controllo di posizione integrato Da cosa sono composti Motore DC Potenziometro Riduttore di giri Elettronica di controllo Come funzionano Comandati in tensione (ingresso segnale analogico o PWM) a seconda del valore in ingresso si posizionano ad un angolo preciso angolo. L elettronica interna è necessaria per fermare il motore quando ha raggiunto l angolo (controllo lineare) E presente una mappatura tra valori di tensione ed angoli che dipende dalle specifiche del servocomando Arduino 22
Panoramica sensori Cosa misurare Posizione angolare Accelerazione Forza e pressione Luce Temperatura Distanza Localizzazzione Tipo sensore Potenziometro, encoder.. Accelerometro,giroscopio.. Estensimetri, estensimetri a fibra oica fotoresistenze, diodi.. Termoresistenze.. Laser, ultrasuoni.. GPS.. Arduino 23
Arduino Solware l Ambiente di sviluppo l Funzioni principali l Librerie u7li Arduino 24
Ambiente di sviluppo Sviluppato in java Codice c-like Validazione del codice Compilazione Upload su scheda Monitor Seriale Guida installazione: - http://arduino.cc/en/guide/homepage Arduino 25
Funzioni principali La funzione setup() Chiamata all inizio del nostro programma (sketch), serve per inizializzare le variabili, i vari pin e per iniziare ad usare le librerie. Questa funzione viene eseguita solo una volta. La funzione loop() Chiamata subito dopo la setup questa funzione, cicla costantemente eseguendo ad ogni ciclo le istruzioni presenti nel suo blocco. int buttonpin = 3; void setup() { Serial.begin(9600); pinmode(buttonpin, INPUT); } void loop() { //... } void loop() { if (digitalread(buttonpin) == HIGH) Serial.write('H'); else Serial.write('L'); delay(1000); } Arduino 26
Alcune funzioni e librerie utili Librerie Serial Usata per la comunicazione seriale di arduino mette a disposizione delle funzioni molto utili come: read(),write(),available() etc.. Servo Usata per la gestione di servo comandi. Funzioni pinmode(<numero pin>,<modo>) permetta la configurazione dei pin tra input e output DigitalWrite(<alto o basso>) permette di settare il pin tra HIGH e LOW (0V 5V) DigitalRead() legge il valore del pin (HIGH o LOW) AnalogRead() legge il valore di tensione in ingresso su di un pin analogico. AnalogWrite() scrive il valore di tensione desiderato su un pin pwm. Map() mappa un range numerico su un altro. Poi esempio pratico Arduino 27 Riferimenti: http://arduino.cc/en/reference/homepage
Con le mani in pasta l Esperimento1 l Esperimento2 l Esperimento3 Arduino 28
Esperimento 1 Accendiamo un LED Codice: Collegamenti int ledpin = 10; void setup() { pinmode(ledpin, OUTPUT); } void loop() { } digitalwrite(ledpin, HIGH); delay(1000); digitalwrite(ledpin, LOW); delay(1000); Arduino 29
Esperimento2 Utilizziamo un sensore Come collegare la fotoresistenza. Partitore di tensione. Tensione nominale fotoresistenza 10kOhm V out = (R2*I)/(R2+R1) Arduino 30
Lo schema di colllegamento Arduino 31
Codice int fotorvalue = 0; int fotorpin = 0; int ledpin = 10; void setup(){ pinmode(ledpin, OUTPUT); Serial.begin(9600); Serial.println("Setted up"); } void loop(){ fotorvalue=analogread(fotorpin); } if(fotorvalue >600){ int val = map(fotorvalue,600,1023,0,255); Serial.println(val); analogwrite(10,val); }else{ analogwrite(10,0); } Arduino 32
Esperimento 3 Robot Planare 2R (più o meno) Schema di collegamento Arduino 33
Codice Esperimento 3 Robot Planare 2R (più o meno) #include <Servo.h> char buffer[10]; int stat = 1300; int count=0; int pot1=0; int pot2=1; Servo servo2; Servo servo; void setup() { servo.attach(3); servo2.attach(5); Serial.begin(9600); Serial.flush(); servo.writemicroseconds(50); servo2.writemicroseconds(50); } void loop() { int angle1 = analogread(pot1); int angle2 = analogread(pot2); angle1=map(angle1, 0, 1023, 1000, 2500); angle2=map(angle2, 0, 1023, 1000, 2500); Serial.print(angle1); Serial.print(" - "); Serial.print(angle2); Serial.println(); servo.writemicroseconds(angle1); servo2.writemicroseconds(angle2); } Viene utilizzata la libreria Servo ed il suo metodo writemicroseconds Arduino 34
Trasmissione PC - Arduino Arduino 35
Esperimento 4 La testa robo7ca l Face tracking Arduino 36
Schede con microprocessore (ARM) Raspberry pi Arduino 37
Altre Schede ACME systems Aria Fox Arduino 38
Altre schede Nvidia Arduino 39