วันอาทิตย์ที่ 16 กันยายน พ.ศ. 2561

โปรเจค งานที่ 15 เครื่องป้อนสัตว์เลี้ยงอัตโนมัติโดยใช้ Arduino

เครื่องป้อนสัตว์เลี้ยงอัตโนมัติโดยใช้ Arduino
 เครื่องป้อนสัตว์เลี้ยงอัตโนมัติโดยใช้ Arduino

ในวงจรนี้เราใช้จอ LCD 16 * 2เพื่อแสดงเวลาโดยใช้โมดูล DS3231 RTC กับ Arduino UNO นอกจากนี้เซอร์โวมอเตอร์ยังใช้เพื่อหมุนภาชนะเพื่อให้อาหารและแป้นพิมพ์เมทริกซ์ขนาด 4 * 4 เพื่อตั้งเวลาสำหรับให้อาหารสัตว์เลี้ยงด้วยตนเอง คุณสามารถกำหนดมุมหมุนและระยะเวลาเปิดภาชนะได้ตามปริมาณอาหารที่คุณต้องการให้บริการแก่สัตว์เลี้ยงของคุณ ปริมาณอาหารอาจขึ้นอยู่กับสัตว์เลี้ยงของคุณไม่ว่าจะเป็นสุนัขแมวหรือนกก็ตาม

จำเป็นต้องใช้วัสดุ

  • Arduino UNO
  • 4 * 4 แป้นพิมพ์ Matrix
  • จอ LCD ขนาด 16 * 2
  • ปุ่มกด
  • เซอร์โวมอเตอร์
  • ตัวต้านทาน
  • สายเชื่อมต่อ
  • เขียงหั่นขนม

แผนภูมิวงจรรวม

ในArduino Cat Feederสำหรับการเดินทางและเวลาเราได้ใช้โมดูล RTC (Real Time Clock) เราได้ใช้แป้นพิมพ์ Matrix 4 * 4 เพื่อตั้งเวลาการกินสัตว์เลี้ยงด้วยตนเองด้วยความช่วยเหลือของจอ LCD 16x2 มอเตอร์เซอร์โวหมุนภาชนะและวางอาหารตามเวลาที่กำหนดโดยผู้ใช้ จอ LCD ใช้แสดงวันที่และเวลา การทำงานที่สมบูรณ์สามารถพบได้ในวิดีโอที่ให้ไว้ตอนท้าย
แผนภาพวงจร Pet Feeder โดยอัตโนมัติโดยใช้ Arduino


เครื่องป้อนสัตว์เลี้ยงอัตโนมัติโดยใช้ฮาร์ดแวร์วงจร Arduino

เครื่องป้อนสัตว์เลี้ยงแบบ 3 มิติ

เราได้ออกแบบภาชนะArduino Pet Feeder นี้โดยใช้เครื่องพิมพ์ 3D นอกจากนี้คุณยังสามารถพิมพ์การออกแบบเดียวกันโดยการดาวน์โหลดไฟล์จากที่นี่ วัสดุที่ใช้ในการพิมพ์แบบนี้คือ PLA มันมีสี่ส่วนดังแสดงในภาพด้านล่าง:
ชิ้นส่วนสำหรับสัตว์เลี้ยงแบบ 3D ที่พิมพ์

ประกอบชิ้นส่วนทั้งสี่ส่วนและเชื่อมต่อเซอร์โวมอเตอร์ดังแสดงในภาพด้านล่าง:
รูปแบบ Pet Feeder แบบ 3D
ถ้าคุณยังใหม่กับการพิมพ์ 3 มิติที่นี่เป็นคู่มือเริ่มต้น คุณสามารถดาวน์โหลดไฟล์ STL สำหรับป้อนสัตว์เลี้ยงที่นี่

โมดูล RTC DS3231

