ให้อาหารแมวอัตโนมัติโดยใช้ Raspberry pi
เครื่องให้อาหารแมวอัตโนมัติโดยใช้ Board Raspberry pi และ Raspberry pi Camera
เรามักจะไปเที่ยวในช่วงสุดสัปดาห์ แต่เราก็มีสัตว์ตัวเล็กๆ ขนยาวที่ต้องรับผิดชอบอยู่ที่บ้านด้วย ดังนั้น เครื่องป้อนอาหารอัตโนมัติคือคำตอบ!
_1657164433.jpg)
เรามักจะให้อาหารมันเวลาประมาณ 07.00 น. ทุกเช้า และเมื่อเรากลับจากที่ทำงาน เวลา 19.00 น. ของทุกเย็น
แต่ตัวป้อนนี้มีข้อจำกัดบางประการ โดยหลักแล้ว มีเพียง 1 ตัวจับเวลาเท่านั้น คุณสามารถกำหนดช่วงเวลาระหว่างฟีดเท่านั้น ดังนั้นเพื่อให้อาหารได้ทุกๆ 12 ชั่วโมง เราจึงต้องตั้งเวลาไว้ที่ 12 ชั่วโมง เวลา 07.00 น.
ฉันต้องการที่จะสามารถให้อาหารได้ตลอดเวลาที่ฉันเลือก
แผนของฉันคือการใช้พอร์ต GPIO (เอาต์พุตอินพุตวัตถุประสงค์ทั่วไป) เพื่อส่งสัญญาณไปยังตัวป้อน ซึ่งจะ 'กดปุ่ม' และใช้การควบคุมเวลาจากตัวป้อน และให้ฉัน 'โปรแกรม' เวลาโดยนี่คือที่มาของ Raspberry Pi
นอกจากนี้ ฉันยังสามารถถ่ายรูปโดยใช้ PiCamera เมื่อชามเปิดขึ้น และส่งอีเมลถึงตัวเองด้วย แบบนี้ค่อยสบายใจหน่อยนะครับ :)
รวบรวมแผนในการเขียนโค้ด
ส่วนใหญ่เราต้องการ 4 สิ่งที่เกิดขึ้น
- ส่งสัญญาณไปที่พิน GPIO เพื่อเปิดตัวป้อน
- ถ่ายภาพหนึ่งภาพหรือหลายภาพ
- ส่งรูปภาพเหล่านี้ไปให้ใครซักคน
- ตั้งเวลาเพื่อให้เหตุการณ์เหล่านี้เกิดขึ้นในช่วงเวลาหนึ่งของวัน

