- Vật liệu cần thiết
- Sơ đồ mạch
- Mô hình khay nạp vật nuôi in 3D
- Mô-đun RTC DS3231
- Mã và giải thích
- Hoạt động của khay nạp vật nuôi tự động
Hôm nay, chúng tôi đang xây dựng một Máy cấp liệu tự động dựa trên Arduino có thể tự động cung cấp thức ăn cho thú cưng của bạn kịp thời. Nó có Mô-đun DS3231 RTC (Đồng hồ thời gian thực), được sử dụng để đặt thời gian và ngày mà thú cưng của bạn sẽ được cho ăn. Vì vậy, bằng cách thiết lập thời gian theo lịch trình ăn uống của thú cưng, thiết bị sẽ tự động thả hoặc đổ đầy bát thức ăn.
Trong mạch này, chúng tôi đang sử dụng màn hình LCD 16 * 2 để hiển thị thời gian bằng cách sử dụng Mô-đun RTC DS3231 với Arduino UNO. Ngoài ra, một động cơ servo được sử dụng để xoay hộp chứa để cung cấp thức ăn và bàn phím ma trận 4 * 4 để cài đặt thủ công thời gian cho vật nuôi ăn. Bạn có thể đặt góc quay và thời gian mở hộp tùy theo số lượng thức ăn bạn muốn phục vụ cho thú cưng của mình. Số lượng thức ăn cũng có thể phụ thuộc vào vật nuôi của bạn cho dù đó là chó, mèo hay chim.
Vật liệu cần thiết
- Arduino UNO
- Bàn phím ma trận 4 * 4
- 16 * 2 LCD
- Nút ấn
- Động cơ Servo
- Điện trở
- Kết nối dây
- Breadboard
Sơ đồ mạch
Trong Bộ cấp dữ liệu cho mèo dựa trên Arduino này, để lấy Thời gian và Ngày tháng, chúng tôi đã sử dụng Mô-đun RTC (Đồng hồ thời gian thực). Chúng tôi đã sử dụng Bàn phím Ma trận 4 * 4 để đặt thời gian ăn của Thú cưng theo cách thủ công với sự trợ giúp của màn hình LCD 16x2. Động cơ Servo quay hộp đựng và thả thực phẩm vào thời gian người dùng cài đặt. Màn hình LCD được sử dụng để hiển thị Ngày và Giờ. Hoàn thành công việc có thể được tìm thấy trong Video được cung cấp ở cuối.
Mô hình khay nạp vật nuôi in 3D
Chúng tôi đã thiết kế bộ chứa Arduino Pet Feeder này bằng cách sử dụng máy in 3D. Bạn cũng có thể in thiết kế tương tự bằng cách tải xuống các tệp từ đây. Vật liệu được sử dụng để in mô hình này là PLA. Nó có bốn phần như được hiển thị trong hình ảnh bên dưới:
Lắp ráp bốn phần và kết nối Động cơ Servo như trong hình dưới đây:
Nếu bạn chưa quen với in 3D, đây là hướng dẫn bắt đầu. Bạn có thể tải xuống các tệp STL cho máy nuôi thú cưng này tại đây.
Mô-đun RTC DS3231
DS3231 là một mô-đun RTC (Đồng hồ thời gian thực). Nó được sử dụng để duy trì ngày và giờ cho hầu hết các dự án Điện tử. Mô-đun này có nguồn điện di động đồng xu của riêng nó, sử dụng nó để duy trì ngày và giờ ngay cả khi nguồn điện chính bị ngắt hoặc MCU đã trải qua quá trình khôi phục cài đặt gốc. Vì vậy, một khi chúng tôi đặt ngày và giờ trong mô-đun này, nó sẽ luôn theo dõi. Trong mạch của chúng tôi, chúng tôi đang sử dụng DS3231 để cho vật nuôi ăn theo thời gian, do chủ sở hữu của vật nuôi thiết lập, giống như một báo động. Khi đồng hồ đạt đến thời gian đã đặt, nó vận hành mô tơ servo để mở cổng hộp đựng và thức ăn rơi vào bát thức ăn của Thú cưng.
Lưu ý: Khi sử dụng mô-đun này lần đầu tiên, bạn phải đặt ngày và giờ. Bạn cũng có thể sử dụng IC RTC DS1307 để đọc thời gian với Arduino.
Mã và giải thích
Mã Arduino hoàn chỉnh của Automatics Pet Feeder được đưa ra ở cuối.
Arduino có các thư viện mặc định để sử dụng động cơ Servo và màn hình LCD 16 * 2 với nó. Nhưng để sử dụng Mô-đun RTC DS3231 và Bàn phím ma trận 4 * 4 với Arduino, bạn phải tải xuống và cài đặt các thư viện. Liên kết tải xuống cho cả hai thư viện được cung cấp dưới đây:
- Thư viện mô-đun DS3231 RTC (Đồng hồ thời gian thực)
- Thư viện bàn phím ma trận 4 * 4
Trong đoạn mã dưới đây, chúng tôi đang xác định các thư viện, “#include
#include
Trong đoạn mã dưới đây, chúng tôi đang xác định sơ đồ bàn phím cho bàn phím ma trận 4 * 4 và gán các chân Arduino cho Hàng và Cột của bàn phím.
các phím char = {{'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};
Ở đây, chúng tôi đang tạo bàn phím bằng cách sử dụng lệnh bên dưới trong mã.
Keypad kpd = Bàn phím (makeKeymap (phím), rowPins, colPins, ROWS, COLS);
Gán các chân Arduino A4 và A5 để kết nối với các chân SCL và SDA của DS3231. Ngoài ra, gán các chân cho LCD và khởi tạo động cơ Servo.
DS3231 rtc (A4, A5); Servo servo_test; // khởi tạo đối tượng servo cho lcd LiquidCrystal servo được kết nối (A0, A1, A2, 11, 12, 13); // Tạo một đối tượng LC. Các thông số: (rs, enable, d4, d5, d6, d7)
Trong đoạn mã dưới đây, chúng tôi đang khai báo t1 đến t6, khóa và mảng r và nguồn cấp dữ liệu.
int t1, t2, t3, t4, t5, t6; nguồn cấp dữ liệu boolean = true; phím char; int r;
Trong đoạn mã dưới đây, chúng tôi đang thiết lập tất cả các thành phần để bắt đầu. Giống như trong đoạn mã này “servo_test.attach (10);” Servo được gắn vào chân thứ 10 của Arduino. Xác định A0, A1 và A2 làm Chân đầu ra và khởi tạo mô-đun LCD và RTC.
void setup () {servo_test.attach (10); // gắn chân tín hiệu của servo vào chân9 của arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Bây giờ, vòng lặp hoạt động như thế nào là phần quan trọng cần hiểu. Bất cứ khi nào nút Nhấn được nhấn, nó sẽ lên cao có nghĩa là 1, có thể đọc được bằng “buttonPress = digitalRead (A3)” . Bây giờ nó đi vào bên trong câu lệnh 'if' và gọi hàm 'setFeedingTime' . Sau đó, nó so sánh thời gian thực và thời gian được nhập bởi người dùng. Nếu điều kiện là đúng, nghĩa là thời gian thực và thời gian đã nhập là như nhau, thì động cơ Servo sẽ quay tới và góc 100 độ và sau 0,4 giây chậm trễ, nó sẽ quay trở lại vị trí ban đầu.
void loop () {lcd.setCursor (0,0); int buttonPress; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Thời gian:"); Chuỗi 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 ("Ngày:"); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // lệnh xoay servo đến độ trễ góc xác định (400); servo_test.write (55); feed = false; }}
Trong mã hàm void setFeedingTime () , Sau khi nhấn nút ấn, chúng ta có thể nhập thời gian cho vật nuôi ăn, sau đó chúng ta phải Nhấn 'D' để tiết kiệm thời gian đó. Khi thời gian đã lưu khớp với thời gian thực thì servo bắt đầu quay.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Đặt thời gian cho ăn"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {key = kpd.getKey (); ký tự j; if (key! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (phím); r = phím-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } delay (500); } if (key == 'D') {key = 0; phá vỡ; }}}
Hoạt động của khay nạp vật nuôi tự động
Sau khi tải mã lên Arduino Uno, ngày và giờ sẽ được hiển thị trên màn hình LCD 16 * 2. Khi bạn nhấn nút, nó sẽ yêu cầu thời gian cho thú cưng ăn và bạn phải nhập thời gian bằng Bàn phím ma trận 4 * 4. Màn hình sẽ hiển thị thời gian đã nhập và khi bạn nhấn 'D', nó sẽ tiết kiệm thời gian. Khi thời gian thực và thời gian đã nhập khớp với nhau, nó sẽ quay mô tơ servo từ vị trí ban đầu 55⁰ đến 100⁰ và sau một khoảng thời gian trễ lại quay trở lại vị trí ban đầu. Do đó, động cơ Servo được kết nối với cổng chứa thực phẩm, vì vậy khi nó di chuyển, cổng sẽ mở ra và một số lượng thực phẩm rơi vào bát hoặc đĩa. Sau 0,4 giây động cơ Servo quay trở lại và đóng cổng. Toàn bộ quá trình hoàn thành trong vòng vài giây. Đây là cách thú cưng của bạn tự động lấy thức ăn vào thời gian bạn nhập.
Thay đổi thời gian và mức độ theo thực phẩm