18
robot koji pomaže ljudima u borbi protiv zaraznih bolesti Učenik: Mihael Orak Mentor: Roman Rubčić OŠ Iver, Sesvetski Kraljevec

robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

 

 

 

 

 

 

 

 

 

 

 robot koji pomaže ljudima  

u borbi protiv zaraznih bolesti 

  

 

 

 

 

 

 

Učenik: Mihael Orak 

Mentor: Roman Rubčić 

OŠ Iver, Sesvetski Kraljevec 

Page 2: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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)    

Page 3: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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   

Page 4: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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 

 

Page 5: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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 

 

   

Page 6: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

Fritzing shema  

 

Page 7: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

3D printani dijelovi 

 

   

 

   

Page 8: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

Blynk aplikacija 

 

 

   

Page 9: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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

Page 10: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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);

Page 11: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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(); }

Page 12: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

} 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();

Page 13: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

} 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()

Page 14: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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)

Page 15: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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()

Page 16: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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

Page 17: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

{ 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;

Page 18: robot koji pomaže ljudima zaraznih bolesti · 2021. 5. 30. · programiranje puta robota kojim će se automatski kretati i obavljati neki posao preko upravljačkog uređaja (tableta

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(); } }