ก่อนอื่นเราต้องตั้งค่าไคลเอนต์อีเมล คำแนะนำของฉันคือให้คุณสร้างบัญชี Gmail ใหม่ คุณสามารถตั้งชื่อมันว่าเกี่ยวข้องกับ raspberry Pi ของคุณ เนื่องจากคุณสามารถใช้สิ่งนี้กับหลาย ๆ โครงการได้หากต้องการ (แต่ขึ้นอยู่กับคุณ)
import RPi.GPIO as GPIO import time from picamera import PiCamera import datetime import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage from email import encoders |
ไลบรารีเหล่านี้เป็นไลบรารีที่จำเป็นสำหรับพอร์ต GPIO, กล้อง, ไคลเอ็นต์ SMTP (อีเมล) และการเข้ารหัสข้อความ/รูปภาพ เพื่อเพิ่มรูปภาพ รวมทั้ง datetime และเวลา เพื่อให้เราสามารถเพิ่มวันที่และเวลาลงในอีเมลได้
ต่อไปเราจะเริ่มต้นการตั้งค่าอีเมล (ใช้อีเมล/รหัสผ่านของคุณเองที่นี่)
SMTP_SERVER = 'smtp.gmail.com' SMTP_PORT = 587 GMAIL_USERNAME = 'YOUREMAIL@gmail.com' GMAIL_PASSWORD = 'YOURPASSWORD' |
จากนั้นเราเริ่มต้นกล้องและถ่ายภาพ 'แรก' ของเรา
camera = PiCamera() camera.start_preview()
camera.capture('/home/pi/Desktop/FeedCapPre.jpg')
camera.stop_preview()
|
เริ่มต้นพอร์ต GPIO ที่เราต้องการใช้
GPIO.setmode(GPIO.BOARD) GPIO.setup(11,GPIO.OUT) |
GPIO.BOARD' แค่บอกโปรแกรมว่าเรากำลังใช้หมายเลข 'บอร์ด'และคำสั่ง 'GPIO.OUT' จะตั้งค่าพินเป็นเอาต์พุต
ต่อไป เรารอ 1 วินาที (เพื่อบันทึกรูปภาพ) และตั้งค่าหมุดเป็น 'จริง' รอครึ่งวินาทีแล้วจึงทดสอบ จากนั้นเราล้างพอร์ต GPIO เนื่องจากเราใช้งานเสร็จแล้ว
time.sleep(1) GPIO.output(11,True) time.sleep(0.5) GPIO.output(11,False) GPIO.cleanup() |
ตอนนี้ เรารอ 5 วินาที เพื่อให้เวลาแมวเดินไปที่เครื่องให้อาหาร เริ่มกิน ก่อนที่เราจะถ่ายรูป 'หลัง' นอกจากนี้เรายังปิดกล้องเนื่องจากเราใช้มันเสร็จแล้ว
time.sleep(5) camera.start_preview() camera.capture('/home/pi/Desktop/FeedCapPost.jpg') camera.stop_preview() camera.close() |
class Emailer:
def sendmail(self, recipient, subject, content, image1, image2):
#Create Headers
emailData = MIMEMultipart()
emailData['Subject'] = subject
emailData['To'] = recipient
emailData['From'] = GMAIL_USERNAME
#Attach our text data
emailData.attach(MIMEText(content))
#Create our Image Data from the defined image
imageData = MIMEImage(open(image1, 'rb').read(), 'jpg')
imageData.add_header('Content-Disposition', 'attachment; filename="image.jpg"')
emailData.attach(imageData)#Create our Image Data from the defined image
imageData2 = MIMEImage(open(image2, 'rb').read(), 'jpg')
imageData2.add_header('Content-Disposition', 'attachment; filename="image.jpg"')
emailData.attach(imageData2)
#Connect to Gmail Server
session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
session.ehlo()
session.starttls()
session.ehlo()
#Login to Gmail
session.login(GMAIL_USERNAME, GMAIL_PASSWORD)
#Send Email & Exit
session.sendmail(GMAIL_USERNAME, recipient, emailData.as_string())
session.quit
sender = Emailer()
|
sendTo = 'SENDTOEMAIL@gmail.com' emailSubject = "Olly has been fed! - " + time.ctime() emailContent = "Olly fed at: " + time.ctime() image1 = '/home/pi/Desktop/FeedCapPre.jpg' image2 = '/home/pi/Desktop/FeedCapPost.jpg' sender.sendmail(sendTo, emailSubject, emailContent, image1,image2) |
30 19 * * * python /home/pi/FeedOlly.py & |
หากต้องการบันทึกและออก ให้กด Ctrl+X (เพื่อออก) และ Y เพื่อบันทึกการเปลี่ยนแปลง
_____
วิดีโอสร้างแบบเต็มที่นี่:
Part1 : https://youtu.be/JkKmJ7eeQjQ
Part2: https://youtu.be/tp6coaSNY9I
_____
ขอบคุณข้อมูลจาก
Automated cat feeder using a Raspberry Pi and Pi Camera
https://medium.com/@ian.k9.burton/automated-cat-feeder-using-a-raspberry-pi-and-pi-camera-31743f7f05da