robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će...
TRANSCRIPT
robot koji pomaže ljudima
u borbi protiv zaraznih bolesti
Učenik: Mihael Orak
Mentor: Roman Rubčić
OŠ Iver, Sesvetski Kraljevec
Opis projekta PROZABO je robot koji pomaže ljudima na razne načine u borbi protiv zaraznih bolesti.
Mogućnosti robota:
daljinsko upravljanje robotom preko WiFi mreže
programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta ili mobitela)
robot šalje obavijesti preko WiFi mreže o na upravljački uređaj (tablet ili mobitel) o na e‐mail
posluživanje ljudima u sobama, za stolovima,... : Na primjer: o u restoranima i kafićima može ljudima
do stolova donositi hranu i piće o robot u bolnicama i staračkim domovima
u svaku sobu do kreveta odnese hranu, lijek i druge potrepštine ‐ pomoć medicinskom osoblju dijeljenje lijekova je pogotovo korisno
kod privremenih bolnica u sportskim dvoranama i sl., gdje imamo velik broj zaraženih ljudi na jednom mjestu
sterilizacija prostorija UV svjetlom (bolnice, restorani, frizerski saloni,...)
o robot sterilizira po zadanom putu i zadanom vremenu zadržavanja na određenim mjestima u prostoriji (na primjer duži period sterilizacije UV svjetlom na mjestima gdje je to više potrebno)
nakon što odradi zadani posao, robot se sam vrača na određenu lokaciju, te šalje poruku upravljačkom uređaju (tabletu ili mobitelu) da je obavio posao
kontrola ljudi prilikom ulaska u neku javnu ustanovu (trgovački centar, ljekarne, bolnice, škole, trgovine, frizerski saloni, tržnice, pošte, banke, ...)
o robot glasovno pozove osobu, na ruku joj da sredstvo za dezinfekciju, glasovno joj daje upute kako se treba ponašati u prostoru u koji ulazi (držanje distancu od 2 metra, zaštitna maska na ustima i nosu i dr.)
o ako osoba ne uzme dezinfekcijsko sredstvo, robot na e‐mail šalje obavijest zaštitaru o robot se može nadograditi beskontaktnim infracrvenim modulom za mjerenje
temperature, te upozoravati na povišenu temperaturu ljudi
Prednosti robota:
ne može se zaraziti (u odnosu na ljude)
lako se dezinficira nakon kontakta s ljudima (samo se prebriše dezinfekcijskim sredstvom)
ne treba zaštitno odijelo, zaštitne vizire i zaštitne rukavice kao ljudi o nema svakodnevnog stvaranja kontaminiranog otpada o smanjen financijski trošak na zaštitnu opremu
Potrebni dijelovi
Arduino MKR‐1000 1 kom
Ultrazvučni senzor 1 kom
28BYJ‐48 koračajni motori i ULN2003 upravljači za koračajne motore 2 kom
Led diode: crvena i zelena po 1 kom
Servo motori SG90 2 kom
DFPlayer mini (MP3 player) 1 kom
Zvučnik 1 kom
Kotačić koji se slobodno okreće (kao prednji kotač robota) 1 kom
SD kartica 1 kom
Otpornik 1 ohm 1 kom
Otpornik 1k ohm 1 kom
Otpornici 10k ohm 2 kom
Foto otpornici 2 kom
Vijak i matrica M3 8 kom
Gumene spojnice za odvodne cijevi fi 75mm (kao gume na kotačima robota) 2 kom
Baterija 5V (power bank) 1 kom
Utičnica za micro usb za napajanje tiskane pločice 1 kom
Prototipna tiskana pločica 1 kom
Led traka s mogućnošću adresiranja dioda (NeoPixel LED Strip) 5 traka po 4 diode
o samo za prezentacijske svrhe ‐ zamjena za UV svjetlo koje je štetno
Fritzing shema
3D printani dijelovi
Blynk aplikacija
PROGRAM // koračajni motor - Lijevi #define S1P1 A0 #define S1P2 A1 #define S1P3 A2 #define S1P4 A3 // koračajni motor - Desni #define S2P1 2 #define S2P2 3 #define S2P3 4 #define S2P4 5 #define LED_STRIP_PIN 8 #define SERVO_DEZ 0 #define SERVO_LIJEK 1 #define ULTRA_ZVUCNI_TRIG 6 #define ULTRA_ZVUCNI_ECHO 7 #define FOTO_OTPORNIK_DEZ A6 #define FOTO_OTPORNIK_LIJEK A5 #define DIODA_DEZ 11 #define DIODA_LIJEK 12 #define DEZ_ZATVOREN 3 #define DEZ_OTVOREN 25 #define LIJEK_ZATVOREN 130 #define LIJEK_OTVOREN 30 #define KORACI 32 #define POSTOTAK_SVIJETLA 0.5 // potrebna promjena osvjetljenja na fotootporniku za neku akciju #define MIN_UDALJENOST 45 //minimalna udaljenost u cm za dezinfekciju ruku #define DEZ_TRAJANJE 1000 //millis - ispuštanje dezinfekcijskog sredstva #define BROJ_SVJETLA 4 // led traka - broj dioda #define MAX_BROJ_SOBA 5 // maksimalni broj soba odnosno programa koji se mogu izvoditi #define MAX_BROJ_NAREDBI 50 // maksimalni broj naredbi u jednom programu #define BROJ_CEKANJA 5 // broj mogućih odabira za trajanje čekanja #define PRAVI_KUT 1024 // broj koraka koračajnog motora za napraviti pravi kut s dva kotača #define NAPRIJED 770 // broj koraka koračajnog motora za pokrenuti se jedan korak unaprijed #define MAIL_POSLATI_CEKANJE 10 //u sekundama #include <Stepper.h> #include <SPI.h> #include <WiFi101.h> #include <BlynkSimpleMKR1000.h> #include <FastLED.h> #include <DFPlayerMini_Fast.h> #include <Servo.h> Servo servo_dez; Servo servo_lijek; CRGB svjetla[BROJ_SVJETLA]; Stepper motor_1(KORACI, S1P1, S1P3, S1P2, S1P4); // pinovi 1, 3, 2, 4 Stepper motor_2(KORACI, S2P1, S2P3, S2P2, S2P4); // pinovi 1, 3, 2, 4 DFPlayerMini_Fast MP3; char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //kod koji dobijemo na e-mail za blink aplikaciju (projekt) char ssid[] = "XXXXXXXXX"; // ime rutera char pass[] = "XXXXXXXXXXXXXXXXXXXXXXX"; // lozinka rutera int programi_uv[MAX_BROJ_SOBA][MAX_BROJ_NAREDBI][2]; // programi kretanja robota pri sterilizaciji UV svjetlom (0- smjer kretanja, 1 - trajanje čekanja (sterilizacije)) int programi_uv_broj_naredbi[MAX_BROJ_SOBA]; // broj naredbi u pojedinom programu sterilizacije
int programi_lijek[MAX_BROJ_SOBA][MAX_BROJ_NAREDBI][2]; // programi kretanja robota pri podjeli lijekova (0- smjer kretanja, 1 - podjela lijeka ili samo vožnja) int programi_lijek_broj_naredbi[MAX_BROJ_SOBA]; // broj naredbi u pojedinom programu podjele lijekova int programi_hrana[MAX_BROJ_SOBA][MAX_BROJ_NAREDBI][2]; // programi kretanja robota pri podjeli lijekova (0- smjer kretanja, 1 - podjela lijeka ili samo vožnja) int programi_hrana_broj_naredbi[MAX_BROJ_SOBA]; // broj naredbi u pojedinom programu podjele lijekova //byte cekanja[BROJ_CEKANJA] = {-1, 0, 600, 1200, 1800}; // prave vrijednosti čekanja u sekundama int cekanja[BROJ_CEKANJA] = {-1, 0, 2, 4, 6}; // vrijednosti čekanja u sekundama ZA PREZENTACIJU: 0sec, 2sec, 4sec, ...) enum govori { NISTA ,DEZINFICIRAJTE_RUKE ,UDJITE ,UZMITE_LIJEK ,UZELI_STE_LIJEK ,UZMITE_HRANU ,UZELI_STE_HRANU }; int trajanje_govora[7] = {0, 5600, 5560, 3820, 3100, 3500, 1000}; // trajanje pojedinog govora u milis (0. datoteka nula jer ne postoji; 1. datoteka traje 7500, stavio 5600 da pokaze gdje staviti ruku (led dioda), toliko traje, toliko traje) int x_joystick = 0; int y_joystick = 0; int mod; int program; int cekanje; int zadnji_x_joystick; int zadnji_y_joystick; int dez_zadnji_foto; int lijek_zadnji_foto; int pokreni; int spremi; int mjesto_program; int naredba; int UzvUdaljenost; unsigned long mail = 0; int mail_poslao = 0; void cekaj_da_uzme_lijek() { MP3.play(UZMITE_LIJEK); //uzmite lijek delay(trajanje_govora[UZMITE_LIJEK]); servo_lijek.write(LIJEK_OTVOREN); delay(300); digitalWrite(DIODA_LIJEK, HIGH); delay(10); // cekaj da dioda zasvjetli lijek_zadnji_foto = analogRead(FOTO_OTPORNIK_LIJEK); while (analogRead(FOTO_OTPORNIK_LIJEK) < lijek_zadnji_foto * (1 + POSTOTAK_SVIJETLA)); // sve dok je fotootpornik zamracen delay(1000); servo_lijek.write(LIJEK_ZATVOREN); digitalWrite(DIODA_LIJEK, LOW); MP3.play(UZELI_STE_LIJEK); delay(trajanje_govora[UZELI_STE_LIJEK]); // popijte lijek odmah } void cekaj_da_uzme_hranu() { MP3.play(UZMITE_HRANU); //uzmite hranu delay(trajanje_govora[UZMITE_HRANU]); digitalWrite(DIODA_LIJEK, HIGH); delay(10); // cekaj da dioda zasvjetli lijek_zadnji_foto = analogRead(FOTO_OTPORNIK_LIJEK);
while (analogRead(FOTO_OTPORNIK_LIJEK) < lijek_zadnji_foto * (1 + POSTOTAK_SVIJETLA)); // sve dok je fotootpornik zamracen digitalWrite(DIODA_LIJEK, LOW); delay(4000); MP3.play(UZELI_STE_HRANU); delay(trajanje_govora[UZELI_STE_HRANU]); // pojedite hranu odmah } void pokreni_robota_upravljanje(int smjer) { if (smjer == 1) //naprijed { motor_1.step(1); motor_2.step(-1); } else if (smjer == 3) //nazad { motor_1.step(-1); motor_2.step(1); } else if (smjer == 4) //lijevo { motor_1.step(-1); motor_2.step(-1); } else if (smjer == 2) //desno { motor_1.step(1); motor_2.step(1); } } void pokreni_robota(int smjer, int cekanje) { if (smjer == 1) //naprijed { for(int y = 0; y < NAPRIJED; y++) { motor_1.step(1); motor_2.step(-1); } //for(int y = 0; y < NAPRIJED; y++) } else if (smjer == 3) //nazad { for(int y = 0; y < NAPRIJED; y++) { motor_1.step(-1); motor_2.step(1); } //for(int y = 0; y < NAPRIJED; y++) } else if (smjer == 4) //lijevo { for(int y = 0; y < PRAVI_KUT; y++) { motor_1.step(-1); motor_2.step(-1); } //for(int y = 0; y < PRAVI_KUT; y++) } else if (smjer == 2) //desno { for(int y = 0; y < PRAVI_KUT; y++) { motor_1.step(1); motor_2.step(1); } //for(int y = 0; y < PRAVI_KUT; y++) } if (cekanje == -1) { if (mod == 2) { //nista ne ceka } else if(mod == 4) { cekaj_da_uzme_lijek(); } else if(mod == 8) { cekaj_da_uzme_hranu(); }
} else { if (cekanje == 0) { //nista ne ceka } else { Serial.println(cekanje); delay(50); uv(true); delay(cekanje * 1000); uv(false); } } } //void pokreni_robota(int smjer, int cekanje) void programiranje() { if (x_joystick != 0 or y_joystick != 0) // ako je pomak joystika onda spremi { zadnji_x_joystick = x_joystick; zadnji_y_joystick = y_joystick; } if (spremi == 1) { Serial.println("-----------------------------------------"); Serial.println(zadnji_x_joystick); Serial.println(zadnji_y_joystick); if (zadnji_y_joystick != 0) { Serial.println("zadnji_y_joystick != 0"); if (zadnji_y_joystick == 1) { programi_uv[program][mjesto_program][0] = 1; Serial.println("program = 1"); } //if (zadnji_y_joystick == 1) else { programi_uv[program][mjesto_program][0] = 3; Serial.println("program = 3"); } //else } //if (zadnji_y_joystick != 0) else { Serial.println("zadnji_x_joystick != 0"); if (zadnji_x_joystick == 1) { programi_uv[program][mjesto_program][0] = 2; Serial.println("program = 2"); } //if (zadnji_x_joystick = 1) else { programi_uv[program][mjesto_program][0] = 4; Serial.println("program = 4"); } //else } //else programi_uv[program][mjesto_program][1] = cekanja[cekanje - 1]; programi_uv_broj_naredbi[program] = mjesto_program + 1; Serial.println(programi_uv[program][0][2]); Serial.println(programi_uv[program][mjesto_program][0]); Serial.println(programi_uv[program][mjesto_program][1]); Serial.println("-----------------------------------------"); while (spremi == 1) // čekaj dok se ne otpusti tipka "spremi" { Blynk.run(); } mjesto_program ++; } //if (spremi == 1) } //void programiranje() void voznja() { if (pokreni == 1) { while (pokreni == 1) { Blynk.run();
} Serial.println(programi_uv_broj_naredbi[program]); for (int i = 0; i < programi_uv_broj_naredbi[program]; i++) { Serial.println("-----------------------------------------"); Serial.println(programi_uv[program][i][0]); Serial.println(programi_uv[program][i][1]); Serial.println("-----------------------------------------"); pokreni_robota(programi_uv[program][i][0], programi_uv[program][i][1]); } //for (int i = 0; i < programi_uv_broj_naredbi[program]; i++) Blynk.notify("Sterilizacija uspješno završena"); }// if (pokreni = 1) }//void voznja() void programiranje_podijeli_lijek() { if (x_joystick != 0 or y_joystick != 0) // ako je pomak joystika onda spremi { zadnji_x_joystick = x_joystick; zadnji_y_joystick = y_joystick; } if (spremi == 1) { Serial.println("-----------------------------------------"); Serial.println(zadnji_x_joystick); Serial.println(zadnji_y_joystick); if (zadnji_y_joystick != 0) { Serial.println("zadnji_y_joystick != 0"); if (zadnji_y_joystick == 1) { programi_lijek[program][mjesto_program][0] = 1; Serial.println("program = 1"); } //if (zadnji_y_joystick == 1) else { programi_lijek[program][mjesto_program][0] = 3; Serial.println("program = 3"); } //else } //if (zadnji_y_joystick != 0) else { Serial.println("zadnji_x_joystick != 0"); if (zadnji_x_joystick == 1) { programi_lijek[program][mjesto_program][0] = 2; Serial.println("program = 2"); } //if (zadnji_x_joystick = 1) else { programi_lijek[program][mjesto_program][0] = 4; Serial.println("program = 4"); } //else } //else if (cekanje == 1) { programi_lijek[program][mjesto_program][1] = cekanja[cekanje - 1]; } else { programi_lijek[program][mjesto_program][1] = 0; } programi_lijek_broj_naredbi[program] = mjesto_program + 1; Serial.println(programi_lijek[program][0][2]); Serial.println(programi_lijek[program][mjesto_program][0]); Serial.println(programi_lijek[program][mjesto_program][1]); Serial.println("-----------------------------------------"); while (spremi == 1) // čekaj dok se ne otpusti tipka "spremi" { Blynk.run(); } mjesto_program ++; } //if (spremi == 1) } //void programiranje_podijeli_lijek()
void voznja_podijeli_lijek() { if (pokreni == 1) { while (pokreni == 1) // čekaj dok se ne otpusti tipka "pokreni" { Blynk.run(); } Serial.println(programi_lijek_broj_naredbi[program]); for (int i = 0; i < programi_lijek_broj_naredbi[program]; i++) { Serial.println("-----------------------------------------"); Serial.println(programi_lijek[program][i][0]); Serial.println(programi_lijek[program][i][1]); Serial.println("-----------------------------------------"); pokreni_robota(programi_lijek[program][i][0], programi_lijek[program][i][1]); } //for (int i = 0; i < programi_lijek_broj_naredbi[program]; i++) Blynk.notify("Podijela lijekova uspješno završena"); }// if (pokreni = 1) }//void voznja_podijeli_lijek() void patrola() { UzvUdaljenost = ocitaj_ultra_zvucni(); Serial.println(UzvUdaljenost); if (UzvUdaljenost <= MIN_UDALJENOST) { MP3.play(DEZINFICIRAJTE_RUKE); // molim vas dezinficirajte ruku ovdje delay(trajanje_govora[DEZINFICIRAJTE_RUKE]); digitalWrite(DIODA_DEZ, HIGH); delay(10); // cekaj da dioda zasvjetli dez_zadnji_foto = analogRead(FOTO_OTPORNIK_DEZ); mail = millis(); mail_poslao = 0; while (analogRead(FOTO_OTPORNIK_DEZ) > dez_zadnji_foto * (1 - POSTOTAK_SVIJETLA)) // sve dok je fotootpornik osvijetljen { if (millis() - mail >= MAIL_POSLATI_CEKANJE * 1000 and mail_poslao == 0) { Blynk.email("[email protected]", "NIJE DEZINFICIRAO RUKE", "Osoba na ulazu 1. nije dezinficirala ruke!"); Serial.println("poslao mail"); mail_poslao = 1; } Blynk.run(); } servo_dez.write(DEZ_OTVOREN); delay(DEZ_TRAJANJE); servo_dez.write(DEZ_ZATVOREN); digitalWrite(DIODA_DEZ, LOW); MP3.play(UDJITE); // hvala vam što se pridržavate pravila delay(trajanje_govora[UDJITE]); while (UzvUdaljenost < MIN_UDALJENOST) UzvUdaljenost = ocitaj_ultra_zvucni(); delay(5000); // čekaj - ovo je zbog lakše prezentacije } } void upravljanje() { if (x_joystick != 0 or y_joystick != 0) { zadnji_x_joystick = x_joystick; zadnji_y_joystick = y_joystick; if (zadnji_y_joystick != 0) { Serial.println("zadnji_y_joystick != 0"); if (zadnji_y_joystick == 1) { naredba = 1; Serial.println("program = 1"); } //if (zadnji_y_joystick == 1) else { naredba = 3; Serial.println("program = 3"); } //else } //if (zadnji_y_joystick != 0)
else { Serial.println("zadnji_x_joystick != 0"); if (zadnji_x_joystick == 1) { naredba = 2; Serial.println("program = 2"); } //if (zadnji_x_joystick = 1) else { naredba = 4; Serial.println("program = 4"); } //else } //else pokreni_robota_upravljanje(naredba); }//if (pokreni == 1) }//void upravljanje() void programiranje_hrana() { if (x_joystick != 0 or y_joystick != 0) // ako je pomak joystika onda spremi { zadnji_x_joystick = x_joystick; zadnji_y_joystick = y_joystick; } if (spremi == 1) { Serial.println("-----------------------------------------"); Serial.println(zadnji_x_joystick); Serial.println(zadnji_y_joystick); if (zadnji_y_joystick != 0) { Serial.println("zadnji_y_joystick != 0"); if (zadnji_y_joystick == 1) { programi_hrana[program][mjesto_program][0] = 1; Serial.println("program = 1"); } //if (zadnji_y_joystick == 1) else { programi_hrana[program][mjesto_program][0] = 3; Serial.println("program = 3"); } //else } //if (zadnji_y_joystick != 0) else { Serial.println("zadnji_x_joystick != 0"); if (zadnji_x_joystick == 1) { programi_hrana[program][mjesto_program][0] = 2; Serial.println("program = 2"); } //if (zadnji_x_joystick = 1) else { programi_hrana[program][mjesto_program][0] = 4; Serial.println("program = 4"); } //else } //else if (cekanje == 1) { programi_hrana[program][mjesto_program][1] = cekanja[cekanje - 1]; } else { programi_hrana[program][mjesto_program][1] = 0; } programi_hrana_broj_naredbi[program] = mjesto_program + 1; Serial.println(programi_hrana[program][0][2]); Serial.println(programi_hrana[program][mjesto_program][0]); Serial.println(programi_hrana[program][mjesto_program][1]); Serial.println("-----------------------------------------"); while (spremi == 1) // čekaj dok se ne otpusti tipka "spremi" { Blynk.run(); } mjesto_program ++; } //if (spremi == 1) } //void programiranje_podijeli_hrana()
void voznja_hrana() { if (pokreni == 1) { while (pokreni == 1) // čekaj dok se ne otpusti tipka "pokreni" { Blynk.run(); } Serial.println(programi_hrana_broj_naredbi[program]); for (int i = 0; i < programi_hrana_broj_naredbi[program]; i++) { Serial.println("-----------------------------------------"); Serial.println(programi_hrana[program][i][0]); Serial.println(programi_hrana[program][i][1]); Serial.println("-----------------------------------------"); pokreni_robota(programi_hrana[program][i][0], programi_hrana[program][i][1]); } //for (int i = 0; i < programi_lijek_broj_naredbi[program]; i++) }// if (pokreni = 1) }//void voznja_hrana() void uv(bool ukljuciti) { if (ukljuciti) { for(int z; z < BROJ_SVJETLA; z++) { svjetla[z] = CRGB(127, 0, 255); // simuliraj ultraljubičasto svjetlo } } else { for(int z; z < BROJ_SVJETLA; z++) { svjetla[z] = CRGB(0, 0, 0); } } FastLED.show(); }//void uv(bool ukljuciti) int ocitaj_ultra_zvucni() { digitalWrite(ULTRA_ZVUCNI_TRIG, LOW); delayMicroseconds(2); digitalWrite(ULTRA_ZVUCNI_TRIG, HIGH); delayMicroseconds(10); digitalWrite(ULTRA_ZVUCNI_TRIG, LOW); int UzvTrajanje = pulseIn(ULTRA_ZVUCNI_ECHO, HIGH); // trajanje u mikrosekundama delay(50); // cekaj zbog UZV senzora return(UzvTrajanje/1000000./2*343*100); // tranje u micro s, pretvoriti u s, /2 jer pola puta, +343 brzina zvuka, *100 iz m u cm } BLYNK_WRITE(V3) // čitanje V3 virtualnog pina { x_joystick = param.asInt(); Serial.println(x_joystick); } BLYNK_WRITE(V4) // čitanje V4 virtualnog pina { y_joystick = param.asInt(); Serial.println(y_joystick); } BLYNK_WRITE(V0) // čitanje V0 virtualnog pina { mjesto_program = 0; mod = param.asInt(); Serial.println(mod); } BLYNK_WRITE(V1) // čitanje V2 virtualnog pina { mjesto_program = 0; program = param.asInt() - 1; // -1 jer polja idu od 0 Serial.println(program); } BLYNK_WRITE(V6) // čitanje V6 virtualnog pina
{ cekanje = param.asInt(); Serial.println(cekanje); } BLYNK_WRITE(V2) // čitanje V2 virtualnog pina { pokreni = param.asInt(); Serial.println(pokreni); } BLYNK_WRITE(V5) // čitanje V5 virtualnog pina { spremi = param.asInt(); Serial.println(spremi); } void setup() { motor_1.setSpeed(1000); motor_2.setSpeed(1000); servo_dez.attach(SERVO_DEZ); servo_lijek.attach(SERVO_LIJEK); servo_dez.write(DEZ_ZATVOREN); servo_lijek.write(LIJEK_ZATVOREN); pinMode(FOTO_OTPORNIK_DEZ, INPUT); pinMode(FOTO_OTPORNIK_LIJEK, INPUT); pinMode(DIODA_DEZ, OUTPUT); pinMode(DIODA_LIJEK, OUTPUT); pinMode(ULTRA_ZVUCNI_TRIG, OUTPUT); pinMode(ULTRA_ZVUCNI_ECHO, INPUT); FastLED.addLeds<WS2812, LED_STRIP_PIN, GRB>(svjetla, BROJ_SVJETLA); uv(false); Serial.begin(9600); Blynk.begin(auth, ssid, pass); Serial1.begin(9600); MP3.begin(Serial1); MP3.EQSelect(4); MP3.volume(30); delay(20); //----------------------------------------- // za prezentaciju dva primjera programa programi_uv[0][0][0] = 1; programi_uv[0][0][1] = 0; programi_uv[0][1][0] = 1; programi_uv[0][1][1] = 2; programi_uv[0][2][0] = 4; programi_uv[0][2][1] = 0; programi_uv[0][3][0] = 1; programi_uv[0][3][1] = 6; programi_uv[0][4][0] = 3; programi_uv[0][4][1] = 0; programi_uv[0][5][0] = 2; programi_uv[0][5][1] = 0; programi_uv[0][6][0] = 1; programi_uv[0][6][1] = 0; programi_uv[0][7][0] = 1; programi_uv[0][7][1] = 0; programi_uv[0][8][0] = 1; programi_uv[0][8][1] = 2; programi_uv[0][9][0] = 4; programi_uv[0][9][1] = 0; programi_uv[0][10][0] = 1; programi_uv[0][10][1] = 6; programi_uv[0][11][0] = 3; programi_uv[0][11][1] = 0; programi_uv[0][12][0] = 2; programi_uv[0][12][1] = 0; programi_uv[0][13][0] = 1; programi_uv[0][13][1] = 2; programi_uv[0][14][0] = 3; programi_uv[0][14][1] = 0; programi_uv[0][15][0] = 3; programi_uv[0][15][1] = 0; programi_uv[0][16][0] = 3; programi_uv[0][16][1] = 0; programi_uv[0][17][0] = 3; programi_uv[0][17][1] = 0; programi_uv[0][18][0] = 3; programi_uv[0][18][1] = 0; programi_uv[0][19][0] = 3; programi_uv[0][19][1] = 0; programi_uv_broj_naredbi[0] = 20; programi_lijek[0][0][0] = 1; programi_lijek[0][0][1] = 0; programi_lijek[0][1][0] = 1; programi_lijek[0][1][1] = 0; programi_lijek[0][2][0] = 4; programi_lijek[0][2][1] = 0; programi_lijek[0][3][0] = 1; programi_lijek[0][3][1] = 0; programi_lijek[0][4][0] = 2; programi_lijek[0][4][1] = -1; programi_lijek[0][5][0] = 2; programi_lijek[0][5][1] = 0;
programi_lijek[0][6][0] = 1; programi_lijek[0][6][1] = 0; programi_lijek[0][7][0] = 4; programi_lijek[0][7][1] = 0; programi_lijek[0][8][0] = 1; programi_lijek[0][8][1] = 0; programi_lijek[0][9][0] = 1; programi_lijek[0][9][1] = 0; programi_lijek[0][10][0] = 1; programi_lijek[0][10][1] = 0; programi_lijek[0][11][0] = 4; programi_lijek[0][11][1] = 0; programi_lijek[0][12][0] = 1; programi_lijek[0][12][1] = 0; programi_lijek[0][13][0] = 2; programi_lijek[0][13][1] = -1; programi_lijek[0][14][0] = 2; programi_lijek[0][14][1] = 0; programi_lijek[0][15][0] = 1; programi_lijek[0][15][1] = 0; programi_lijek[0][16][0] = 2; programi_lijek[0][16][1] = 0; programi_lijek[0][17][0] = 1; programi_lijek[0][17][1] = 0; programi_lijek[0][18][0] = 1; programi_lijek[0][18][1] = 0; programi_lijek[0][19][0] = 1; programi_lijek[0][19][1] = 0; programi_lijek[0][20][0] = 1; programi_lijek[0][20][1] = 0; programi_lijek[0][21][0] = 1; programi_lijek[0][21][1] = 0; programi_lijek_broj_naredbi[0] = 32; //----------------------------------------- } void loop() { Blynk.run(); if (mod == 1) { programiranje(); } else if (mod == 2) { voznja(); } else if (mod == 3) { programiranje_podijeli_lijek(); } else if (mod == 4) { voznja_podijeli_lijek(); } else if (mod == 5) { patrola(); } else if (mod == 6) { upravljanje(); } else if (mod == 7) { programiranje_hrana(); } else if (mod == 8) { voznja_hrana(); } }