- Material necesar
- Diagrama circuitului
- Model de hrănitor pentru animale de companie tipărit 3D
- Modulul DS3231 RTC
- Cod și explicație
- Funcționarea alimentatorului automat pentru animale de companie
Astăzi construim un alimentator automat pentru animale de companie bazat pe Arduino, care poate servi automat hrana animalului dvs. de companie în timp util. Are un modul DS3231 RTC (Ceas în timp real), care stabilea ora și data la care animalul de companie ar trebui să primească hrană. Deci, prin setarea timpului în funcție de programul de mâncare al animalului dvs. de companie, dispozitivul aruncă sau umple automat bolul pentru alimente.
În acest circuit, folosim un LCD 16 * 2 pentru a afișa ora folosind modulul DS3231 RTC cu Arduino UNO. De asemenea, un servomotor este utilizat pentru a roti recipientele pentru a furniza hrana și tastatura matricială 4 * 4 pentru a seta manual timpul pentru hrănirea animalului de companie. Puteți seta unghiul de rotație și durata de deschidere a containerului în funcție de cantitatea de mâncare pe care doriți să o serviți animalului dvs. de companie. Cantitatea de hrană poate depinde, de asemenea, de animalul dvs. de companie, indiferent dacă este un câine, o pisică sau o pasăre.
Material necesar
- Arduino UNO
- Tastatură Matrix 4 * 4
- 16 * 2 LCD
- Apasa butonul
- Servo motor
- Rezistor
- Conectarea firelor
- Breadboard
Diagrama circuitului
În acest alimentator pentru pisici bazat pe Arduino, pentru obținerea orei și datei, am folosit modulul RTC (Ceas în timp real). Am folosit tastatura matricială 4 * 4 pentru a seta manual timpul de mâncare al animalului de companie cu ajutorul ecranului LCD 16x2. Servomotorul roteste recipientul si lasa alimentele la timpul stabilit de utilizator. LCD-ul este utilizat pentru afișarea datei și orei. Lucrul complet poate fi găsit în videoclipul prezentat la sfârșit.
Model de hrănitor pentru animale de companie tipărit 3D
Am proiectat acest container Arduino Pet Feeder folosind imprimanta 3D. De asemenea, puteți imprima același design descărcând fișierele de aici. Materialul utilizat pentru tipărirea acestui model este PLA. Are patru părți așa cum se arată în imaginea de mai jos:
Asamblați cele patru părți și conectați servomotorul așa cum se arată în imaginea de mai jos:
Dacă sunteți nou în imprimarea 3D, iată ghidul de pornire. Aici puteți descărca fișierele STL pentru acest alimentator pentru animale de companie.
Modulul DS3231 RTC
DS3231 este un modul RTC (Real Time Clock). Este folosit pentru a menține data și ora pentru majoritatea proiectelor electronice. Acest modul are propria sa sursă de alimentare cu celulă monedă folosind care menține data și ora chiar și atunci când alimentarea principală este scoasă sau MCU a trecut printr-o resetare hard. Deci, odată ce am setat data și ora în acest modul, acesta îl va urmări întotdeauna. În circuitul nostru, folosim DS3231 pentru a hrăni animalul de companie în funcție de ora stabilită de proprietarul animalului de companie, ca o alarmă. Pe măsură ce ceasul ajunge la ora stabilită, acționează servomotorul pentru a deschide poarta containerului și mâncarea cade în vasul pentru hrana animalului de companie.
Notă: Când utilizați acest modul pentru prima dată, trebuie să setați data și ora. De asemenea, puteți utiliza RTC IC DS1307 pentru citirea orei cu Arduino.
Cod și explicație
Codul Arduino complet al hranei pentru animale de companie pentru automatizare este dat la sfârșit.
Arduino are biblioteci implicite pentru utilizarea motorului Servo și LCD 16 * 2 cu acesta. Dar pentru a utiliza modulul DS3231 RTC și tastatura matricială 4 * 4 cu Arduino, trebuie să descărcați și să instalați bibliotecile. Link-ul de descărcare pentru ambele biblioteci este dat mai jos:
- Biblioteca de module DS3231 RTC (Ceas în timp real)
- Biblioteca tastaturii Matrix 4 * 4
În codul de mai jos, definim bibliotecile, „#include
#include
În codul de mai jos, definim harta tastelor pentru tastatura matricială 4 * 4 și atribuim pinii Arduino pentru rândul și coloanele tastaturii.
chei char = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; octet rândPins = {2, 3, 4, 5}; octet colPins = {6, 7, 8, 9};
Aici, creăm tastatura folosind comanda de mai jos din cod.
Tastatura kpd = Tastatura (makeKeymap (taste), rowPins, colPins, ROWS, COLS);
Atribuirea pinilor Arduino A4 și A5 pentru conectarea cu pinii SCL și SDA ai DS3231. De asemenea, atribuirea pinilor pe LCD și inițializarea servomotorului.
DS3231 rtc (A4, A5); Servo servo_test; // inițializați un obiect servo pentru servo-ul conectat LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Creează un obiect LC. Parametri: (rs, enable, d4, d5, d6, d7)
În codul de mai jos, declarăm t1 la t6, cheia și matricea r și fluxul.
int t1, t2, t3, t4, t5, t6; feed boolean = adevărat; cheie char; int r;
În codul de mai jos, configurăm toate componentele pentru început. Ca în acest cod „servo_test.attach (10);” Servo este atașat la 10 - lea pin al Arduino. Definirea A0, A1 și A2 ca Pin de ieșire și inițializarea modulelor LCD și RTC.
void setup () {servo_test.attach (10); // atașați pinul de semnal al servo la pin-ul 9 al arduino rtc.begin (); lcd.inceput (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Acum, modul în care funcționează bucla este partea importantă de înțeles. Ori de câte ori este apăsat butonul, acesta este ridicat, înseamnă 1, care poate fi citit prin „buton Apăsați = digitalRead (A3)” . Acum intră în instrucțiunea „if” și apelează funcția „setFeedingTime” . Apoi compară timpul real și timpul introdus de utilizator. Dacă condiția este adevărată, ceea ce înseamnă că timpul real și timpul introdus sunt aceleași, atunci motorul Servo se rotește la și un unghi de 100 de grade și după 0,4 secunde de întârziere revine la poziția sa inițială.
bucla void () {lcd.setCursor (0,0); buton int Apăsați; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Ora:"); Șirul 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 („Data:”); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // comanda pentru rotirea servo-ului la unghiul de întârziere specificat (400); servo_test.write (55); feed = fals; }}
În codul funcțional setFeedingTime () , după apăsarea butonului, putem introduce timpul de hrănire a animalelor de companie, apoi trebuie să apăsăm „D” pentru a economisi timpul respectiv. Când timpul salvat se potrivește cu timpul real, atunci servo începe să se rotească.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Setați timpul de alimentare"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {cheie = kpd.getKey (); char j; if (cheie! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (cheie); r = cheie-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } întârziere (500); } if (cheie == 'D') {cheie = 0; pauză; }}}
Funcționarea alimentatorului automat pentru animale de companie
După încărcarea codului pe Arduino Uno, ora și data vor fi afișate pe ecranul LCD 16 * 2. Când ați apăsat butonul, acesta cere timpul de hrănire a animalului de companie și trebuie să introduceți ora folosind tastatura matricială 4 * 4. Afișajul va afișa ora introdusă și, în timp ce apăsați pe „D”, economisește timpul. Când timpul real și timpul introdus se potrivesc, acesta rotește servomotorul de la poziția sa inițială 55⁰ la 100⁰ și după o întârziere revine din nou la poziția sa inițială. Prin urmare, servomotorul este conectat la poarta containerului de alimente, astfel încât pe măsură ce se mișcă, poarta se va deschide și o cantitate de mâncare cade în castron sau farfurie. După o întârziere 0,4 secunde Servomotorul se rotește din nou și închide poarta. Întregul proces se finalizează în câteva secunde. Acesta este modul în care animalul dvs. de companie primește mâncarea automat la momentul în care ați introdus.
Schimbați timpul și gradul în funcție de alimente