- Potřebný materiál
- Kruhový diagram
- 3D model tištěného podavače zvířat
- Modul RTC DS3231
- Kód a vysvětlení
- Práce s automatickým podavačem zvířat
Dnes stavíme automatický podavač domácích mazlíčků založený na Arduinu, který může vašemu domácímu mazlíčku automaticky včas podávat jídlo. Má modul DS3231 RTC (hodiny reálného času), který slouží k nastavení času a data, kdy má být vašemu domácímu mazlíčkovi podáváno jídlo. Nastavením času podle stravovacího plánu vašeho domácího mazlíčka tedy zařízení automaticky spadne nebo naplní misku s jídlem.
V tomto obvodu používáme 16 * 2 LCD k zobrazení času pomocí modulu DS3231 RTC s Arduino UNO. Servomotor se také používá k otáčení nádob k zajištění jídla a maticová klávesnice 4 * 4 k ručnímu nastavení času pro krmení zvířete. Úhel otočení a dobu otevření nádoby můžete nastavit podle množství jídla, které chcete svému domácímu mazlíčku podávat. Množství jídla může také záviset na vašem domácím mazlíčku, ať už je to pes, kočka nebo pták.
Potřebný materiál
- Arduino UNO
- 4 * 4 maticová klávesnice
- 16 * 2 LCD
- Stiskněte tlačítko
- Servomotor
- Rezistor
- Připojení vodičů
- Nepájivá deska
Kruhový diagram
V tomto krmítku pro kočky založeném na Arduinu jsme pro získání času a data použili modul RTC (hodiny v reálném čase). Pomocí maticové klávesnice 4 * 4 jsme ručně nastavili dobu jídla domácího mazlíčka pomocí 16x2 LCD. Servomotor otáčí nádobu a upouští jídlo na čas nastavený uživatelem. Displej LCD slouží k zobrazení data a času. Kompletní práci najdete na videu na konci.
3D model tištěného podavače zvířat
Tento kontejner Arduino Pet Feeder jsme navrhli pomocí 3D tiskárny. Stejný design můžete také vytisknout stažením souborů odtud. Materiál použitý pro tisk tohoto modelu je PLA. Má čtyři části, jak je znázorněno na obrázku níže:
Sestavte čtyři části a připojte servomotor, jak je znázorněno na obrázku níže:
Pokud jste v oblasti 3D tisku nováčkem, je zde úvodní průvodce. Zde si můžete stáhnout soubory STL pro tento podavač zvířat.
Modul RTC DS3231
DS3231 je modul RTC (hodiny reálného času). Používá se k udržení data a času pro většinu projektů elektroniky. Tento modul má vlastní napájecí zdroj knoflíkových článků, pomocí kterého udržuje datum a čas, i když je odpojeno hlavní napájení nebo MCU prošel tvrdým resetem. Jakmile tedy v tomto modulu nastavíme datum a čas, bude to vždy sledovat. V našem okruhu používáme DS3231 ke krmení zvířete podle času, nastaveného majitelem zvířete, jako alarm. Když hodiny dosáhnou nastaveného času, uvedou do chodu servomotor, aby se otevřela brána kontejneru a jídlo kleslo do misky na jídlo pro domácí mazlíčky.
Poznámka: Při prvním použití tohoto modulu musíte nastavit datum a čas. Pro čtení času pomocí Arduina můžete také použít RTC IC DS1307.
Kód a vysvětlení
Na konci je uveden kompletní Arduino kód Automatics Pet Feeder.
Arduino má výchozí knihovny pro používání servomotoru a LCD 16 * 2 s ním. Ale pro použití modulu RTC DS3231 a maticové klávesnice 4 * 4 s Arduino si musíte stáhnout a nainstalovat knihovny. Odkaz na stažení obou knihoven je uveden níže:
- Knihovna modulu DS3231 RTC (hodiny v reálném čase)
- Knihovna 4 * 4 maticových klávesnic
V níže uvedeném kódu definujeme knihovny, „#include
#zahrnout
V níže uvedeném kódu definujeme mapu kláves pro maticovou klávesnici 4 * 4 a přiřazujeme piny Arduino pro řádky a sloupce klávesnice.
char keys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {2, 3, 4, 5}; byte colPins = {6, 7, 8, 9};
Zde vytváříme klávesnici pomocí níže uvedeného příkazu v kódu.
Keyboard kpd = Keypad (makeKeymap (keys), rowPins, colPins, ROWS, COLS);
Přiřazení pinů A4 a A5 Arduino pro připojení k pinům SCL a SDA DS3231. Také přiřazení pinů k LCD a inicializace servomotoru.
DS3231 rtc (A4, A5); Servo servo_test; // inicializuje servo objekt pro připojené servo LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Vytvoří objekt LC. Parametry: (rs, enable, d4, d5, d6, d7)
V níže uvedeném kódu deklarujeme t1 až t6, klíč a pole r a zdroj.
int ti, t2, t3, t4, t5, t6; boolean feed = true; klíč char; int r;
V níže uvedeném kódu nastavujeme všechny komponenty pro začátek. Stejně jako v tomto kódu „servo_test.attach (10);“ Servo je připojen k 10 -tého kolíku Arduino. Definování A0, A1 a A2 jako výstupního kolíku a inicializace modulu LCD a RTC.
void setup () {servo_test.attach (10); // připojte signální kolík serva na pin9 arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, VÝSTUP); pinMode (A1, VÝSTUP); pinMode (A2, VÝSTUP); }
Nyní je důležité pochopit, jak smyčka funguje. Kdykoli je stisknuto tlačítko, jde vysoko, což znamená 1, což lze přečíst pomocí „buttonPress = digitalRead (A3)“ . Nyní jde dovnitř příkazu „if“ a volá funkci „setFeedingTime“ . Poté porovná reálný čas a zadaný čas uživatelem. Pokud je podmínka pravdivá, což znamená, že reálný čas a zadaný čas jsou stejné, pak se servomotor otáčí do a úhlu 100 stupňů a po 0,4 sekundách zpoždění se vrátí do své původní polohy.
void loop () {lcd.setCursor (0,0); tlačítko int buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Čas:"); Řetězec t = ""; t = rtc.getTimeStr (); ti = 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 ("Datum:"); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // příkaz k otočení serva na zadané úhlové zpoždění (400); servo_test.write (55); feed = false; }}
V kódu funkce void setFeedingTime () , po stisknutí tlačítka můžeme zadat čas krmení zvířete, pak musíme stisknout 'D', abychom tento čas uložili. Když se uložený čas shoduje s reálným časem, servo se začne otáčet.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Nastavit čas podávání"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {key = kpd.getKey (); char j; if (key! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (klíč); r = klíč-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } zpoždění (500); } if (key == 'D') {key = 0; přestávka; }}}
Práce s automatickým podavačem zvířat
Po nahrání kódu do Arduino Uno se čas a datum zobrazí na 16 * 2 LCD. Když stisknete tlačítko, zeptá se na čas krmení zvířete a musíte zadat čas pomocí maticové klávesnice 4 * 4. Na displeji se zobrazí zadaný čas a stisknutím tlačítka „D“ se čas uloží. Když se shoduje reálný čas a zadaný čas, otočí servomotor z jeho výchozí polohy 55⁰ na 100⁰ a po zpoždění se vrátí zpět do své původní polohy. Proto je servomotor připojen k bráně kontejneru na potraviny, takže když se pohybuje, brána se otevře a určité množství jídla spadne do misky nebo talíře. Po zpoždění 0,4 sekundy se servomotor znovu roztočí a zavře bránu. Celý proces je dokončen během několika sekund. Takto váš mazlíček získá jídlo automaticky v době, kdy jste vstoupili.
Změňte čas a stupeň podle jídla