ARDUINO Course http://ieeessb.unisalento.it RICHIAMI http://ieeessb.unisalento.it Arduino UNO Reset 14 PIN di input/output digitali Porta USB Microcontrollore ATmega328 Connettore alimentazione 9V 6 PIN di input analogici Power PIN http://ieeessb.unisalento.it Breadboard LED Simbolo grafico Come distinguere l’anodo dal catodo Resistenza Collegamento I = 20mA Vo = 1,5V Vs = 5V Rs= (Vs-Vo)/I= =175Ω180 Ω Resistenze e Codice dei Colori Serial Monitor E’ uno strumento che permette di visualizzare i dati provenienti dalla board Arduino e i dati che verranno comunicati per via seriale alla board. In particolare per comunicare con la nostra board attraverso la porta seriale si può scrivere del testo (che si può visualizzare sul Serial Monitor ) e poi premere invio. Per utilizzare Il Serial monitor è necessario inizializzarlo nel void setup ( ) con la funzione Serial.begin(baud rate), indicando il baud rate con il quale comunicare con il nostro Arduino. http://ieeessb.unisalento.it Struttura di uno Sketch Void setup() Inizializzare i pin da utilizzare con la funzione • pinMode(# pin, funzione); //funzione= {INPUT, OUTPUT} Inizializzare la comunicazione Seriale con la funzione • Serial.begin(baudrate); //baudrate= {4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200} http://ieeessb.unisalento.it Struttura di uno Sketch Void loop() Funzioni da far eseguire ad ARDUINO • digitalWrite(# pin, valore); //valore= {HIGH (oppure 1) , LOW (oppure 0)} • digitalRead(# pin); • delay(tempo di attesa); //tempo di attesa espresso in ms • Serial.println(valore); //valore può essere una stringa o un valore che vogliamo //visualizzare sul monitor //per stampare una stinga è necessario scriverla tra virgolette //esempio: Serial.println(«Stringa da visualizzare») http://ieeessb.unisalento.it Struttura di uno Sketch Void loop() Controlli da far eseguire ad ARDUINO • if(condizione da verificare){ istruzioni da eseguire; //digitalWrite() , digitalRead(), ecc. }; /*Controlla che una condizione si sia verificata La condizione si esprime con la seguente sintassi: variabile < valore variabile > valore variabile == valore variabile <= valore variabile>=valore */ http://ieeessb.unisalento.it Esempio: Accendere un LED da tastiera http://ieeessb.unisalento.it Codice http://ieeessb.unisalento.it Circuito SENSORI http://ieeessb.unisalento.it Definizione Il sensore è un trasduttore (dispositivo che mette in relazione due grandezze fisiche appartenenti a sistemi energetici differenti) che si trova in diretta interazione con il sistema misurato. Ed è, in ambito strettamente metrologico, riferito solamente al componente che fisicamente effettua la trasformazione della grandezza d'ingresso in un segnale di altra natura. Schema a blocchi di un sistema di misura Grandezza fisica da misurare INGRESSO Sensore Grandezza elettrica Circuito di elaborazione Grandezza elettrica da acquisire USCITA Proprietà e parametri dei Sensori • Accuratezza: indica quanto la misura si avvicina al valore vero da misurare. Una causa di mancanza di accuratezza è dovuta agli errori sistematici. Una soluzione può essere la calibrazione periodica del sensore. • Precisione: capacità di fornire il stesso valore in uscita con identiche situazioni in ingresso (in istanti temporali differenti). La precisione dipende da errori casuali, dovuti a variabili incontrollate. Proprietà e parametri dei Sensori Esempio di misure con diverse accuratezze e precisioni Proprietà e parametri dei Sensori Caratteristiche dinamiche descrivono il comportamento del sensore durante il periodo transitorio. Questo è dovuto al fatto che la risposta di un sensore non è istantanea. Proprietà e parametri dei Sensori • Tempo di risposta: tempo necessario affinché l’uscita del sensore si porti al 95% del valore finale, a fronte di un ingresso a gradino. • Costante di tempo (τ): misura la velocità di risposta del sensore, o meglio il tempo che impiega l’uscita a raggiungere il 63% del valore finale. • Tempo di salita: è il tempo che occorre al sensore per portare l’uscita dal 10% al 90% del valore finale. Potenziometro http://ieeessb.unisalento.it Composizione Potenziometro a giro singolo Schema elettrico Vi Vi Acquisizione e Visualizzazione su Serial Monitor di un segnale analogico Codice Circuito Accendere un LED se il segnale analogico in ingresso supera una determinata soglia Codice Circuito Accensione graduale di un LED Problema Per accendere un led in maniera graduale o per pilotare un motore con differenti velocità abbiamo bisogno di fornire al nostro carico una tensione analogica, ossia che assuma dei valori compresi 0V e 5V . Il nostro Arduino però, a parte il blocco di acquisizione di segnali analogici, lavora nel dominio digitale e i pin di output sono anch’essi digitali. Soluzione Il nostro Arduino emula un’uscita analogica da alcuni dei suoi pin di uscita digitali avvalendosi della modulazione PWM (Pulse Width Modulation) a 8 bit. PWM Il PWM prevede la generazione di un segnale ad onda quadra, cioè un segnale che assume comunque solo due valori di tensione 0V e 5V (quindi siamo ancora nel dominio digitale), e la modulazione del duty cycle. PWM Il duty cycle è definito come il rapporto tra il tempo durante il quale il segnale assume un livello alto (5V), che chiamiamo Ta, e l’intero periodo. Quindi questa modulazione va ad agire sul tempo Ta, e quindi sulla larghezza dell’impulso. Se si fa la media del segnale su tutto il periodo otteniamo un valore di tensione analogico, cioè compreso tra 0V e 5V. PWM on Arduino Il nostro Arduino ha i pin 3, 5, 6, 9, 10, 11, di input/output digitale contrassegnati dalla sigla PWM. In particolare fornisce in uscita un segnale PWM a 490Hz, (tranne che per i pin 5 e 6 dove il segnale PWM di uscita ha una frequenza di 980Hz). Il fatto che l’implementazione del PWM utilizzata sia ad 8 bit significa che possiamo assegnare 2^8=256 valori differenti di duty cycle, e che quindi siamo in grado di fornire in uscita una tensione analogica che può assumere 256 valori (quindi con una risoluzione di 5V/256=20mV) analogWrite(#pin, duty cycle) Andiamo ad agire sui pin di uscita che supportano il PWM attraverso la funzione analogWrite(#pin, duty cycle), che accetta come argomento il numero del pin sul quale agire e il duty cycle, espresso con un valore compreso tra 0 e 255, che andrà a determinare il valore di tensione analogica. Esempi di applicazione del PWM map(value, fromLow, fromHigh, toLow, toHigh) Noi vorremmo andare a comandare la nostra uscita «analogica» in base ai valori letti dal potenziometro (o da qualsiasi altro sensore). Problema: I valori letti dal sensore vanno da 0 a 1023, invece i valori che l’argomento della funzione analogWrite() accetta come duty cycle vanno da 0 a 255 Soluzione: si utilizza la funzione map(), che va a mappare un valore appartenente ad un range (da 0 a 1023) in un altro range (da 0 a 255) Codice Circuito BAR LED Accensione di 3 LED in base al livello del segnale in ingresso http://ieeessb.unisalento.it Codice Circuito Sensore di Temperatura LM35 http://ieeessb.unisalento.it Caratteristiche tecniche • • • • • Calibrato in °Celsius Lineare con scale-factor +10mV/°C Accuratezza assicurata a 25°C di 0,5°C Pensato per misure nel range da -55°C a 155°C Tensione operativa da 4V a 30V Collegamento alla circuiteria Pedinatura Lettura Temperatura da Serial Monitor Vs = 5V Scale-factor = +10mV/°C Vout = (Vs*A0)/1023 Temperatura= Vout/10mV Codice Circuito Accensione di un led quando la Temperatura è superiore a 28°C Codice Miglioramento della risoluzione Obiettivo: diminuzione del range di valori sui quali effetuare la conversione A/D • analogReference(type); //type= {DEFAULT(5V), INTERNAL(1.1V), EXTERNAL(AREF)} Codice DHT 11 Sensore di Temperatura e Umidità digitale http://ieeessb.unisalento.it Composizione • Sensore di umidità di tipo resistivo • Sensore di tipo NTC • Memoria di tipo OTP (One Time Programmable) • Componenti per la gestione della comunicazione con il micro-controllore Specifiche tecniche Schema elettrico di una tipica applicazione Si utilizza una resistenza di pull-up da 5KΩ , per garantire che gli ingressi logici dei due sistemi siano a livelli previsti anche se uno dei due sia scollegato o nello stato di alta impedenza Processo di comunicazione: Serial interface Single-Wire Two-Way Data Format: • • • • • 8 bit Parte intera della misura dell’Umidità Relativa (RH) 8 bit Parte decimale della misura dell’RH 8 bit Parte intera della misura della Temperatura (T) 8 bit Parte decimale della misura di T 8 bit Checksum Processo di comunicazione 1. La MCU (Micro-Controller Unit) invia un segnale di start al DHT11 2. Il DHT11 passa dalla fase di stand-by alla fase operativa e attende che l’MCU termini con l’invio del segnale di start 3. Il DHT11 invia il segnale dati di 40 bit all’MCU 4. Il DHT passa alla fase di stand-by Lettura dei valori di Temperatura e Umidità e visualizzazione su Serial Monitor Aggiungere la libreria DHT.h Una libreria è un set di funzioni che facilità l’interfacciamento dei sensori ad Arduino. Le librerie sono solitamente distribuite in dei file .zip. Per l’installazione non decompattare i file .zip. Dall’Arduino Development Environment seguire il seguente percorso: Sketch->Importa Libreria->Add Library… Scegliere successivamente il file .zip contenente la libreria di interesse. Proseguire con: Sketch->Importa Libreria->DHT Chiudere l’IDE e riavviarlo. Aggiungere la libreria DHT.h 1° Step 2° Step Codice Codice Codice Circuito Lettura dei valori di Temperatura e Umidità Accensione di un LED rosso e di un LED verde rispettivamente se la temperatura è inferiore o superiore ad una soglia http://ieeessb.unisalento.it Codice Codice Codice Circuito HC-SR04 Sensore di distanza ad ultrasuoni http://ieeessb.unisalento.it Principio di funzionamento Questo sensore genera un’onda meccanica ad ultrasuoni che andando ad incidere sul bersaglio di cui si vuole misurare la distanza viene riflessa e ritorna al sensore dopo un determinato periodo di tempo denominato tempo di volo. Nota la velocità di propagazione del suono nell’aria (340m/s) e noto il tempo di volo, la distanza del target si calcola dalla seguente relazione: Distanza=Velocità*Tempo di volo Parametri Elettrici Rangeability: 2cm-400cm Accuracy: 3mm Caratteristiche fisiche E’ costituito da 4 pin: • Pin1: VCC (+5V) • Pin2: Trigger (pin di input) • Pin3: Echo (pin di output) • Pin4: GND Misura della distanza di un oggetto e visualizzazione su Serial Monitor Procedura di misura La misura con questo sensore avviene seguendo i seguenti step: 1. Attivazione del sensore: inviamo attraverso il nostro Arduino un impulso della durata di 10 μs all’ingresso Trigger del sensore; 2. Fase di misura 1: Il sensore invia un 8 impulsi alla frequenza di 40kHz; 3. Fase di misura 2: il sensore quando ha finito di inviare treno di impulsi ad ultrasuoni, invia attraverso il pin di output Echo un impulso di larghezza pari alla durata del tempo di volo; 4. Calcolo della distanza. Diagramma temporale Codice Circuito