DS3231 เป็นโมดูล RTC (Real Time Clock) ใช้เพื่อรักษาวันที่และเวลาสำหรับโครงการอิเล็กทรอนิกส์ส่วนใหญ่ โมดูลนี้มีแหล่งจ่ายไฟเซลล์เหรียญของตัวเองโดยใช้วันที่และเวลาแม้ว่าจะถอดกระแสไฟหลักหรือ MCU ได้ผ่านการตั้งค่าใหม่แล้วก็ตาม ดังนั้นเมื่อเราตั้งวันที่และเวลาในโมดูลนี้จะติดตามได้เสมอ ในวงจรของเราเราใช้ DS3231 เพื่อเลี้ยงสัตว์เลี้ยงตามระยะเวลาที่กำหนดโดยเจ้าของสัตว์เลี้ยงเช่นการเตือนภัย เมื่อนาฬิกาถึงเวลาที่กำหนดเครื่องจะทำงานมอเตอร์เซอร์โวเพื่อเปิดประตูตู้เก็บอาหารและวางอาหารลงในชามอาหารของสัตว์เลี้ยง
โมดูล RTC DS3231
หมายเหตุ:เมื่อใช้โมดูลนี้เป็นครั้งแรกคุณต้องตั้งวันที่และเวลา นอกจากนี้คุณยังสามารถใช้  RTC IC DS1307 สำหรับการอ่านเวลากับ Arduino

รหัสและคำอธิบาย

รหัส Arduino Codeของผู้เลี้ยงสัตว์เลี้ยงอัตโนมัติจะได้รับเมื่อสิ้นสุด
Arduino มีไลบรารีดีฟอลต์สำหรับใช้ Servo motor และ LCD 16 * 2 พร้อมด้วย แต่สำหรับการใช้ DS3231 RTC Module และ 4 * 4 Matrix Keypad กับ Arduino คุณต้องดาวน์โหลดและติดตั้งไลบรารี ลิงก์ดาวน์โหลดสำหรับทั้งห้องสมุดจะได้รับด้านล่าง:

ในโค้ดด้านล่างเรากำหนดไลบรารี"#include <DS3231.h>"สำหรับโมดูล RTC "#include <Servo.h>"สำหรับเซอร์โวมอเตอร์"#include <LiquidCrystal.h>"สำหรับจอ LCD 16 * 2 และ"#include <Keypad.h>"สำหรับแป้นพิมพ์ Matrix 4 * 4
#include <DS3231.h>
#include <Servo.h>
#include <LiquidCrystal.h>
#include <Keypad.h>

ในโค้ดด้านล่างเรากำลังกำหนดแป้นพิมพ์สำหรับแป้นพิมพ์เมตริก 4 * 4 และกำหนดหมุด Arduino สำหรับแถวและคอลัมน์ของแป้นพิมพ์
คีย์ char [ROWS] [COLS] = {
  { '1', '2', '3', 'A'}
  { '4', '5', '6', 'B'}
  { '7', '8', '9', 'C'}
  { '*', '0', '#', 'D'}
};
ไบต์ rowPins [ROWS] = {2, 3, 4, 5};
ไบต์ colPins [COLS] = {6, 7, 8, 9};

ที่นี่เรากำลังสร้างแป้นพิมพ์โดยใช้คำสั่งด้านล่างในโค้ด
แป้นพิมพ์ kpd = ปุ่มกด (คีย์ (คีย์), rowPins, colPins, ROWS, COLS);

การกำหนดหมุด A4 และ A5 Arduino เพื่อเชื่อมต่อกับหมุด SCL และ SDA ของ DS3231 นอกจากนี้การกำหนดหมุดให้กับ LCD และเริ่มต้นใช้งานมอเตอร์เซอร์โว
DS3231 rtc (A4, A5);
servo servo_test; / / การเริ่มต้นเซอร์โววัตถุสำหรับเซอร์โวที่เชื่อมต่อ
LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // สร้างวัตถุ LC พารามิเตอร์: (rs, enable, d4, d5, d6, d7)
ในโค้ดด้านล่างเราจะประกาศ t1 ถึง t6 คีย์และอาร์เรย์ r [6] และฟีด
int t1, t2, t3, t4, t5, t6;
boolean feed = true;
 คีย์ char;
 int r [6];

ในโค้ดด้านล่างเราจะตั้งค่าส่วนประกอบทั้งหมดสำหรับเริ่มต้น เช่นเดียวกับในรหัสนี้“servo_test.attach (10);” Servo ถูกแนบไปกับ 10 THขาของ Arduino กำหนด A0, A1 และ A2 เป็นขาออกและเริ่มต้นโมดูล LCD และ RTC
การตั้งค่าเป็นโมฆะ ()
 {
  servo_test.attach (10); / / แนบขาสัญญาณของ servo เพื่อ pin9 ของ arduino
  rtc.begin ();
  lcd.begin (16,2);
  servo_test.write (55);
  Serial.begin (9600);
  pinMode (A0, เอาท์พุท);
  pinMode (A1, OUTPUT);
  pinMode (A2, เอาท์พุท);
 }

