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.







