Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Bu mening uy hayvonlarini oziqlantiruvchi loyiham. Mening ismim Parker, men 11 -sinfda o'qiyman va men ushbu loyihani 2020 yil 11 -noyabrda CCA (Course Culminating Activity) sifatida yaratdim, bu loyihada men sizga Arduino UNO bilan uy hayvonlarini avtomatik oziqlantirishni ko'rsataman. Siz o'zgartirishingiz mumkin bo'lgan vaqtni tanlashingiz mumkin. Oziq -ovqat burgutdan o'tadi va uy hayvonlarini boqadi!
Ta'minotlar
Elektronika:
- Arduino UNO
- L298N - 10 $ - Nema 17 ni boshqaradi
- NEMA 17 - 10 $ - burgutni aylantiradi, shuning uchun oziq -ovqat tarqatiladi
- RTC (DS1307) - 10 $ - Vaqt beradi
- 12V quvvat manbai - 5 $ - hamma narsaga qodir
- Mini Breadboard - qo'shimcha simlar uchun joy
- Jumper simlari - hamma narsani bog'laydi
- Ayol -erkak simlari - hamma narsani bog'laydi
Uskuna:
- 3D bosma filament - 3d printer uchun
- 2 M4 murvat - taglik plitasini joyida ushlab turing
- 4 ta Nema 17 murvat - Nemani ushlab turing
- PVX T 48 mm ichki o'lchami 66 mm tashqi o'lchami - 3 dollar
Asboblar:
- 3D printer
- Matkap
- Lehimlash quroli
1 -qadam: Dizaynga umumiy nuqtai
Uy hayvonlarini oziqlantirishning dizayni juda oddiy. PVX T -ning tepasiga bir bunker kiradi. Keyin PVX T -ning orqa tomonida (rasmda ko'rsatilgandek), unga Nema 17 o'rnatilgan. Keyin Nema 17 yuqoridan ko'rinadigan burg'uni orqasiga suriladi va uni ushlab turish uchun yon tomonga bolt tushadi, shunda u tuynuk deformatsiyalanmaydi!
Shunda burgut ovqatni trubadan chiqarib, idishga solib qo'yadi!
2 -qadam: Kodni ko'rib chiqish
RTC & Stepper -da RTClib.h va Stepper.h deb nomlangan kutubxona mavjud bo'lib, u RTC & Stepper uchun soddalashtirilgan kodni qo'shadi. If iboralari juda oddiy, agar soat va daqiqa aytilgan vaqtga teng bo'lsa, u ovqatni tarqatadigan shishani aylantiradi. Kodning qolgan qismini hatto bir kunlik tajribaga ega bo'lgan kishi uchun ham tushunish juda oson.
3 -qadam: Nema 17 -ni asosiy plastinka va burg'iga ulash
Avval siz tayanch plastinangizni olib, Nema 17 -ga tayanch plastinkadagi oldindan tayyorlangan teshiklar yordamida biriktirmoqchisiz. Buni amalga oshirgandan so'ng, burg'uni Nema -ga orqa teshik yordamida biriktirmoqchisiz. Keyin taglik plitasini burgut bilan ulang va Nema biriktirilgan, keyin M2 murvatlarini har ikki tomonga burab qo'ying.
4 -qadam: L298N va RTC simlarini ulash
Bu qadam sizga L298N va RTC -ni qanday ulash kerakligini aytadi
Biz L298N 8, 9, 10, 11 -pinlardan boshlaymiz
- 8 -pin (oq) IN1 ga
- PIN -kod 9 (binafsha rang) IN2 ga
- 10 -raqamli (pushti) IN3 -ga ulang
- PIN 11 (sariq) - IN4
Keyin biz Nema 17 ni L298N ga ulaymiz
- NEMAda OUT1dan 1gacha
- NEMAda OUT2 dan 2 gacha
- NEMAda OUT3 dan 3 gacha
- NEMAda OUT4 dan 4 gacha
12v va Arduino -ni L298N -ga ulash (12V topilmadi, shuning uchun 9V batareyani quvvat deb tasavvur qiling)
- Volt 12 V gacha
- GND uchun asos
- Non panelida 5V dan 5V gacha
RTC -ni Arduino -ga ulash
- GND dan GNDgacha
- Non panelida 5V dan 5V gacha
- SDA dan A5 gacha
- SCL - A4
Jumper pinlari
Barcha o'tish pimi L298N -da bo'lishi kerak
5 -qadam: Sharhlar bilan kodlash
Yuqoridagi rasmlarda kod aniqroq
// Ism: Parker Frederik
// Loyihaning nomi: Avtomatik oziqlantiruvchi // Sana: 2020 yil 10 -noyabr, seshanba // O'qituvchi: M. Bonisteel // Desc: Uy hayvonlaringizni belgilangan vaqtda boqing!
// Men foydalangan narsalar uchun kutubxonachilar #include #include #include "RTClib.h"
RTC_DS1307 rtc; // RTC nima ishlatishini aytadi
// Bu erda siz ovqatlanish vaqtini belgilaysiz
// Ish vaqti mornFeedTime = 12; int nightFeedTime = 7; // daqiqa m mornFeedTimeM = 29; int nightFeedTimeM = 00; // soniyalar int mornFeedTimeS = 20; int nightFeedTimeS = 00;
char daysOfTheWeek [7] [12] = {"Yakshanba", "Dushanba", "Seshanba", "Wedsneday", "Payshanba", "Juma", "Shanba"}; // Oddiy kunlarni haftaning kunlariga aylantiradi
const int feed = 200; // Bu sizning qadamlaringiz, shuning uchun siz uni necha marta aylantirishni xohlaysiz
StepStepper (yem, 8, 9, 10, 11); // Nema 17 va boshqa qadamlarning pinlari
void setup () {Serial.begin (9600);
while (! Seriyali); // Agar RTC ishlamayotgan bo'lsa, uni ketma -ket ekranda ko'rsatadi, agar (! Rtc.begin ()) {Serial.println ("RTC topilmadi"); vaqt (1); }
// Bu sizga Real vaqt soati ishlayaptimi yoki yo'qligini aytib beradi va agar u (! Rtc.isrunning ()) {Serial.println ("RTC ishlayapti!") Bo'lsa, uni ketma -ket ekranda ko'rsatadi;
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)))); // Bu sizning kompyuteringizga vaqt ajratadi va uni RTCda ishlatadi
// Agar siz kompyuter vaqtining o'rniga belgilangan vaqtga ega bo'lishni xohlasangiz, buni bu erda qilishingiz mumkin //rtc.adjust(DateTime(2020, 10, 29, 8, 28, 0)); // Yil/Oy/Kun/soat/daqiqa/soniya} myStepper.setSpeed (200); // Siz xohlagan tezlik}
void loop () {DateTime now = rtc.now ();
// Bu o'zgarmaydiganni hozirgi vaqtda va hokazo qiladi int hr = now.hour (); int mi = hozir.minute (); int se = hozir.sekund ();
// Belgilangan vaqtda u ovqatni tarqatadi va 5 marta aylanadi, agar ertalabki ovqat uchun bo'lsa.
if (hr == mornFeedTime && mi == mornFeedTimeM && mornFeedTimeS == se) {Serial.println ("Nonushta!"); myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
}
// Belgilangan vaqtda u ovqatni tarqatadi va 5 marta aylanadi, bu tunda ovqatlanish uchun.
if (hr == nightFeedTime && mi == nightFeedTimeM && nightFeedTimeS == se) {Serial.println ("Kechki ovqat!"); myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700);
myStepper.step (-Feed); kechikish (700); }
// Bunda serialda YIL, OY, KUN, HOUR, MINUTE, SECOND ko'rsatiladi
Serial.print (hozir.yil (), DEC); Serial.print ('/'); Serial.print (hozir. Oy (), DEC); Serial.print ('/'); Serial.print (now.day (), DEC); Serial.print ("("); Serial.print (daysOfTheWeek [now.dayOfTheWeek ()])); Serial.print (")"); Serial.print (hozir.soat (), DEC); Serial.print (':'); Serial.print (now.minute (), DEC); Serial.print (':'); Serial.print (hozir.sekund (), DEC); Serial.println (); }
Men RTC uchun ishlatgan veb -sayt, agar RTC yoqilgan yoki o'chirilganligi haqidagi iboralardan boshqa ko'p narsalarni o'chirib tashladim. Men asosan ushbu veb -saytdan RTC dasturini o'rganish uchun foydalanardim
Men Stepper dvigateli uchun foydalangan veb -sayt, bu menga stepperni ishga tushirishni qanday dasturlashni tushunishga yordam berdi, lekin men undan hech narsa saqlamadim. Bu menga uni qanday kodlashni tushunishga yordam berdi
6 -qadam: Muammolar va ularni qanday hal qildim
Menda bir nechta muammolar bor edi
- Menga 12V quvvat manbai kerak edi, menda faqat 9v batareya bor edi, men uni topdim va u tezda hal qilindi.
- L298N ni NEMA 17 bilan ulashda men A va A- da simlar noto'g'ri edi, bu esa uni biroz chayqaltirdi. Men simlarni boshqa tomonga o'zgartirish orqali tuzatdim.
- Kodni soddalashtirishga harakat qildim, chunki if ifodasida myStepper.step (-feed); qayta -qayta tartibsiz ko'rinardi. Shuning uchun men uni qaytadan o'zgartirishim kerak edi.
- Rasmda ko'rinib turganidek, menda noto'g'ri o'lchamdagi taglik plitasi bor edi, shuning uchun men 3D -ni biroz bosib chiqarishga majbur bo'ldim va u juda mos edi!
- Menda muammo bor - bu burgut kichik bo'lgani uchun tiqilib qoladi, shuning uchun uni tuzatishning oddiy usuli - burgutni ozgina kattalashtirish!