ARDUINO Sistema di sviluppo open source che permette di programmare vari microcontrollori montati su una scheda sperimentale collegata al pc mediante cavo usb. La scheda arduino uno monta il microcontrollore ATmega328 della Atmel.
SCHEDA SPERIMENTALE ARDUINO UNO
Software sviluppo Setup Eseguito una volta all accensione Loop Eseguito infinite volte
Programma lampeggio led // Esempio 01: far lampeggiare un led #define LED 13 // LED collegato al pin digitale 13 void setup() { pinmode(led, OUTPUT); // imposta il pin digitale come output void loop() { digitalwrite(led, HIGH); // accende il LED delay(1000); // aspetta un secondo digitalwrite(led, LOW); // spegne il LED delay(1000); // aspetta un secondo
Circuito
Led controllato da pulsante (resistenza pull down)
#define LED 13 // LED collegato al pin digitale 13 #define BUTTON 7 // pin di input dove è collegato il pulsante int val = 0; // si userà val per conservare lo stato del pin di input void setup() { pinmode(led, OUTPUT); pinmode(button, INPUT); // imposta il pin digitale come output // imposta il pin digitale come input void loop() { val = digitalread(button); // legge il valore dell'input e lo conserva // controlla che l'input sia HIGH (pulsante premuto) if (val == HIGH) { digitalwrite(led, HIGH); //accende il led else { digitalwrite(led, LOW); //spegne il led
#define LED 13 // LED collegato al pin digitale 13 #define BUTTON 7 int val = 0; // pin di input dove è collegato il pulsante // si userà val per conservare lo stato del pin di input boolean stato = LOW; // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso void setup() { pinmode(led, OUTPUT); // imposta il pin digitale come output pinmode(button, INPUT); // imposta il pin digitale come input void loop() { val = digitalread(button); // legge il valore dell'input e lo conserva // controlla che l'input sia HIGH (pulsante premuto) // e cambia lo stato del led if (val == HIGH) { stato =!stato; //inverte stato digitalwrite(led, stato); // cambia stato al led delay(1000);
void setup() { Serial.begin(9600); void loop() {... Monitor seriale Serial.println(variabile);//visualizza la variabile da monitorare delay(1000);//1 secondo per avere il tempo di leggere... Consente di inviare visulizzare sul pc una stringa inviata da arduino.
esempio Serial.print("val="); Serial.println(val); Serial.print("stato="); Serial.println(stato); delay(1000);
Analog in Ingressi analogici: legge un valore di tensione applicato all ingresso, restituendo un valore compreso tra 0 e 1023 (ADC a 10 bit). Il comando per leggere il valore è value = analogread(pin); Dove value è una variabile di tipo int, pin è il numero dell ingresso (0-5).
Lettura tensione #define PIN 0 int value = 0; void setup() { Serial.begin(9600); void loop() { value = analogread(pin); Serial.println(value); delay(1000); Sul monitor seriale viene visualizzato il valore 678 che corrisponde a 3,3V. Se collego A0 a 5V viene visualizzato il valore massimo 1023. Se collego a GND viene visualizzato 0.
Caratteristiche del convertitore La risoluzione del convertitore analogico/digitale vale circa Q=5/1024=0,00488V Per trovare la tensione misurata uso la seguente formula Vi=Q value Es:Vi=0,00488 678=3,3V #define PIN 0 int value = 0; void setup() { Serial.begin(9600); void loop() { float tensione=0; value = analogread(pin); tensione=value*0.00488; Serial.println(tensione); delay(1000);
Tmp36 Sensore temperatura Ta=25 Vo=750mV Risoluzione 10mV/ C Qt=4,88mV/10mV=0,48 C Ta=0 C Vo=750mV-25*10mV=500mV value(0 )=500mV/Q=500/4,88=102 value(25 )=750mV/Q=750/4,88=154 (Qt=25/(154-102)=25/52=0,48 ) temperatura=(value-102)*0,48
Programma lettura temperatura #define PIN 0 int value = 0; int temperatura = 0; void setup() { Serial.begin(9600); void loop() { value = analogread(pin); temperatura=(value-102)*0.48; Serial.println(value); Serial.println(temperatura); delay(1000); Q=Vfs/1024=5V/1024=4,88mV Value=0 tensione=q*value=4,88*0=0mv Value=1 tensione=4,88*1=4,88mv Value=661 tensione=4,88*661=3,23v
Display 7 segmenti con decoder A,B,C,D: arduino Vdd, LT, BL: 5V Vss, LE: GND(0V) a,b,..,g:display
b c d e a g f 5V gnd D C B A 0 0 0 0
b b c d e a g f
int pinl[4] = {5,4,3,2; // D,C,B,A pin l int pinh[4] = {9,8,7,6; // D,C,B,A pin h byte BCD[16][4] ={ {0,0,0,0, {0,0,0,1, {0,0,1,0, {0,0,1,1, {0,1,0,0, {0,1,0,1, {0,1,1,0, {0,1,1,1, {1,0,0,0, {1,0,0,1, {1,0,1,0, {1,0,1,1, {1,1,0,0, {1,1,0,1, {1,1,1,0, {1,1,1,1 ; //BCD code void setup() { for(int c = 0; c < 4; c++){ pinmode(pinl[c], OUTPUT); pinmode(pinh[c], OUTPUT); void loop() { // put your main code here, to run repeatedly: int i=36; print7seg(i);//visualizza i sul display delay(1000); void print7seg(int number){ byte numberh; byte numberl; numberh=(byte)(number/10); numberl=(byte)(number)- (numberh*10); for(int c = 0; c < 4; c++){ digitalwrite(pinl[c], BCD[numberl][c]); for(int c = 0; c < 4; c++){ digitalwrite(pinh[c], BCD[numberh][c]);