Progetto Parcheggio intelligente
Dispositivi utilizzati 2 schede Arduino UNO 4 sensori infrarossi 1 LCD seriale 2 servomotori 1 fotoresistenza Scheda GPRS
Sensore infrarosso Il sensore infrarosso è di tipo digitale È dotato di tre pin: vcc, GND, OUT L’alimentazione è di 5 V Il livello logico è basso se ci sono ostacoli, altrimenti è alto Il principio di funzionamento è quello della riflessione: dal dispositivo viene inviato un segnale infrarosso; in presenza di ostacolo c’è la riflessione che manda il segnale su un fototransistor portando il livello logico LOW
Sensore infrarosso Due sensori vengono posti all’ingresso del parcheggio e due sensori vengono posti all’uscita Il primo sensore ad infrarossi all’ingresso, fa aprire la sbarra e fa comparire il messaggio di benvenuto sul display LCD e il numero di posti disponibili; il secondo serve ad assicurare che l’auto è passata, fa chiudere la sbarra ed incrementa il numero di ingressi All’uscita ci sono comunque due sensori infrarossi; il primo capta l’auto e fa aprire la sbarra, il secondo assicura che l’auto è passata, incrementa l’uscita e fa chiudere la sbarra
Programma base per il sensore ad infrarossi int dist=4; int led=5; void setup(){ pinMode(4, INPUT); pinMode(5,OUTPUT); digitalWrite(5,LOW);} void loop(){ int lett=digitalRead(dist); if(dist==LOW)digitalWrite(led, HIGH); if(dist==HIGH) digitalWrite(led,LOW);}
Display LDC seriale IL display LCD 16x4 seriale, utilizza la comunicazione I2c È dotato di 4 pin: Vcc 5V GND SCL va sul pin analogico A5 SDA va sul pin analogico A4 L’indirizzo standard è 0x27
Programma base del display LCD seriale #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 4); void setup() { lcd.begin(); lcd.backlight(); lcd.print("Hello, world!"); } void loop() lcd.setCursor(1,1); for(int i=0;i<10;i++){ lcd.print(i); lcd.clear();}
LCD
Servo motore Particolare tipo di motore, generalmente di piccola potenza Il vantaggio dei servomotori è che possono ruotare di angoli ben precisi Sono quindi utilizzati in robotica e nei controlli automatici Sono munti di tre pin: Marrone GND Arancione VCC a 5 V Giallo pin digitale della scheda Arduino
Servo motore
Programma base per il servomotore #include <Servo.h> Servo myservo void setup() { pinMode(4,INPUT); myservo.attach(9); } void loop() { Int lett=digitalRead(9); If(lett==HIGH) myservo.write(-60); If(lett==LOW) myservo.write(-90); delay(15);
Fotoresistenza Sensore analogico che cambia il proprio valore in base alla luminosità
Fotoresistenza programma base int fotores = 1; int value; void setup() { Serial.begin(9600); } void loop() { value = analogRead(fotores); Serial.println(value); delay(1000);
I2C Inter Integrated Circuit: sistema di comunicazione seriale che prevede un master e 256 slave Su arduino uno i pin A5 e A4 sono dedicati, oltre ai segnali analogici, anche alla comunicazione I2C Sul pin A5 va SCL e su A4 va SDA
I2C programma base per master //scl su A5 sda su A4 #include<Wire.h> int x ; void setup() { Wire.begin(); } void loop() { Wire.beginTransmission(7); // trasmette al device 7 for(x=0;x<10;x++) {Wire.write(x); Wire.endTransmission(); delay(500);}
I2C programma base per slave //scl su A5 sda su A4 #include <Wire.h> int x ; void setup() {Serial.begin(9600); Wire.begin(7); //lo slave prende indirizzo 7 Wire.onReceive(receiveEvent); } void receiveEvent(int bytes) { x = Wire.read(); Serial.println(x); void loop() { void receiveEvent();
Scheda GPRS
Programma I2C + GPRS #include<Wire.h> int x; #include "SIM900.h" #include <SoftwareSerial.h> #include "sms.h" SMSGSM sms; int led = 13; int numdata; boolean started=false; char smsbuffer[160]; char Mittente[20]; void setup() {Serial.begin(9600); Wire.begin(9); Wire.onReceive(receiveEvent); // put your setup code here, to run once: if ( gsm.begin(2400) ) { Serial.println("STATUS Modulo GSM = PRONTO"); started=true; } else Serial.println("STATUS Modulo GSM = INATTIVO"); }; boolean SerialRead(char s[]) int i=0; if (Serial.available() > 0) while (Serial.available() > 0) s[i]=Serial.read(); delay(10); i++; s[i]='\0'; // Metto il terminatore di stringa return (i!=0); void receiveEvent(int bytes) { x = Wire.read(); Serial.println(x);} void loop() { void receiveEvent(); char inSerial[50]; char position; if (started) { position = sms.IsSMSPresent(SMS_ALL); // Valore da 1..20 if (position) // Leggo il messaggio SMS e stabilisco chi sia il mittente sms.GetSMS(position, Mittente, smsbuffer, 160); Serial.print("Comando Ricevuto [tel. "+String(Mittente)+String("]: ") + String(smsbuffer)); if (strcmp(smsbuffer,"LIBERO?")==0) if (x>1) sms.SendSMS(Mittente, "Il parcheggio è libero e sei il benvenuto"); // restituisce true se invia l'SMS Serial.println(" => il LED e' Acceso"); } else if(x<1) sms.SendSMS(Mittente, "Ci dispiace ci sono pochi posti...prova se sei nelle vicinanze"); // restituisce true se invia l'SMS Serial.println(" => il LED e' Spento"); else Serial.println(" => non riconosciuto!"); sms.DeleteSMS(position); // Elimina l'SMS appena analizzato delay(3000);