- Tarvittava materiaali
- Piirikaavio
- 3D-tulostettu lemmikkieläinten ruokintamalli
- DS3231 RTC-moduuli
- Koodi ja selitys
- Automaattisen lemmikkieläinten syöttölaitteen toiminta
Tänään rakennamme Arduino-pohjaista automaattista lemmikkieläinten syöttölaitetta, joka pystyy tarjoamaan ruokaa lemmikkillesi automaattisesti ajoissa. Siinä on DS3231 RTC (Real Time Clock) -moduuli, jolla asetettiin aika ja päivämäärä, jolloin lemmikkisi tulisi antaa ruokaa. Joten asettamalla aika lemmikkisi ruokailuaikataulun mukaan laite pudottaa tai täyttää ruokakupin automaattisesti.
Tässä piirissä käytämme ajan näyttämiseen 16 * 2 nestekidenäyttöä käyttämällä DS3231 RTC -moduulia Arduino UNO: n kanssa. Lisäksi servomoottoria käytetään astioiden pyörittämiseen ruoan tarjoamiseksi ja 4 * 4 -matriisinäppäimistöllä lemmikin ruokinta-ajan asettamiseksi manuaalisesti. Voit asettaa kiertokulman ja astian avaamisen keston sen mukaan, kuinka paljon ruokaa haluat tarjota lemmikkillesi. Ruoan määrä voi myös riippua lemmikkisi koirasta, kissasta tai linnusta.
Tarvittava materiaali
- Arduino UNO
- 4 * 4 Matrix-näppäimistö
- 16 * 2 LCD-näyttö
- Paina nappia
- Servo moottori
- Vastus
- Johtojen liittäminen
- Leipälauta
Piirikaavio
Tässä Arduino-pohjaisessa kissan syöttölaitteessa ajan ja päivämäärän saamiseksi olemme käyttäneet RTC (Real Time Clock) -moduulia. Olemme käyttäneet 4 * 4 Matrix -näppäimistöä asettamaan lemmikin syömisaika manuaalisesti 16x2 LCD: n avulla. Servomoottori pyörittää astiaa ja pudottaa ruoan käyttäjän asettamaan aikaan. LCD-näyttöä käytetään päivämäärän ja kellonajan näyttämiseen. Täydellinen työskentely löytyy lopussa olevasta videosta.
3D-tulostettu lemmikkieläinten ruokintamalli
Olemme suunnitelleet tämän Arduino Pet Feeder -säiliön 3D-tulostimella. Voit tulostaa myös saman mallin lataamalla tiedostot täältä. Tämän mallin tulostamiseen käytetty materiaali on PLA. Siinä on neljä osaa alla olevan kuvan mukaisesti:
Kokoa neljä osaa ja kytke servomoottori alla olevan kuvan mukaisesti:
Jos olet uusi 3D-tulostuksessa, tässä on aloitusopas. Voit ladata tämän lemmikkieläinten syöttölaitteen STL-tiedostot täältä.
DS3231 RTC-moduuli
DS3231 on RTC (Real Time Clock) -moduuli. Sitä käytetään pitämään päivämäärä ja aika useimmissa elektroniikkaprojekteissa. Tällä moduulilla on oma kolikkovirtalähde, jonka avulla se ylläpitää päivämäärää ja kellonaikaa, vaikka päävirta irrotettaisiin tai MCU olisi nollattu kovalla teholla. Joten kun asetamme päivämäärän ja kellonajan tässä moduulissa, se seuraa sitä aina. Piirissämme käytämme DS3231: ää lemmikin ruokintaan lemmikin omistajan asettaman ajan mukaan, kuten hälytys. Kun kello saavuttaa asetetun ajan, se käyttää servomoottoria avaamaan astian portin ja ruoka putoaa lemmikkieläinten ruokakulhoon.
Huomaa: Kun käytät tätä moduulia ensimmäistä kertaa, sinun on asetettava päivämäärä ja kellonaika. Voit myös käyttää RTC IC DS1307: tä ajan lukemiseen Arduinolla.
Koodi ja selitys
Automaattinen lemmikkieläinten ruokintalaitteen täydellinen Arduino-koodi annetaan lopussa.
Arduinolla on oletuskirjastot Servo-moottorin ja LCD 16 * 2: n kanssa. Mutta kun käytät DS3231 RTC -moduulia ja 4 * 4 Matrix -näppäimistöä Arduinon kanssa, sinun on ladattava ja asennettava kirjastot. Molempien kirjastojen latauslinkki on annettu alla:
- DS3231 RTC (reaaliaikainen kello) -moduulikirjasto
- 4 * 4 Matrix-näppäimistökirjasto
Alla olevassa koodissa määritämme kirjastot, "#include
#sisältää
Alla olevassa koodissa määritämme 4 * 4 -matriisinäppäimistön näppäinkartan ja osoitamme Arduino-nastat näppäimistön riville ja sarakkeille.
merkkinäppäimet = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, '' 7 ',' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; tavuriviPins = {2, 3, 4, 5}; tavu colPins = {6, 7, 8, 9};
Tässä luomme näppäimistön käyttämällä alla olevaa komentoa koodissa.
Näppäimistö kpd = Näppäimistö (makeKeymap (avaimet), rowPins, colPins, RIVIT, COLS);
Määritetään A4- ja A5-Arduino-nastat yhdistettäviksi DS3231: n SCL- ja SDA-nastoihin. Myös nastojen osoittaminen nestekidenäytölle ja servomoottorin alustaminen.
DS3231 rtc (A4, A5); Servo-servotesti; // alusta servo-objekti liitetylle servolle LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Luo LC-objektin. Parametrit: (rs, enable, d4, d5, d6, d7)
Alla olevassa koodissa ilmoitetaan t1 - t6, avain ja taulukko r sekä syöte.
int t1, t2, t3, t4, t5, t6; totuusarvo = tosi; char-avain; int r;
Seuraavassa koodissa asetamme kaikki komponentit alkuun. Kuten tässä koodissa "servo_test.attach (10);" Servo on kiinnitetty 10 : nnen pin Arduino. Määritetään A0, A1 ja A2 lähtöliittimeksi ja alustetaan LCD- ja RTC-moduulit.
void setup () {servo_test.attach (10); // kiinnitä servon signaalitappi arduino rtc: n pin9: n alkuun (); lcd-alku (16,2); servotesti.kirjoita (55); Sarjan alku (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Nyt silmukan toiminta on tärkeä osa ymmärrettävää. Aina kun painiketta painetaan, se nousee korkealle eli tarkoittaa 1, joka voidaan lukea “buttonPress = digitalRead (A3)” . Nyt se menee 'if ' -lausekkeen sisään ja kutsuu 'setFeedingTime' -funktiota. Sitten se vertaa käyttäjän reaaliaikaa ja syötettyä aikaa. Jos ehto on totta, mikä tarkoittaa reaaliaikaa ja syötetty aika on sama, servomoottori pyörii 100 asteen kulmaan ja kuluu 0,4 sekunnin viiveen jälkeen takaisin alkuperäiseen asentoonsa.
void loop () {lcd.setCursor (0,0); int-painikePaina; buttonPress = digitalRead (A3); if (painikePaina == 1) setFeedingTime (); lcd.print ("Aika:"); Merkkijono t = ""; t = rtc.getTimeStr (); t1 = t.charAt (0) -48; t2 = t.charAt (1) -48; t3 = t.charAt (3) -48; t4 = t.charAt (4) -48; t5 = t.charAt (6) -48; t6 = t.charAt (7) -48; lcd.print (rtc.getTimeStr ()); lcd.setCursor (0,1); lcd.print ("Päivämäärä:"); lcd.print (rtc.getDateStr ()); jos (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servotesti.kirjoita (100); // komento kääntää servo määritettyyn kulmaviiveeseen (400); servotesti.kirjoita (55); syöte = väärä; }}
Vuonna void setFeedingTime () toiminnon koodi, kun painetaan painonappia pystymme antamaan lemmikkien ruokinta aikaa, niin meidän täytyy Paina 'D' säästää tuolloin. Kun tallennettu aika vastaa reaaliaikaa, servo alkaa pyöriä.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Aseta syöttöaika"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {avain = kpd.getKey (); char j; if (avain! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (avain); r = avain-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } viive (500); } if (avain == 'D') {avain = 0; tauko; }}}
Automaattisen lemmikkieläinten syöttölaitteen toiminta
Kun koodi on ladattu Arduino Unoon, kellonaika ja päivämäärä näkyvät 16 * 2: n nestekidenäytössä. Kun painat painiketta, se kysyy lemmikin ruokinta-aikaa ja sinun on annettava aika 4 * 4 -matriisinäppäimistöllä. Näyttö näyttää syötetyn ajan, ja kun painat 'D', se säästää aikaa. Kun reaaliaika ja syötetty aika täsmäävät, se kiertää servomoottoria alkuasennosta 55⁰ - 100⁰ ja palaa viiveen jälkeen takaisin alkuasentoonsa. Siksi servomoottori on kytketty Food Container -porttiin, joten kun se liikkuu, portti avautuu ja ruokamäärä putoaa kulhoon tai lautaselle. 0,4 sekunnin kuluttua servomoottori pyörii uudelleen ja sulje portti. Koko prosessi päättyy muutamassa sekunnissa. Näin lemmikkisi saa ruoan automaattisesti antamaasi aikaan.
Muuta aikaa ja astetta ruoan mukaan