ตอนนี้ลูปทำงานเป็นส่วนสำคัญที่จะเข้าใจได้อย่างไร เมื่อใดก็ตามที่ปุ่มกดถูกกดก็จะหมายถึงสูง 1 ซึ่งสามารถอ่านได้โดย“buttonPress = digitalRead (A3)” ตอนนี้มันไปภายใน 'ถ้า' คำสั่งและ calles 'setFeedingTime'ฟังก์ชัน จากนั้นจะเปรียบเทียบเวลาจริงและเวลาที่ป้อนโดยผู้ใช้ ถ้าเงื่อนไขเป็นจริงซึ่งหมายถึงเวลาจริงและเวลาที่ป้อนเหมือนกันเซอร์โวมอเตอร์จะหมุนไปที่มุม 100 องศาและหลังจากนั้น 0.4 วินาทีจะเลื่อนกลับไปยังตำแหน่งเริ่มต้น
void loop () {
lcd.setCursor (0,0);
int ปุ่มกด;
buttonPress = digitalRead (A3);

ถ้า (buttonPress == 1)
 setFeedingTime ();
 lcd.print ("Time:");
 สตริง 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 ("วันที่:");
 lcd.print (rtc.getDateStr ());

 if (t1 == r [0] && t2 == r [1] && t3 == r [2] && t4 == r [3] && t5 <1 && t6 <3 && feed == true)
 {
  servo_test.write (100); / / เพื่อหมุนเซอร์โวไปยังมุมที่ระบุ
   ล่าช้า (400);  
  servo_test.write (55);
  ฟีด = false;
 }
 }      

ในsetFeedingTime ()รหัสฟังก์ชันหลังจากกดปุ่มเราสามารถป้อนเวลาให้อาหารสัตว์เลี้ยงแล้วเราจะต้องกด 'D' เพื่อประหยัดเวลาที่เมื่อเวลาที่บันทึกไว้ตรงกับเวลาจริง servo จะเริ่มหมุน
void setFeedingTime ()
{
  feed = true;
   int i = 0;

  lcd.clear ();
  lcd.setCursor (0,0);
  lcd.print ("ตั้งเวลาให้อาหาร");
  lcd.clear ();
  lcd.print ( "HH: MM");
  lcd.setCursor (0,1);
  ในขณะที่ (1) {
    key = kpd.getKey ();
    char j;

  ถ้า (คีย์! = NO_KEY) {
    lcd.setCursor (ญ, 1);
    lcd.print (คีย์);
    r [i] = คีย์ -48;
    i ++;
    J ++;

    ถ้า (j == 2)
    {
      lcd.print ( ":"); J ++;
    }
    ล่าช้า (500);
  }

  if (key == 'D')
  {= สำคัญ 0; ทำลาย; }
  }
}

การทำงานของเครื่องป้อนสัตว์เลี้ยงอัตโนมัติ

เครื่องป้อนสัตว์เลี้ยงอัตโนมัติโดยใช้ Arduino ในการทำงาน
หลังจากอัปโหลดรหัสไปที่ Arduino Uno วันที่และเวลาจะปรากฏบนจอ LCD 16 * 2 เมื่อคุณกดปุ่มกดจะถามเวลาให้อาหารสัตว์เลี้ยงและคุณต้องป้อนเวลาโดยใช้แป้นพิมพ์เมทริกซ์ 4 * 4 จอแสดงผลจะแสดงเวลาที่ป้อนและเมื่อคุณกด 'D' จะเป็นการประหยัดเวลา เมื่อเวลาจริงและเวลาที่ป้อนเข้าตรงจะหมุนเซอร์โวมอเตอร์จากตำแหน่งเริ่มต้น55⁰ถึง100⁰และหลังจากที่หน่วงเวลากลับสู่ตำแหน่งเริ่มต้นอีกครั้ง ดังนั้นมอเตอร์เซอร์โวจะเชื่อมต่อกับประตูตู้อาหารดังนั้นในขณะที่ประตูเคลื่อนที่ประตูจะเปิดขึ้นและอาหารบางส่วนตกลงไปในชามหรือจาน หลังจากล่าช้า 0.4 วินาทีมอเตอร์ Servo หมุนอีกครั้งและปิดประตู ขั้นตอนทั้งหมดเสร็จสิ้นภายในไม่กี่วินาที นี่เป็นวิธีที่สัตว์เลี้ยงของคุณได้รับอาหารโดยอัตโนมัติในเวลาที่คุณป้อน

