GPS rasvjeta
Prva riječka hrvatska gimnazijaIzrada projekta
Mobilna aplikacija
GPS (zeleno) neprekidno očitava GPS koordinate, MainSwitch (plavo) upravlja radom cijelog programa (“On”/”Off”) i SetLocation (crveno) postavlja početnu lokaciju (koordinate) prema kojima se program onda ravna.
GPS stream widget koji neprekidno u intervalima od 5 sekundi očitava GPS koordinate. (Spojen na virtualni pin 0 (V0)).
Button widget kojim se jednokratno može zadati početnu lokaciju prema kojoj se program onda ravna. (Spojen na virtualni pin 2 (V2)) Mora biti “On” najmanje 5 sekundi!
Shema projekta
Napon od 5V iz digitalnog pina 3 (D3) preko otpornika 330Ω u žutu LED diodu i uzemljeno.
Shemu ovoga projekta možete preuzeti ovdje.
Arduino program
#define BLYNK_PRINT /* /************************************************************* Download latest Blynk library here: https://github.com/blynkkk/blynk-library/releases/latest Blynk is a platform with iOS and Android apps to control Arduino, Raspberry Pi and the likes over the Internet. You can easily build graphic interfaces for all your projects by simply dragging and dropping widgets. Downloads, docs, tutorials: http://www.blynk.cc Sketch generator: http://examples.blynk.cc Blynk community: http://community.blynk.cc Follow us: http://www.fb.com/blynkapp Tweets by blynk_app Blynk library is licensed under MIT license This example code is in public domain. ************************************************************* You’ll need: - Blynk App (download from AppStore or Google Play) - Arduino MKR1000 board - Decide how to connect to Blynk (USB, Ethernet, Wi-Fi, Bluetooth, ...) There is a bunch of great example sketches included to show you how to get started. Think of them as LEGO bricks and combine them as you wish. For example, take the Ethernet Shield sketch and combine it with the Servo example, or choose a USB sketch and add a code from SendData example. *************************************************************/ //---------------------------------------------------------------------------------------------------------------------------------------- // Program služi pametnoj rasvjeti na način da prepoznaje GPS koordinate mobilnog uređaja i uspoređuje ih sa zadanim koordinatama (prostorije ili slično) te pali ili gasi rasvjetu po potrebi #define BLYNK_PRINT SerialUSB #include #include #include int f; // Varijabla kojom upravljamo općim radom programa int g; // Varijabla kojom upravljamo određivanjem prvobitne (osnovne) lokacije int a = 0; // Varijabla kojom usklađujemo rad dijelova programa koji prikupljaju informacije i izvršavaju zadatke String Lat1 = ""; // Varijabla string za geografsku širinu + određeni radius String Lon1 = ""; // Varijabla string za geografsku dužinu + određeni radius String Lat2 = ""; // Varijabla string za geografsku širinu - određeni radius String Lon2 = ""; // Varijabla string za geografsku dužinu - određeni radius // Sve String varijablepostavljene su u početuoj fazi na "" (prazno) String TestLat = ""; // Varijabla koja prati trenutnu geografsku širinu String TestLon = ""; // Varijabla koja prati trenutnu geografsku dužinu //------------------------------------------------------------------------------------------------------------------------------------------ // Go to the Project Settings (nut icon). char auth[] = "****"; // Token koji se dobiva pokretanjem projekta u Blynku // Your WiFi credentials. // Set password to "" for open networks. char ssid[] = "****"; // Naziv korištene mreže char pass[] = "****"; // Lozinka korištene mreže void setup() { SerialUSB.begin(9600); pinMode(3, OUTPUT); // LED dioda spojena na pin 3 Serial.begin(9600); // Pokretanje serijske komunikacije Blynk.begin(auth, ssid, pass); // Komunikacija arduina s Blynkom } BLYNK_WRITE(V1) { // Očitavanje varijable 'f' sa widgeta Button (MainSwitch) f = param.asInt(); // Funkcija za očitavanje vrijednosti virtualnog pina (V1) } BLYNK_WRITE(V2) { // Očitavanje varijable 'g' sa widgeta Button (SetLocation) g = param.asInt(); // Funkcija za očitavanje vrijednosti virtualnog pina (V2) } BLYNK_WRITE(V0) { // Početak petlje kojom se provjeravaju GPS koordinate, tj. pali i gasi LED dioda GpsParam gps(param); // Pozivanje GPS koordinata if (a == 0){ // Uvijet za rad djela programa koji određuje osnovnu lokaciju prema kojoj radi ostatak programa, tj. uvijet koji onemogućuje da se zadana (osnovna) lokacija mijenja nakon što je jednom određena (dok se ponovno ne pokrene Arduino) if (g == 1) { // Uvijet za očitavanje zadane (osnovgne) lokacije preko varijable 'g', služi određivanju zadane (osnovne) lokacije samo kada korisnik to želi Lat1 = String ((gps.getLat()-0.0001000),7); // Varijabla za radijus zadane (osnovne) geografske širine; bitno je naglasiti da su u primjeru radijus (0.0001000) zadan i može se mijenjati isključivo u programu (manualno),(+/-0.0001000 je otprilike 10 metara) Lon1 = String ((gps.getLon()-0.0001000),7); Lat2 = String ((gps.getLat()+0.0001000),7); // Varijabla za radijus zadane (osnovne) geografske dužine; bitno je naglasiti da su u primjeru radijus (0.0001000) zadan i može se mijenjati isključivo u programu (manualno),(+/-0.0001000 je otprilike 10 metara) Lon2 = String ((gps.getLon()+0.0001000),7); // +/- vrijednosti su radijusi koji određuju GPS koordinate koje određuju rad programa a++; // Povećavanje varijable 'a' sa 0 na 1 što onemogućuje ponovno pokretanje ovog dijela programa, tj. ponovno postavljanje zadane (osnovne) GPS lokacije (dok se ponovno ne pokrene Arduino) } } if (f == 1){ // Uvijet koji preko varijable 'f' upravlja radom programa TestLat = String (gps.getLat(),7); // Funkcija koja sprema trenutnu geografsku širinu u String za daljnje uspoređivanje TestLon = String (gps.getLon(),7); // Funkcija koja sprema trenutnu geografsku dužinu u String za daljnje uspoređivanje if (a == 1){ // Uvijet koji onemogućuje daljnji rad programa (paljenje svjetla) prije nego što je odrađen 1. dio programa (koji je postavio varijablu 'a' sa 0 na 1 if (((((TestLat) < (Lat2)) && ((TestLat)) > (Lat1))) && ((((TestLon)) < (Lon2)) && ((TestLon)) > (Lon1))){ // Glavni uvijet koji uspoređuje zadane i trenutne koordinate uz odstupanja zbog preciznosti lokalizacije uređaja digitalWrite(3,HIGH); // Naredba koja pali LED diodu, ako je uvijet ispunjen } else{ digitalWrite(3,LOW); // Naredba koja gasi LED diodu, ako uvijet nije ispunjen } } } else{ digitalWrite(3,LOW); // Naredba koja gasi LED diodu ako program nije pokrenut } } void loop() { Blynk.run(); // Naredba za pokretanje Blynk aplikacije }
Arduino program ovoga projekta možete preuzeti ovdje.
Autori
Projekt su izradili Joel Aničić i Antonio Mohorić uz mentorstvo Tamare Široke iz Prve riječke hrvatske gimnazije.
Projekt je prijavljen na temu: Internet of Things: Pametna rasvjeta.