Introduzione ad Arduino
Transcript
Introduzione ad Arduino
Introduzione a Arduino Gianpaolo Gonnelli [email protected] Arduino 1 Contenu7 l l l l l l l Cosa è? Da cosa è composto? Alcuni componen7 u7li Programmare Arduino Esperimen7 Comunicare col PC 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 l Seriale USB per la programmazione e l'alimentazione 5v 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 Alcuni Componen7 u7li l l l l l l l l Breadboard Resistenze Led Potenziometri Fotoresistenze Servo motori Panoramica sensori (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 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 Arduino Calcolo della resistenza: R = (V-Vled)/I 220ohm (standard) 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 Tipo sensore Posizione angolare Potenziometro, encoder.. Accelerazione Accelerometro,giroscopio.. Forza e pressione Estensimetri, estensimetri a fibra oica Luce fotoresistenze, diodi.. Temperatura Termoresistenze.. Distanza Laser, ultrasuoni.. Localizzazzione 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() La funzione loop() 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. Chiamata subito dopo la setup questa funzione, cicla costantemente eseguendo ad ogni ciclo le istruzioni presenti nel suo blocco. int buttonPin = 3; void loop() { if (digitalRead(buttonPin) == HIGH) Serial.write('H'); else Serial.write('L'); void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { // ... } } Arduino delay(1000); 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 l l Esperimento1 Esperimento2 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