Arduino smart light switch
Gimnazija Matije Antuna Reljkovića VinkovciArduino koristi lasere da bi detektirao pokret tj. detektira kad se prekine laserska linija.Postavljena su dva lasera jedan s unutarnja strane okvira vrata i jedan s vanjske.Kada osoba ulazi u sobu prvo “zapne” za vanjski pa za unutarnji laser, a kad izlazi obrnuto.Tako možemo znati koliko je točno osoba u sobi.Automatska svjetla najčešće rade na detekciji pokreta što i nije toliko dobro jer ako se osoba ne miče u sobi ona svejedno želi upaljena svjetla, ali s ovim našim sustavom takvih problema nema jer će svjetla ostati upaljena sve dok je ta osoba ili više njih u sobi.Osoba može i sama slobodno paliti i gasiti svjetla pomoću mobitela
Video snimka
Izrada projekta
Arduino MKR 1000,relej(jedan na breadboardu, a drugi je u kutiji of prekidača da bi se visoki izmjenični izolirao of ostale elektronike),zvučnik,otpornici u seriji s foto otpornicima (pojedinačno za svaki laser) stvaraju promjenjivi napon između otpornika i foto otpornika , napon ovisi o tome da li laser pogađa ili ne pogađa foto otpornik jer tada mu se mijenja otpor tj, smanjuje se s većom prisutnošću svjetla.
UPT kabel of internet se koristi da prenosi struju do stolne lampe i da pomoću kabla Arduina prima stanje foto otpornika.
Kabel koji ide prema stolnoj lampi ima napon of 12V i prekida se s relejom koji se nalazi pokraj Arduina.
Mobilna aplikacija
LCD(V2) se koristi za prikazivanje stanja vrata(otvorena/zatvorena),prikaz vrijednosti(V1) se koristi za prikazivanje broja ljudi tek kad je na nuli svjetla će se ugasiti,tipka sleep mode(V3) služi za gašenje svjetla kada idemo spavati ili jednostavno želimo ugasiti svjetla,level stropno svjetlo(V0) prikazuje stanje stropnog svjetla(upaljeno/ugašeno,1/0),level stolno svjetlo (V5) prikazuje stanje stolnog svjetla(upaljeno/ugašeno,1/0),timer(V4) služi kao budilica start vrijeme postavimo kada se želimo probuditi(tada zvučnik pušta nepodnošljiv zvuk, svjetla se upale), a stop vrijeme postavljamo u vrijeme kada počinje mrak ako nije mrak Arduino neće paliti svjetla da bi štedio električnu energiju.
Shema projekta
Jedina posebnost jest da su foto otpornik i obični(stalne vrijednosti) otpornik spojeni u seriju na vcc (napon 3,3V), a između njih žica ide na analogni ulaz Arduina za svaki senzor.
Shemu ovoga projekta možete preuzeti ovdje.
Arduino program
#define BLYNK_PRINT /* #define BLYNK_PRINT Serial #include #include #include int sensorIn = A1; //unutarnji senzor int sensorOut = A2; //vanjski senzor int magnetSensor = A3;//senzor magneta int sensorchair= A4; //senzor za stolicu int laserIn = 1; //unutarnji laser int laserOut = 2; //vanjski laser int relay = 3; //glavno svjetlo int speaker = 4; //zvucnik int relay2 = 5; //stolna lampa int sensorInValue = 470; //granica unutarnjeg senzora int sensorOutValue = 460; //granica vanjskog senzora int sensorChairValue = 800; //granica stolnog senzora int magnetSensorValue = 630; //granica senzora magneta int people = 0; //broj ljudi int freq=4450; //frekvencija zvucnka tj. alarma bool doorClosed = false; //varijabla za stanje vrata bool sleepMode = false; //varijabla za stanje spavanja/uključivanja bool night=true; //postavi varijablu da je noc char auth[]="1ca80e766562403faf36fc4d2edc59cf"; //osobni podaci char ssid[]="Maric"; char pass[]="ivaslatkaje1"; WidgetLCD lcd(V2); //virtualni pin za lcd BLYNK_WRITE(V3) //blynk-sleep mode tipka { int state=param.asInt(); //blynk podatke spremu u integer varijablu state if(state==1) //ako je tipka uključena { digitalWrite(relay,LOW); //ugašeno glavno(stropno)svjetlo digitalWrite(relay2,LOW); digitalWrite(laserIn,LOW); //ugasiti unutarnji laser digitalWrite(laserOut,LOW); //ugasiti vanjski laser Blynk.virtualWrite(V0,0); //pokaži korisniku stanje ugašenosti sleepMode=true; //sleep mode uključen } else { if(people>0) //ako ima ljudi u sobi { digitalWrite(relay,HIGH); //upaliti svjetlo if(analogRead(sensorchair)>sensorChairValue & sleepMode==false) //ako je netko za racunalom { digitalWrite(relay2,HIGH); //upali stolnu lampu Blynk.virtualWrite(V5,1); //prikazuje da je stolno svjetlo upaljeno na blynku } Blynk.virtualWrite(V0,1); //pokaži korisniku stanje upaljenosti (upaljeno) } digitalWrite(laserIn,HIGH); //upali unutarnji laser digitalWrite(laserOut,HIGH); //upali vanjski laser sleepMode=false; //ugasiti sleep mode } } BLYNK_WRITE(V4) //budilica na Blynku { int state=param.asInt(); //blynk podatke spremu u integer varijablu state if(state==1) { digitalWrite(relay,HIGH); //upali stropno svjetlo sleepMode=false; //sleep mode ugasiti Blynk.virtualWrite(V3,0); //prikazati na Blynku da je sleep mode ugasen Blynk.virtualWrite(V0,1); //prikazati da je upaljeno svjetlo na blynku tone(speaker,freq,10000); //ispustati zvuk preko zvucnika 10 sec night=false; //nije više noć } else { night=true; //noć je } } void setup() { Serial.begin(9600); //zapocinje komunikacija sa serial monitorom na racunalu Blynk.begin(auth, ssid, pass); //zapocinje vezu sa Blynk serverom nas projekt sada je online pinMode(magnetSensor,INPUT); //hall effect senzor koji se nalazi na okviru vrata a na vratima se nalazi magnet te tako mozemo provjeriti jesu li vrata otvorena pinMode(sensorIn,INPUT); //otpornik osjetljiv na svjetlo je povezan u seriju s obicnim otpornikom, a ovaj pin je spoji izmedu ta dva otpornika te dobijamo promjenjivi napon ovisno o jacini svjetlosti pinMode(sensorOut,INPUT); //otpornik osjetljiv na svjetlo je povezan u seriju s obicnim otpornikom, a ovaj pin je spoji izmedu ta dva otpornika te dobijamo promjenjivi napon ovisno o jacini svjetlosti pinMode(relay,OUTPUT); //relej koji pali svjetlo pinMode(laserIn,OUTPUT); //laser koji svjetli na unutarnji otpornik osjetljiv na svjetlo pinMode(laserOut,OUTPUT); //laser koji svjetli na unutarnji otpornik osjetljiv na svjetlo digitalWrite(laserIn,HIGH); //upali unutarnji laser digitalWrite(laserOut,HIGH); //upali vanjski laser Blynk.run(); //pokreniti Blynk.virtualWrite(V1,0); //broj ljudi ispisuje na 0 lcd.clear(); //čisti lcd } void loop() { Blynk.run(); //pokretanje Blynk if(doorClosed==false & sleepMode==false & night==true) { if(analogRead(laserOut)<sensorOutValue) //ako netko prolazi kroz laser vanjski { for(int i=0;i<200;i++) { if(analogRead(laserIn)<sensorInValue) //ako prolazi kroz unutarnji laser { digitalWrite(relay,HIGH); //pali stropno svjetlo people++; //povecava broj ljudi Blynk.virtualWrite(V0,1); //prikazuje stanje svjetla na blynku Blynk.virtualWrite(V1,people); //prikazuje broj ljudi na blynku break; } delay(10); } delay(1000); } if(analogRead(laserIn)<sensorInValue)//ako netko izlazi iz sobe(prolazi kroz unutarnji senzor) { for(int i=0;i<200;i++) { if(analogRead(laserOut)<sensorOutValue) //ako netko izađe iz sobe(prođe kroz vanjski senzor) { people--; //smanjuje broj ljudi if(people<=0) //ako ima 0 ljudi ili dođe do buga i ima manje od 0 ljudi { digitalWrite(relay,LOW); //gasi stropno svjetlo digitalWrite(relay2,LOW); //gasi stolnu lampu Blynk.virtualWrite(V0,0); //prikazuje da je stropno svjetlo ugašeno na blynku Blynk.virtualWrite(V5,0); //prikazuje da je stolno svjetlo ugašeno na blynku people=0; //broj ljudi:0 } Blynk.virtualWrite(V1,people); //prikazuje broj ljudi na blynku break; } delay(10); } delay(1000); } } if(analogRead(sensorchair)>sensorChairValue & sleepMode==false & night==true) //ako netko želi sjesti i izvuče stolicu, a noc je { digitalWrite(relay2,HIGH); //pali stolno svjetlo Blynk.virtualWrite(V5,1); //prikazuje da je stolno svjetlo ugašeno na blynku Serial.println("Upaljeno"); } else { digitalWrite(relay2,LOW); //stolno svjetlo je ugašeno Blynk.virtualWrite(V5,0); //prikazuje da je stolno svjetlo upaljeno na blynku } if(analogRead(magnetSensor)>magnetSensorValue) //ako vrata dođu blizu magneta i vrata se zatvore { digitalWrite(laserIn,LOW); //gasi unutarnji senzor digitalWrite(laserOut,LOW); //gasi vanjski senzor lcd.print(0,0,"Vrata->zatvorena"); //ispisuje na blynk lcd da su vrata zatvorena doorClosed=true; //vrata zatvorena:istina } else { if(sleepMode==false) //ako je sleep mode iskljucen { digitalWrite(laserIn,HIGH); //upaliti unutarnji laser digitalWrite(laserOut,HIGH); //upaliti vanjski laser } doorClosed=false; //varijabla za zatvorena vrata lcd.print(0,0,"Vrata->otvorena "); //ispisuje na blynku da su vrata otvorena } }
Arduino program ovoga projekta možete preuzeti ovdje.
Autori
Projekt su izradili Fran Marić i Vittorio Vičević uz mentorstvo Daniela Rakijašića iz Gimnazije Matije Antuna Reljkovića Vinkovci.
Projekt je prijavljen na temu: Internet of Things: Pametna rasvjeta.