Micro:bit-pametna kasica
OŠ IverPametna kasica koja prepoznaje kovanice i novčanice, te ih automatski zbraja i u svakom trenutku zna koliko je novaca u njoj. Za svaku ubačenu kunu dobivamo i virtualni novac za psića Lunu.
Luna nas podsjeća i potiče da više štedimo. S vremena na vrijeme nešto poželi i mi joj to možemo kupiti virtualnim novcem. Kad ponestane virtualnog novca, ubacivanjem pravog novca u kasicu stvara se ponovno virtualni novac.
Kako bi stavili novac iz kasice u banku na štednju, kako bi izvadili novac i stavili ga u banku, kasica se može otvoriti samo s posebnim
micro:bit-om koji ima bankar.
Video snimka
Priprema opreme
Potrebno:
1. micro:bit 3 komada
2. plastična kutija 21x14x12cm s poklopcem (pričvršćenim za jednu stranu kutije) 1kom
3. kutni konektor za micro:bit 1 kom
4. linijski linearni promjenjivi otpornik 100k Oma 2 kom
5. Tower Pro SG90 analogni servo motor 1 kom
6. kućište za baterije 2xAAA sa sklopkom i žicama 2 kom
7. kućište za baterije 3xAAA sa sklopkom i žicama 1 kom
8. gumica
9. metalna podloška promjera 22mm s rupom 5mm 1 kom
10. šarafi (za pričvrstiti linijski otpornik – veličina ovisi o vrsti otpornika) 4 kom
11. šaraf 22x2,5mm i matica 1 kom
12. šaraf 12x3.5mm, matica i plastična podloška 2 kom
13. mala eksperimentalna pločica 1 kom
14. led diode 5mm: bijela, crvena, zelena po 1 kom
15. fotootpornik 1kom
16. PVC kanalica bez poklopca 10x11mm duljine (odrezano) 2cm 1kom
17. PVC cijev vanjski promjer 8mm, unutarnji promjer 5mm, duljine (odrezano) 2cm 1kom
18. pleksiglas debljine 2mm
19. manja kabelska vezica 2 kom
20. M-M/M-Ž kablići više komada
21. slika ljubimca po želji (npr. Luna) – ispisana na pisaču ili ručno nacrtana
22. karton
23. ljepilo za papir
24. zvučnik
25. akrilna boja i kist
26. vodootporni flomaster (ili računalo i pisač) za izradu oznaka po kasici
27. škare za papir
28. pištolj za vruće lijepljenja
29. aku bušilica i svrdla raznih promjera
30. skalpel, kliješta i drugi alat po potrebi
a) slika prikazuje postupak izrade dijela koji automatski prepoznaje kovanice. Izrežemo pleksiglas u 3 dijela prema slici, izbušimo, te šarafima pričvrstimo linijski promjenjivi otpornik. Metalna podloška na drški linijskog otpornika služi da bi kovanice lakše prolazile bez zapinjanja.
Nakon prolaska kovanice, gumica vraća dršku otpornika u početnu poziciju.
b) dio slike crnom bojom prikazuje gdje treba izrezati/izbušiti kutiju kako bi pištoljem za
vruće lijepljenje zalijepili ili šarafima pričvrstili:
1) linijski promjenjivi otpornik za prepoznavanje kovanica,
2) linijski promjenjivi otpornik za određivanje novčanica,
3) prorez za ubacivanje novčanica,
4) prorez za pinove kutnog konektora za micro:bit,
5) crvena led dioda,
6) zelena led dioda,
7) fotootpornik postavljen u plastičnu cijev (kako ne bi okolna svjetlost smetala) i
okrenut prema 8),
8) bijela led dioda okrenuta prema fotootporniku 7),
9) SG90 servo motor,
10) PVC kanalica bez poklopca nasuprot motora, kako bi se kutija motorom zatvarala.
Eksperimentalnu pločicu, jedno kućište 2xAAA i jedno 3xAAA za baterije zalijepimo
ovisno o slobodnom prostoru na kutiji.
Spajanje elemenata se radi prema shemi na gornjem dijelu slike.
Elemente spajamo M-M/M-Ž kablićima preko eksperimentalne pločice. Na donjem dijelu slike možemo vidjeti stvarni izgled nakon spajanja. Na gornjoj strani kasice flomasterom (u našem slučaju zalijepili ispisano na pisač) označimo mjesta gdje se ubacuju kovanice, gdje novčanice, te koje novčanice možemo odabrati.
Kasicu možemo obojati. U našem slučaju akrilnom bojom i kistom je obojan poklopac kasice.
Ručno nacrtanog ili na pisaču ispisanog psića Lunu (ili nekog drugog ljubimca) izrežemo. Karton izrežemo prema obliku psića i zajedno zalijepimo ljepilom za papir.
Na trbuhu psića izrežemo otvor za led diode, izbušimo 2 rupe za gumbe A i B, te dvije rupe za šarafe na mjestu pinova GND i P0.
Sa zadnje strane pričvrstimo micro-bit šarafima i maticama. Pištoljem za vruće lijepljenje zalijepimo držač za baterije, te zvučnik, koji spojimo na mjestu šarafa na GND i pin P0.
Na svaki od 3 micro:bit-a snimimo određeni program (pametna kasica, pas Luna, te micro:bit u banci za otvaranje kasice i vađenje novaca). Pametna kasica automatski prepoznaje ubačene kovanice. Prije ubacivanja novčanica potrebno je odrediti (pokazati) o kojoj se novčanici radi.
Kasica novčanice i kovanice automatski zbraja i u svakom trenutku zna koliko je novaca u njoj (stanje se dobije pritiskom na gumb A na kasici).
Za svaku ubačenu kunu dobivamo i virtualni novac za psića Lunu (virtualni novci se na Lunu prebacuju pritiskom na gumb B). S vremena na vrijeme Luna nešto poželi (kost, lopticu, majicu) i prikazuje tužno lice.
Ako joj virtualnim novcem kupimo željeno (pritiskom na gumb B), Luna ponovno postaje sretna i pokazuje veselo lice.
Svaka kupovina košta 2 virtualna novčića.
Noću (kad je mrak) Luna odlazi u mod spavanja i ne javlja se sve dok ne dođe ponovno dan.
Pritiskom na gumb A na Luni dobijemo stanje virtualnog novca.
Kad ponestane virtualnog novca, ubacivanjem pravog novca u kasicu stvara se ponovno virtualni novac.
Trećim micro:bit-om se otvara kasica, kako bi se ostavio novac u banci. Predviđeno je da ga ima bankar.
Programiranje
PROGRAM ZA UMJERAVANJE daje vrijednosti sa linijskih promjenjivih otpornika.
Na početku postavljamo varijablu broj_vidim_kovanicu na vrijednost linijski promjenjivog otpornika s pina P0 u nepomaknutom položaju uvećano za 5.
To znači da ako se ručica otpornika pomakne za više od 5, onda je u tijeku ubacivanje kovanice, te treba početi čitati vrijednost otpornika.
Trenutnu širinu kovanice postavimo na 0. U petlji čitamo vrijednost linijski promjenjivog otpornika s pina P0. Ako je trenutna širina veća od granične (ručica otpornika se pomaknula) postavljamo najveću širinu kovanice na 0, te počnemo tražiti najveću širinu. U petlji, sve dok je trenutna širina veća od granične (ručica otpornika je pomaknuta), čitamo vrijednost linijskog promjenjivog otpornika s pina P0 (širinu kovanice). Ako je trenutna pročitana veća od dosadašnje najveće, spremamo ju kao najveću.
Kad se ručica otpornika vrati ispod granične (izašlo se iz unutarnje petlje) prikaže se najveća širina.
Uzastopno ubacujemo jednu po jednu vrijednost kovanice i promatramo raspon brojeva koji dobijemo za svaku pojedinu kovanicu.
Ove raspone brojeva zapišemo, te ćemo kasnije koristiti u glavnom programu. Pritiskom na gumb A dobijemo analognu vrijednost linijskog promjenjivog otpornika s pina P1 koji pokazuje vrijednost odabrane novčanice. Redom pomičemo kazaljku na početak i na kraj svake pojedine novčanice, te zapisujemo u kojem se rasponu brojeva određuje koja novčanica. Podatke zapišemo za kasnije za korištenje u glavnom programu.
Program za “Pametnu kasicu”.
Radio grupu za komuniciranje postavimo na 1. Vrijednosti varijabli novci_u_kasici,
ubačeni_novci,… postavimo na 0. Servo motor priključen na pin 16 postavljamo na 90 stupnjeva, što znači da
zaključavamo kasicu (ako slučajno nije zaključana). Postavljamo granične vrijednosti za detekciju novčanice i kovanice.
Varijabla broj_vidim_novčanicu se postavlja na analognu vrijednost s pina P2 (priključen fotootpornik) kad nema prepreke između fotootpornika i diode koja svijetli u smjeru fotootpornika. Pročitana vrijednost se umanjuje za 40, kako bi se dala tolerancija. To znači, ako pročitana vrijednost s fotootpornika padne za više od 40, tada je u tijeku ubacivanje novčanice.
Varijabla broj_vidim_kovanicu se postavlja na vrijednost linijski promjenjivog otpornika s pina P0 u nepomaknutom položaju. Na pročitanu vrijednost se dodaje 5 kako bi se dala tolerancija. To znači, ako se ručica otpornika pomakne za više od 5, onda je u tijeku ubacivanje kovanice.
U petlji čitamo vrijednost linijski promjenjivog otpornika s pina P0. Ako je trenutna širina veća od granične (ručica otpornika se pomaknula) postavljamo najveću širinu kovanice na 0, te počnemo tražiti najveću širinu.
U petlji, sve dok je trenutna širina veća od granične (ručica otpornika je pomaknuta), čitamo vrijednost linijskog promjenjivog otpornika s pina P0 (širinu kovanice). Ako je trenutna pročitana veća od dosadašnje najveće, spremamo ju kao najveću.
Kad se ručica otpornika vrati ispod granične (izašlo se iz unutarnje petlje), utvrđena je najveća širina kovanice.
Dobivenu najveću širinu kovanice uspoređujemo sa rasponima brojeva dobivenih programom za umjeravanje kovanica.
Ako je najveća širina kovanice između 285 i 350 ubačeno je 5 kn, ako je između 225 i 275 ubačeno je 2 kn,..
Varijablu ubačeni_novac postavljamo na vrijednost u lipama ubačene kovanice. Na primjer, za ubačenih 5 kn u varijablu ubačeni_novac zapisujemo 500. Ako nije ni jedan od poznatih raspona širine kovanice, u varijablu ubačeni_novac zapisujemo -1 (nepoznata kovanica).
Na fotootporniku (pin P2) promatramo da li je utvrđeno ubacivanje novčanice (ako je pročitana vrijednost manja od referentne broj_vidim_novčanicu).
Ako postoji ubacivanje novčanice, čitamo s pina P1 (linijski promjenjivi otpornik) analognu vrijednost (varijabla broj_novčanica) o kojoj se novčanici radi. Uspoređujemo dobivenu vrijednost s rasponima dobivenim prilikom umjeravanja. Ako je vrijednost između 0 i 9 radi se o 5 kn, ako je između 46 i 48 radi se o 10kn,…
I u slučaju novčanica u varijablu ubačeni_novac zapisujemo vrijednost u lipama. Ako nije ni jedan od poznatih raspona odabrane novčanice, u varijablu ubačeni_novac zapisujemo -1 (nepoznata novčanica).
Ako je ubačena kovanica ili novčanica (vrijednost varijable ubačeni_novac > 0) radimo
slijedeće:
Na digitalni pin P8 postavimo vrijednost 1 – znači da upalimo crvenu led diodu. Virtualni novac i novac u kasici povećamo za iznos ubačenog novca. U pomoćnu varijablu za ispis (novci_za_ispis) pohranimo iznos ubačenog novca i
pozovemo funkciju za ispis.
Varijablu ubačeni_novac postavimo na 0. Na digitalni pin P8 postavimo vrijednost 0 – znači da isključimo crvenu led diodu. Ako pak je ubačena kovanica ili novčanica neprepoznata (vrijednost varijable ubačeni_novac =-1), ispišemo tužno lice, pričekamo 2 sec, izbrišemo zaslon, te postavimo varijablu ubačeni_novac na 0.
Ako je pritisnut gumb A prikazujemo koliko imamo stvarnih i virtualnih novaca u kasici. Prvo ispišemo “U kasici”, zatim u pomoćnu varijablu za ispis (novci_za_ispis) pohranimo iznos stvarnih novaca u kasici, te pozovemo funkciju za ispis.
Još prikažemo virtualne novce ispisujući “Za Lunu” i iznos virtualnog novca. Ovdje možemo primijetiti da se virtualni novci ispisuju bez lipa (dijeljeno sa 100), tj. da se za jednu kunu dobije jedan virtualni novčić.
Iznos u lipama se koriste samo kako bi se uzastopno ubacivanje kovanica u lipama (npr. 50+50+20) evidentiralo, te kako bi se kasnije samo “cijele” kune pretvorile u virtualne novčiće.
Ako je pritisnut gumb B šaljemo virtualne novce na Lunu. Ako nema virtualnih novaca (= 0) ispisuje se “Nemam za poslati!”. Ako pak ima, šalje se iznos virtualnih novaca podijeljen sa 100 (za jednu kunu dobije jedan virtualni novčić). Zatim 10 puta čekamo po 100ms kako bi Luna poslala potvrdu primitka, a ta potvrda u događaju “on radio received” postavlja virtualni_novac na 0.
Ovdje je bilo nekih problema. Čini nam se, ako koristimo čekaj 1000ms umjesto čekaj 10x100ms, događaj “on radio received” se ne uspije uhvatiti. Ako Luna nije primila novac (virtualni_novac nije 0) prikaže se sličica X preko zaslona.
Funkcija ispisuje odvojeno kune i lipe iz varijable novci_za_ispis (koja sadrži iznos u lipama).
Prvo se izračuna koliko je kuna – dijeljenjem iznosa sa 100. Zatim se izračuna koliko je lipa – od iznosa oduzmemo izračunate kune pomnožene sa 100 (pretvorimo cijele kune u lipe).
Varijabla za_ispis se prvo pobriše. Ako postoje kuna, u varijablu se zapiše iznos kuna s nadodanom oznakom “kn”. Ako postoje lipe, u varijablu se zapiše iznos lipa s nadodanom oznakom “lp”. Na kraju se ispiše varijabla za_ispis.
Ako je primljena radio poruka, onda se kontrolira sadržaj.
Ako je primljeno “primio”, to znači da je Luna primila virtualne novce i poslala tu poruku.
Virtualni novci na kasici se postave na 0, jer su prebačeni na Lunu. Prikaže se kvačica.
Ako je primljeno “otvori”, to znači da je s micro:bit-a bankara poslana poruka da se otvori kasica.
Digitalni pin 12 se postavi na 1 (uključi se zelena led dioda). Servo motor se postavi na 0 stupnjeva (u položaj u kojem je kasica otvorena). Varijabla novci_u_kasici se postavi na 0, jer će se novci izvaditi iz kasice.
Ako je primljeno “zatvori”, to znači da je s micro:bit-a bankara poslana poruka da se kasica zatvori.
Digitalni pin 12 se postavi na 0 (isključi se zelena led dioda). Servo motor se postavi na 90 stupnjeva (u položaj u kojem je kasica zatvorena).
Program na psiću Luni. Radio grupu za komuniciranje postavimo na 1. Vrijednosti varijabli vitrualni_novci i želje postavimo na 0.
Promjenama vrijednost varijable brzina_biranja_želje možemo mijenjati koliko brzo Luna zaželi želje.
Vrijednost može biti u rasponu od 3 pa na više. Za manju vrijednost Luna će imati više i češće želje.
Varijabla učestalost_zvuka nam govori nakon koliko tužnih prikazanih lica se pojavljuje zvuk (zvuk se ne javlja cijelo vrijeme). Promjenom ove varijable može definirati razmak između javljanja zvuka. Pozove se funkcija smijeh, koja inicijalno prikazuje Lunu veselu.
Zauvjek u petlji radimo:
Provjeravamo razinu osvjetljenja. Ako je manja od 25, znači da je noć, pa Luna ulazi u mod spavanja. Prikazuje se sličica
“usta”. Čekamo 1s. Ako pak nije noć, Luna postaje aktivna. Ako je želja 0 (Luna trenutno nema želju) bira se nova želja slučajnim odabirom broja. Ako je želja veća od 3 (imamo samo 3 želje), onda znači da zapravo nema želje pa varijablu postavljamo na 0. Ako pak je želja odabrana, varijablu brojač postavljamo na najveću vrijednost (na učestaklost_zvuka) kako bi se u ovom koraku odmah pojavio zvuk.
Čekamo 1s, pa provjeravamo da li je možda pritisnut gumb A. Ako je, pozivamo funkciju za prikaz virtualnog novca.
Možemo vidjeti na više mjesta provjeru da li je pritisnut gumb A. Problem su naredbe “čekaj”, koje uspore tijek programa, a za njihovo vrijeme se ne provjerava pritisak gumba.
Ako je želja odabrana (varijabla želja nije 0), prikaže se tužno lice i čeka 1s.
Brojač javljanja zvuka povećavamo za 1.
Ako je brojač veći od vrijednosti varijable učestalost_zvuka, javlja se zvuk, te se brojač postavi na 0.
Ako je želja = 1, Luna je zaželjela majicu, pa se majica prikazuje.
Ako je želja 2, Luna želi kost. Ako pak 3, Luna želi lopticu.
Ako je pritisnut gumb A, pozivamo funkciju za prikaz virtualnog novca.
Čekamo 1s, pa ponovno provjeravamo da li je pritisnut gumb A, te ispisujemo iznos virtualnog novca.
Ako je pritisnut gumb B, tada kupujemo Luni zaželjeno. Virtualne novce umanjimo za 2 novčića. Ako smo time došli na negativnu vrijednost, vratimo nazad 2 novčića (zbrajanjem) i ispisujemo “Nema dovoljno za kupnju!”
Ako pak imamo dovoljno virtualnih novčića, želju postavljamo na 0 (nema želja), te pozovemo funkciju smijeh (Luna je ponovno vesela).
Funkcija smijeh prikazuje Lunu veselu. Dva puta se svira ton A s pauzom od 100ms između.
Funkcija prikaži_virtualni_novac prikazuje virtualni novac. Ispisuje se “Ukupno novaca:” i iznos raspoloživog virtualnog novca.
Ako je radio porukom primljen broj, provjeri se prvo da je različit od 0.
Ovdje smo s nulom imali problema, jer se javljala i prilikom slanja poruka koje su znakovne (nisu brojevne).
No u našem slučaju 0 nam ne treba, pa tu vrijednost ignoriramo. Ukupni iznos virtualnih novaca povećamo za primljeni broj.
Deset puta šaljemo radiom “primio” pametnoj kasici. Šaljemo 10 puta, jer smo imali problema zbog naredbi “čekaj”.
Završni dio
Autori
Projekt su izradili Mihael Orak i Lovro Klrić uz mentorstvo Romana Rubčića iz OŠ Iver.