เปลี่ยนเวลาและองศาตามอาหาร
รหัส
#include <DS3231.h> 
#include <Servo.h> 
#include <LiquidCrystal.h> 
#include <Keypad.h>
const byte ROWS = 4; // สี่แถว
const byte COLS = 4; // สามคอลัมน์
// กำหนด Keymap
คีย์ char [ROWS] [COLS] = {
  { '1', '2', '3', 'A'}
  { '4', '5', '6', 'B'}
  { '7', '8', '9', 'C'}
  { '*', '0', '#', 'D'}
};
// เชื่อมต่อแป้นพิมพ์ ROW0, ROW1, ROW2 และ ROW3 กับหมุด Arduino เหล่านี้
ไบต์ rowPins [ROWS] = {2, 3, 4, 5};
// เชื่อมต่อแป้นพิมพ์ COL0, COL1 และ COL2 กับหมุด Arduino เหล่านี้
ไบต์ colPins [COLS] = {6, 7, 8, 9};
// สร้างคีย์แพดคีย์
  แพ็ด kpd = คีย์แพ็ด (makeKeymap (คีย์), rowPins, colPins, ROWS, COLS);

DS3231 rtc (A4, A5); 
servo servo_test; // เริ่มต้นเซอร์โวเซอร์สำหรับเซอร์โว   
LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // สร้างวัตถุ LC พารามิเตอร์: (rs, enable, d4, d5, d6, d7)
 // int angle = 0;    
/ / int potentio = A0; / / การเริ่มต้นขา A0analog สำหรับ Potentiometer 
 int t1, t2, t3, t4, t5, t6;

boolean feed = true; // เงื่อนไขการแจ้งเตือน
 คีย์ char; 
 int r [6]; 

 การตั้งค่าเป็นโมฆะ ()  
 {  
  servo_test.attach (10); / / แนบขาสัญญาณของ servo เพื่อ pin9 ของ arduino 
  rtc.begin (); 
  lcd.begin (16,2); 
  servo_test.write (55); 
  Serial.begin (9600); 
  pinMode (A0, เอาท์พุท); 
  pinMode (A1, OUTPUT); 
  pinMode (A2, เอาท์พุท); 
 
 }  

 void loop ()  
 { 
lcd.setCursor (0,0); 
int ปุ่มกด; 
buttonPress = digitalRead (A3);
ถ้า (buttonPress == 1) 
 setFeedingTime ();
//Serial.println(buttonPress);
 lcd.print ("Time:"); 
 สตริง 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 ("วันที่:"); 
 lcd.print (rtc.getDateStr ()); 

 if (t1 == r [0] && t2 == r [1] && t3 == r [2] && t4 == r [3] && t5 <1 && t6 <3 && feed == true) 
 {  
  servo_test. เขียน (100); / / คำสั่งเพื่อหมุนเซอร์โวไป
   ล่าช้ามุมที่กำหนด  (400);   
  servo_test.write (55); 
  ฟีด = false; 
 }  
 }       
void setFeedingTime () 

  feed = true; 
   int i = 0;
  lcd.clear (); 
  lcd.setCursor (0,0); 
  lcd.print ("ตั้งเวลาให้อาหาร"); 
  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 (คีย์); 
   
    r [i] = คีย์ -48; 
    i ++; 
    J ++;
    if (j == 2) 
    { 
      lcd.print (":"); J ++; 
    } 
    ล่าช้า (500); 
  }
  if (key == 'D') 
  {key = 0; ทำลาย; 
  } 
}
วีดีโอ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

งานครั้งที่ 5 ในสถานที่ฝึกงานของ นศ ใช้ระบบควบคุณภาพอย่างไร

มาตรฐาน ISO 9001 ISO 9001 เป็นมาตรฐานสากลที่องค์กรธุรกิจทั่วโลกให้ความสำคัญ เพื่อความเป็นเลิศทางด้านคุณภาพ และความมีประสิทธิภาพของการด...