U današnje vrijeme mnoštvo uređaja za kućnu i javnu upotrebu postaje automatizirano. Vjerojatno ste se našli u situaciji da u javnom WC-u vidite automatske sušilice za ruke koje se aktiviraju pomoću senzora pokreta, ili pak dispenzere papirnatih ubrusa, dispenzere sapuna, automatske slavine itd. Osim što imaju ulogu olakšavanja upotrebe samom korisniku, automatizirani uređaji štede električnu energiju.Kako? Njihovo aktiviranje vrši se beskontaktno, senzorom blizine, a trajanje uključenosti može biti definirano vremenskim intervalom (slavina) ili određenim pokretom (dispenzer ubrusa), što znači da uređaj ne može biti uključen ako ga korisnik ne aktivira pokretom. Danas su takvi automatizirani uređaji dostupni za komercijalnu upotrebu, ali i dalje imaju pozamašnu cijenu. Cilj nam je pokazati kako napraviti jedan takav uređaj uz pomoć Arduina i infracrvenog senzora blizine za puno manje novca. Dakako, naš će uređaj imati homemade kućište jer nam estetski izgled nije bitan faktor; također postoji mogućnost i 3D printanja kućišta, što će naš automatski dispenzer dovesti na neku ozbiljniju razinu. Želimo li napraviti jedan takav uređaj, moramo uzeti u obzir neke ključne faktore poput odabira vrste napajanja (motorić koji bi povlačio papirnate ubruse troši puno električne energije pa baterija i nije najbolje rješenje za napajanje) i odabir izvedbe izbacivanja papira (može biti direktna rotacija osovine na kojoj se nalazi rola papira).
Ako će se koristiti u kupaonici, dispenzer mora imati adekvatno izvedenu zaštitu i vodonepropusno kućište. Kupaonica je mjesto s jako puno vlage koja šteti električnim uređajima, ali nije u pitanju samo narušavanje funkcionalnost uređaja, nego i opasnost za ljude, stoga treba voditi računa o tim stvarima jer nam je cilj imati siguran i ispravan uređaj.
Glavni problem kod mehaničkog dijela je izvođenje rotacije osovine na koju je pričvršćena rola papira. Kako brzina okretanja ne smije biti prevelika, optimalno bi bilo imati 0,25 do 0,5 okreta u sekundi. Najbolje rješenje bio bi servo motor s rotacijom od 360°, ali kako takvi motori koštaju i stotinjak kuna, naše će rješenje biti SG90 servo motor koji je vrlo malenih dimenzija i često se koristi uz Arduino, ali nema mogućnost rotacije cijelog kruga nego od 0° do 270°. 3/4 kruga nije dovoljno za kvalitetno izbacivanje papira jer nakon što rotor dođe u krajnju poziciju, više se ne može kretati u tom smjeru; odspajanje enkodera i fizičko modificiranje prijenosa servo motora riješilo bi problem i dobili bismo punu rotaciju.
Rastavljanje servo motora
Mana ovog rješenja je nemogućnost praćenja pozicije jer enkodera više neće biti ili će biti odspojen, a potrebno je rastaviti cijeli servo motor kako bismo to napravili. Ako vam se ta alternativa čini zahtjevnom, upotrijebite servo motor s mogućnošću zakreta za puni krug (i više, kontinuirana vrtnja), što će rezultirati većom cijenom. Kako SG90 možemo dobiti za dvadesetak kuna (eBay 10 kn), ipak ćemo ga koristiti. Servo motori u sebi imaju reduktor te pomoću njega na izlazu daju određeni zakretni moment. Rola papira nije neke značajne težine (pogotovo WC papira), pa nije toliko bitno kakav će biti servo motor. SG90 servo motor na zadnjoj strani sadrži četiri dugačka vijka koja je potrebno maknuti kako bismo mogli pristupiti elektroničkom dijelu motora i prijenosnom mehanizmu; svi su ti dijelovi na različitim stranama. S elektronike ćemo ukloniti tri žice koje su tvornički ugrađene, a pločicu nije potrebno skidati, iako je moguće. Potrebno je zalemiti dvije žice direktno na motor i izvući ih van. Prilikom skidanja zupčanika u prijenosnom mehanizmu treba paziti na njihov raspored, i potrebno ih je vratiti onako kako su tvornički postavljeni jer inače više neće funkcionirati cijeli reduktor. Ispod prijenosnog mehanizma nalazi se enkoder (određuje trenutnu poziciju rotora) i u našem je slučaju zelene boje. Enkoder mehaničkim putem ograničava kretnju rotora od 0° do 270°.
Gornji dio enkodera treba izvaditi i paziti da se ne ošteti osovina u sredini jer na nju dolaze dva zupčanika
Gornji je dio enkodera (zeleno kružno) potrebno izvaditi, doslovno potrgati i paziti da se ne ošteti osovina u sredini jer na nju dolaze dva zupčanika. Treba biti precizan i jako tankim odvijačem potrgati zeleni dio s gornje strane enkodera. Nakon što je poklopac enkodera potrgan, unutra obavezno ukloniti sitne metalne dijelove jer oni otežavaju kružnu putanju osovine (prilikom čupanja poklopca enkodera savinuli smo i sitne metalne dijelove). Zadnji korak modifikacije je uklanjanje mehaničkog osigurača na zadnjem i najvećem zupčaniku koji je nama vidljiv dok je servo motor kompletno spojen. S njegove donje strane nalazi se komad plastike koji ne dozvoljava punu rotaciju jer se zabija u susjedni zupčanik; to možete ukloniti skalpelom. Nakon svih koraka treba vratiti zupčanike na svoje mjesto, vratiti poklopce i zašarafiti kućište. Ovim smo pothvatom potrgali enkoder i odspojili elektronički dio. Servo motor ima mogućnost rotacije 360°, ali sada radi kao motor s reduktorom. Iz Arduina se ne može kontrolirati niti pozicija niti brzina vrtnje, ali to nam nije ni bitno. Motor se spaja direktno na 5 V i okreće brzinom cca 120 okretaja u minuti, tj. 2 okretaja u sekundi dok na njega nije spojeno nikakvo opterećenje. Motor zahtijeva veću struju nego što Arduino može isporučiti te ga ne možemo pokretati direktno s pinova. Kako ćemo to riješiti? Tranzistorom! Neki od digitalnih izlaza Arduina s otpornikom od 1 k spojit ćemo s bazom tranzistora (uzeli smo 2N2222). Na kolektor spajamo motor i napajanje 5 V, a na emiter GND. Digitalni impuls iz Arduina „otvoriti“ će tranzistor te će poteći struja kroz motor, što će rezultirati željenom rotacijom. Kao senzor možemo koristiti infracrveni senzor pokreta (s komparatorom napona za lakše korištenje) ili tipkalo. U našem primjeru nalaze se oba rješenja. Testiranjem motora dobili smo podatak da jedan okret rotora traje 600 ms, a ta će konstanta poslužiti kao jedno doziranje.
Rola WC papira nije neke značajne težine, pa nije toliko bitno kakve će snage biti servo motor
Arduino program tipkalo:
const int Tipkalo = 4;
const int Motoric = 7;
void setup() {
pinMode(Motoric, OUTPUT);
pinMode(Tipkalo, INPUT);
}
void loop() {
if (digitalRead(Tipkalo) == LOW){
digitalWrite(Motoric, HIGH);
delay(500);
digitalWrite(Motoric, LOW);
}
}
Tipkalo spajamo na digitalni pin 4 i pinu pridružujemo ime „Tipkalo“, dok servo spajamo na digitalni pin 7 i pridružujemo mu ime „Motoric“. Tipkalo je ulazna varijabla, dok je motoric izlazna. Pritiskom na tipkalo „aktivira“ se tranzistor i tijekom 500 ms omogućuje napajanje motora (500 ms je otprilike jedan puni okret).
Arduino program
IR senzor:
const int IR = 2;
const int Motoric = 7;
void setup() {
pinMode(Motoric, OUTPUT);
pinMode(IR, INPUT);
}
void loop() {
if (digitalRead(IR) == HIGH){
digitalWrite(Motoric, HIGH);
delay(500);
digitalWrite(Motoric, LOW);
}
}
Kao i u slučaju s tipkalom, sve je više-manje isto, IR senzor se spaja na pin 2. Razlika je u tome što IR senzor pri detekciji pokreta šalje HIGH impulse (5 V), što je suprotno od onoga što tipkalo radi. Potrebno je u if uvjetnoj naredbi zamijeniti stanje ispitivanja u HIGH (dok detektira pokret, pokrenut će motor).
Cijeli kod možete potražiti na Github stranici Vidilaba: https://github.com/VidiLAB-com/Arduino
Shema spajanja MG995 s vanjskim napajanjem. Rješenje je napravljeno pomoću 9 V baterije i LM7805 stabilizatora napona (5V)
Infracrveni senzor je bolje rješenje jer ne zahtijeva fizički kontakt korisnika s uređajem. Korišteni senzor na sebi ima ugrađen komparator napona radi lakšeg rukovanja, a udaljenost detekcije reguliramo uz pomoć malog potenciometra na njemu. Prilikom detekcije šalje HIGH impuls.
Naše rješenje za fizičko otklanjanje enkodera nije najbolje rješenje i služi samo kao pokazni primjer. Kako bismo napravili kvalitetan dispenzer papira, potrebno je koristiti servo motor koji nudi mogućnost rotacije od 0 do 360 stupnjeva. Kod takvih motora ne možemo pratiti poziciju rotora, ali možemo regulirati brzinu vrtnje. Jedan takav servo motor je MG995 i može se nabaviti na eBayu po cijeni od dvadesetak kn. Arduino nema dovoljno snage za pokretanje servo motora većeg od SG90 te je potrebno na njega dovesti posebno napajanje.