- วัสดุที่จำเป็น
- แผนภูมิวงจรรวม
- 3D-Printed Pet Feeder Model
- โมดูล DS3231 RTC
- รหัสและคำอธิบาย
- การทำงานของเครื่องป้อนสัตว์เลี้ยงอัตโนมัติ
วันนี้เรากำลังสร้างAutomatic Pet Feederที่ใช้ Arduinoซึ่งสามารถเสิร์ฟอาหารให้กับสัตว์เลี้ยงของคุณได้ทันเวลา มีโมดูล DS3231 RTC (นาฬิกาแบบเรียลไทม์) ซึ่งใช้สำหรับตั้งเวลาและวันที่ที่สัตว์เลี้ยงของคุณควรได้รับอาหาร ดังนั้นด้วยการตั้งค่าเวลาตามตารางการกินของสัตว์เลี้ยงของคุณอุปกรณ์จะลดหรือเติมชามอาหารโดยอัตโนมัติ
ในวงจรนี้เราใช้ LCD 16 * 2 เพื่อแสดงเวลาโดยใช้ DS3231 RTC Module กับ Arduino UNO นอกจากนี้ยังใช้เซอร์โวมอเตอร์เพื่อหมุนภาชนะเพื่อให้อาหารและปุ่มกดเมทริกซ์ 4 * 4 เพื่อตั้งเวลาให้อาหารสัตว์เลี้ยงด้วยตนเอง คุณสามารถกำหนดมุมการหมุนและระยะเวลาการเปิดภาชนะได้ตามปริมาณอาหารที่คุณต้องการเสิร์ฟให้กับสัตว์เลี้ยงของคุณ ปริมาณอาหารอาจขึ้นอยู่กับสัตว์เลี้ยงของคุณไม่ว่าจะเป็นสุนัขแมวหรือนก
วัสดุที่จำเป็น
- Arduino UNO
- ปุ่มกด Matrix 4 * 4
- 16 * 2 LCD
- ปุ่มกด
- เซอร์โวมอเตอร์
- ตัวต้านทาน
- การเชื่อมต่อสายไฟ
- เขียงหั่นขนม
แผนภูมิวงจรรวม
ในตัวป้อนแมวที่ใช้ Arduinoนี้สำหรับการรับเวลาและวันที่เราได้ใช้โมดูล RTC (นาฬิกาเวลาจริง) เราได้ใช้ Matrix Keypad 4 * 4 เพื่อตั้งเวลาการกินของสัตว์เลี้ยงด้วยตนเองด้วยความช่วยเหลือของ 16x2 LCD เซอร์โวมอเตอร์จะหมุนภาชนะและวางอาหารตามเวลาที่ผู้ใช้กำหนด LCD ใช้สำหรับแสดงวันที่และเวลา การทำงานที่สมบูรณ์สามารถพบได้ในวิดีโอที่ระบุในตอนท้าย
3D-Printed Pet Feeder Model
เราได้ออกแบบตู้คอนเทนเนอร์Arduino Pet Feederโดยใช้เครื่องพิมพ์ 3D คุณยังสามารถพิมพ์งานออกแบบเดียวกันได้โดยดาวน์โหลดไฟล์จากที่นี่ วัสดุที่ใช้พิมพ์รุ่นนี้คือ PLA มีสี่ส่วนดังแสดงในภาพด้านล่าง:
ประกอบชิ้นส่วนทั้งสี่และเชื่อมต่อเซอร์โวมอเตอร์ดังแสดงในภาพด้านล่าง:
หากคุณยังใหม่กับการพิมพ์ 3 มิตินี่คือคู่มือเริ่มต้น คุณสามารถดาวน์โหลดไฟล์ STL สำหรับเครื่องให้อาหารสัตว์เลี้ยงนี้ได้ที่นี่
โมดูล DS3231 RTC
DS3231 เป็นโมดูล RTC (นาฬิกาเวลาจริง) ใช้เพื่อรักษาวันที่และเวลาสำหรับโครงการอิเล็กทรอนิกส์ส่วนใหญ่ โมดูลนี้มีแหล่งจ่ายไฟเซลล์แบบเหรียญของตัวเองโดยใช้ซึ่งจะรักษาวันที่และเวลาแม้ว่าจะถอดไฟหลักออกหรือ MCU ผ่านการฮาร์ดรีเซ็ตแล้วก็ตาม ดังนั้นเมื่อเราตั้งวันที่และเวลาในโมดูลนี้ระบบจะติดตามมันอยู่เสมอ ในวงจรของเราเรากำลังใช้ DS3231 เพื่อให้อาหารสัตว์เลี้ยงตามเวลาที่กำหนดโดยเจ้าของสัตว์เลี้ยงเช่นสัญญาณเตือนภัย เมื่อนาฬิกาถึงเวลาที่ตั้งไว้มันจะสั่งงานเซอร์โวมอเตอร์เพื่อเปิดประตูตู้คอนเทนเนอร์และอาหารจะหล่นลงในชามอาหารของสัตว์เลี้ยง
หมายเหตุ:เมื่อใช้โมดูลนี้เป็นครั้งแรกคุณต้องตั้งวันที่และเวลา คุณยังสามารถใช้ RTC IC DS1307 เพื่ออ่านเวลากับ Arduino
รหัสและคำอธิบาย
รหัส Arduino ที่สมบูรณ์ของ Automatics Pet Feeder จะได้รับในตอนท้าย
Arduino มีไลบรารีเริ่มต้นสำหรับการใช้เซอร์โวมอเตอร์และ LCD 16 * 2 ด้วย แต่สำหรับการใช้ DS3231 RTC Module และ 4 * 4 Matrix Keypad กับ Arduino คุณต้องดาวน์โหลดและติดตั้งไลบรารี ลิงค์ดาวน์โหลดสำหรับทั้งสองไลบรารีมีให้ด้านล่าง:
- ไลบรารีโมดูล DS3231 RTC (นาฬิกาแบบเรียลไทม์)
- 4 * 4 Matrix Keypad Library
ในโค้ดด้านล่างนี้เรากำลังกำหนดไลบรารี “ #include
# รวม
ในโค้ดด้านล่างเรากำลังกำหนดคีย์แมปสำหรับแป้นพิมพ์เมทริกซ์ 4 * 4 และกำหนดพิน Arduino สำหรับแถวและคอลัมน์ของปุ่มกด
ถ่านคีย์ = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; ไบต์ rowPins = {2, 3, 4, 5}; ไบต์ colPins = {6, 7, 8, 9};
ที่นี่เรากำลังสร้างปุ่มกดโดยใช้คำสั่งด้านล่างในโค้ด
ปุ่มกด kpd = ปุ่มกด (makeKeymap (คีย์), rowPins, colPins, ROWS, COLS);
การกำหนดพิน Arduino A4 และ A5 เพื่อเชื่อมต่อกับพิน SCL และ SDA ของ DS3231 นอกจากนี้กำหนดพินให้กับ LCD และเริ่มต้นเซอร์โวมอเตอร์
DS3231 rtc (A4, A5); เซอร์โว servo_test; // เริ่มต้นเซอร์โวอ็อบเจ็กต์สำหรับเซอร์โว LiquidCrystal lcd ที่เชื่อมต่อ (A0, A1, A2, 11, 12, 13); // สร้างวัตถุ LC พารามิเตอร์: (rs, enable, d4, d5, d6, d7)
ในโค้ดด้านล่างนี้เรากำลังประกาศ t1 ถึง t6 คีย์และอาร์เรย์ r และฟีด
int t1, t2, t3, t4, t5, t6; ฟีดบูลีน = จริง; ถ่านที่สำคัญ; int r;
ในโค้ดด้านล่างนี้เรากำลังตั้งค่าส่วนประกอบทั้งหมดสำหรับการเริ่มต้น เช่นเดียวกับในรหัสนี้ “ servo_test.attach (10);” Servo ถูกแนบไปกับ 10 THขาของ Arduino การกำหนด A0, A1 และ A2 เป็นขาออกและการเริ่มต้นโมดูล LCD และ RTC
การตั้งค่าเป็นโมฆะ () {servo_test.attach (10); // แนบพินสัญญาณของเซอร์โวเข้ากับพิน 9 ของ arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, เอาท์พุท); PinMode (A1, เอาท์พุท); PinMode (A2, เอาท์พุท); }
ตอนนี้การทำงานของลูปเป็นส่วนสำคัญที่ต้องทำความเข้าใจ เมื่อใดก็ตามที่ปุ่มกดกดมันจะไปหมายถึงสูง 1 ซึ่งสามารถอ่านได้โดย “buttonPress = digitalRead (A3)” ตอนนี้มันเข้าไปในคำสั่ง 'if' และเรียกใช้ฟังก์ชัน 'setFeedingTime' จากนั้นจะเปรียบเทียบเวลาจริงและเวลาที่ผู้ใช้ป้อน หากเงื่อนไขเป็นจริงซึ่งหมายถึงเวลาจริงและเวลาที่ป้อนเหมือนกันเซอร์โวมอเตอร์จะหมุนไปที่และทำมุม 100 องศาและหลังจากหน่วงเวลา 0.4 วินาทีมันจะกลับมาที่ตำแหน่งเริ่มต้น
ห่วงเป็นโมฆะ () {lcd.setCursor (0,0); ปุ่ม int กด; buttonPress = digitalRead (A3); ถ้า (buttonPress == 1) setFeedingTime (); lcd.print ("เวลา:"); สตริง 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 ("วันที่:"); lcd.print (rtc.getDateStr ()); ถ้า (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == จริง) {servo_test.write (100); // คำสั่งหมุนเซอร์โวไปที่ความล่าช้าของมุมที่ระบุ (400); servo_test.write (55); ฟีด = เท็จ; }}
ในโค้ดฟังก์ชัน setFeedingTime () ที่เป็นโมฆะ หลังจากกดปุ่มเราจะสามารถป้อนเวลาให้อาหารสัตว์เลี้ยงได้จากนั้นเราต้องกด 'D' เพื่อบันทึกเวลานั้น เมื่อเวลาที่บันทึกไว้ตรงกับเวลาจริงเซอร์โวจะเริ่มหมุน
เป็นโมฆะ setFeedingTime () {feed = true; int ผม = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("ตั้งเวลาให้อาหาร"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); ในขณะที่ (1) {key = kpd.getKey (); ถ่าน j; ถ้า (คีย์! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (คีย์); r = คีย์ -48; ผม ++; j ++; ถ้า (j == 2) {lcd.print (":"); j ++; } ล่าช้า (500); } ถ้า (คีย์ == 'D') {คีย์ = 0; หยุดพัก; }}}
การทำงานของเครื่องป้อนสัตว์เลี้ยงอัตโนมัติ
หลังจากอัปโหลดรหัสไปยัง Arduino Uno เวลาและวันที่จะแสดงบนจอ LCD 16 * 2 เมื่อคุณกดปุ่มกดจะขอเวลาให้อาหารของสัตว์เลี้ยงและคุณต้องป้อนเวลาโดยใช้แป้นพิมพ์เมทริกซ์ 4 * 4 หน้าจอจะแสดงเวลาที่ป้อนและเมื่อคุณกด 'D' จะช่วยประหยัดเวลา เมื่อเวลาจริงและเวลาที่ป้อนตรงกันมันจะหมุนเซอร์โวมอเตอร์จากตำแหน่งเริ่มต้น55⁰ถึง100⁰และหลังจากการหน่วงเวลาอีกครั้งจะกลับสู่ตำแหน่งเริ่มต้น ดังนั้นเซอร์โวมอเตอร์จึงเชื่อมต่อกับประตูภาชนะบรรจุอาหารดังนั้นเมื่อมันเคลื่อนที่ประตูจะเปิดออกและมีอาหารบางส่วนตกลงในชามหรือจาน หลังจากหน่วงเวลา 0.4 วินาทีเซอร์โวมอเตอร์จะหมุนอีกครั้งและปิดประตู กระบวนการทั้งหมดจะเสร็จสิ้นภายในไม่กี่วินาที นี่คือวิธีที่สัตว์เลี้ยงของคุณได้รับอาหารโดยอัตโนมัติในเวลาที่คุณป้อน
เปลี่ยนเวลาและองศาตามอาหาร