Агуулгын хүснэгт:
- Хангамж
- Алхам 1: Цахилгааны утас
- Алхам 2: Ачаалах үүрээ ашиглах боломжтой болго
- Алхам 3: Хэвийн мэдээллийн сан
- Алхам 4: Ачааллын үүрийг кодлох
- Алхам 5: Усны мэдрэгчийг кодлох
- Алхам 6: Ойролцоох мэдрэгчийг кодлох
- Алхам 7: Stepper Motors -ийг кодлох
- Алхам 8: LCD дэлгэцийг кодлох
- Алхам 9: Төгсгөл
Видео: Гэрийн тэжээвэр амьтдын хоолны автомат хуваарилалт: 9 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:00
Гэрийн тэжээвэр амьтнаа тэжээхэд хэт их цаг алдах мэт санагдаж байсан уу? Амралтаараа явж байхдаа гэрийн тэжээвэр амьтдаа тэжээхээр хэн нэгэн рүү залгах шаардлагатай байсан уу? Би эдгээр асуудлыг хоёуланг нь одоо хэрэгжүүлж буй сургуулийнхаа төслийн тусламжтайгаар шийдвэрлэхийг хичээсэн: Petfeed!
Хангамж
Raspberry Pi 3b
Баарны ачаалах үүр (10кг)
HX711 Ачаалах үүр өсгөгч
Усны түвшний мэдрэгч (https://www.dfrobot.com/product-1493.html)
Хэт авианы ойролцоо мэдрэгч
LCD 16 зүү
2х stepby мотор 28byj-48
2x stepper мотор жолооч ULN2003
Алхам 1: Цахилгааны утас
маш олон кабель энд байна. Холбогч кабелийг гаргаж, бэхлээд эхлээрэй!
Алхам 2: Ачаалах үүрээ ашиглах боломжтой болго
Ачааллын үүрийг ашиглахын тулд бид эхлээд хоёр хавтан дээр бэхлэх хэрэгтэй: доод хавтан, хоолоо жигнэх таваг.
Танд хэрэгтэй эрэг бол тохирох боолттой хос М4 эрэг, тохирох боолттой М5 боолт юм. Би нүх гаргахдаа жижиг өрөм ашигласан.
(зураг:
Алхам 3: Хэвийн мэдээллийн сан
Манай мэдрэгчийн өгөгдлийг мэдээллийн санд хадгалах ёстой. Өгөгдлийн санд холбогдохын тулд python файлуудыг доороос үзнэ үү.
Дараа нь танд тохиргооны файл хэрэгтэй болно:
[connector_python] user = * yourusername * host = 127.0.0.1 #if local port = 3306 password = * yourpassword * database = * yourdb * [application_config] driver = 'SQL Server'
Алхам 4: Ачааллын үүрийг кодлох
RPi. GPIO -г GPIO болгон импортлох hx711 -ээс импортлох хугацааг импортлох HX711 -ийг helpers.stepperFood -аас туслагчдаас StepperFood -ийг импортлох.
Манай бүх номын санг импортлосны дараа (ачаалах үүрийг жолоодохын тулд бид HX711 номын санг ашиглаж байна), бид жинхэнэ кодоо бичиж эхлэх боломжтой.
TARRA_CONSTANT = 80600
GRAM_CONSTANT = 101
Бидний тогтмолуудыг олж мэдэхийн тулд эхлээд TARRA_CONSTANT = 0 ба GRAM_CONSTANT = 1 -ийг тохируулна уу.
Дараа нь юу ч жинлээгүй байхад бидний ачааны үүр ямар утгатай болохыг олж мэдэх хэрэгтэй. Энэ утга TARRA_CONSTANT байх болно.
GRAM_CONSTANT -ийн хувьд жингээ мэддэг объектоо аваад (би спагетти хэрэглэдэг байсан) жинлээд, ачааны эсийн уншилтыг тухайн объектын бодит жинд хуваа. Миний хувьд энэ нь 101 байсан.
LoadCell анги (threading. Thread):
def _init _ (өөрөө, сокет, lcd): урсгал = lcd
энд бид LoadCell ангийг эхлүүлж, тээглүүрүүдийг зурна.
def run (өөрөө):
үзээрэй: while True: self.hx711.reset () # Эхлэхээсээ өмнө HX711 (заавал биш) хэмжүүрүүдийг_авг = нийлбэр (өөрөө.hx711.get_raw_data ()) / 5 жин = дугуй ((хэмжүүрүүд_avg - TARRA_CONSTANT) / GRAM_CONSTANT, 0) хэвлэх ("жин: {0}". Формат (жин)) DataRepository.insert_weight (жин) data_weight = DataRepository.get_data_sensor (3) historyId = data_weight ["SensorsHistory"] db_weight = data_weight ["value"] actionTime = data_weight ["actionTime"] self.socket.emit ('data_weight', {"id": historyId, "Weight": db_weight, "Time": DataRepository.serializeDateTime (actionTime)}) хэвлэх ("zou moeten emitten") writeWeight = "weight:" + str (db_weight) msg = "PETFEED" LCDWrite.message () if int (db_weight [:-2]) <= 100: StepperFood.run () time.sleep (20) in exceptions from e: print ("Жинлэхэд гарсан алдаа" + str (e))
Алхам 5: Усны мэдрэгчийг кодлох
репозиторуудаас цаг импортлох урсгал импортлох. DataRepository нь RPi -аас DataRepository оруулах self, socket): threading. Thread._ init _ (self) self.socket = socket self.vorige_status = 0 def run (self): try: while True: water = self.is_water () хэвлэх (ус) төлөв = ус [" status "] action = water [" action "] DataRepository.insert_water (str (status), action) data_water = DataRepository.get_data_sensor (2) historyId = data_water [" SensorsHistory "] утга = data_water [" value "] if value == "0": value = "te weinig water" else: value = "genoeg water" actionTime = data_water ["actionTime"] self.socket.emit ('data_water', {"id": historyId, "value": утга, "Цаг": DataRepository.serializeDateTime (actionTime), "action": action}) time.sleep (5) ex Exception -ээс бусад тохиолдолд: print (ex) print ('error bij watersensor') def is_water (өөрөө): төлөв = GPIO. оруулах (GPIO_Wate r) хэрэв self.vorige_status == 0 ба status == 1: print ('water gedetecteerd') sensorData = {"status": status, "action": "water gedetecteerd"} self.vorige_status = status status = GPIO.input (GPIO_Water) if self.vorige_status == 1 and status == 1: print ('water aanwezig') sensorData = {"status": status, "action": "water aanwezig"} status = GPIO.input (GPIO_Water) if self.vorige_status == 1 ба status == 0: print ('water weg') sensorData = {"status": status, "action": "water weg"} self.vorige_status = status status = GPIO.input (GPIO_Water) if self.vorige_status == 0 and status == 0: print ('startpositie') status = GPIO.input (GPIO_Water) sensorData = {"status": status, "action": "startpositie"} sensorData буцах
Алхам 6: Ойролцоох мэдрэгчийг кодлох
өгөгдлийн сангаас RPi -аас импортлох GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (худал) GPIO_Trig = 4 GPIO_Echo = 17 GPIO.setup (GPIO_Trig, GPIO. OUT) GPIO.setup, GPIO_Ech. IN) def current_milli_time (): return int (round (time.time () * 1000)) class UltrasonicSensor (threading. Thread): def _init _ (өөрөө, залгуур): threading. Thread._ init _ (өөрөө) өөрөө.сокет = socket def run (self): try: last_reading = 0 interval = 5000 while True: if current_milli_time ()> last_reading + interval: dist = self.distance () print ("Хэмжсэн зай = %.1f см" % дист) DataRepository. insert_proximity (dist) data_prox = DataRepository.get_data_sensor (1) historyId = data_prox ["SensorsHistory"] prox = data_prox ["value"] actionTime = data_prox ["actionTime"] self.socket.emit ('data_proximity', {"id"): historyId, "Ойролцоо байдал": прокс, "Цаг": DataRepository.serializeDateTime (actionTime)}) last_reading = current_milli_time () ex: ex (хэвлэх) (ex) f зай (өөрөө): # Trigger -ийг HIGH GPIO.output (GPIO_Trig, True) болгож тохируулах time.time () # StartTime -ийг GPIO.input (GPIO_Echo) байхад хадгалах == 0: StartTime = time.time () # GPIO.input (GPIO_Echo) == 1: StopTime = time.time () # эхлэх ба ирэх хоёрын хоорондох хугацааны ялгаа
Алхам 7: Stepper Motors -ийг кодлох
GPIO импортлох урсгал GPIO.setmode (GPIO. BCM) GPIO.setwarnings (Худал) control_pins = [12, 16, 20, 21] in pin_ in pin_pin: GPIO.setup (pin, GPIO. OUT) GPIO.output (pin, 0) halfstep_seq =
Энэ кодыг бусад stepper моторт дахин ашиглах боломжтой, зүгээр л хяналтын зүүний дугаарыг засах зүү рүү нь тохируулаад классаа StepperWater болгон өөрчилнө үү.
Алхам 8: LCD дэлгэцийг кодлох
Маш олон код, гэхдээ бид бараг дууссан.
LCD ангиллыг LCD.py файл болгон оруулсан болно
LCD дэлгэц импортлох
E = 26 RS = 25 D0 = 19 D1 = 13 D2 = 24 D3 = 22 D4 = 23 D5 = 8 D6 = 7 D7 = 10 lcd = LCD (E, RS, [D0, D1, D2, D3, D4, D5, D6, D7]) анги LCDWrite: def message (msg): try: print ("try") lcd.init_LCD () lcd.send_instruction (12) lcd.clear_display () lcd.write_message (msg, '1'): хэвлэх ("LCDWrite алдаа")
Алхам 9: Төгсгөл
Эцсийн үр дүн: бид үүнийг хэрхэн зурсан, хэрхэн дууссан.
Зөвлөмж болгож буй:
Одоо Pee байхгүй байна, гэрийн тэжээвэр амьтдын зан авирыг тохируулах төхөөрөмж нь муурны эргэн тойронд хооллохыг зогсооно: 4 алхам
Одоо Pee байхгүй, гэрийн тэжээвэр амьтдын зан авирыг тохируулах төхөөрөмж: муурыг гэрийнхээ эргэн тойронд хооллохыг зогсооно: Миний зулзага надад маш их санаа зовж, тэр миний орон дээр шээх дуртай байсан тул би түүнд хэрэгтэй бүх зүйлийг шалгаж, түүнийг малын эмчид үзүүлэв. Миний бодож чадах бүх зүйлийг засч залруулж, эмчийн үгийг сонссоны дараа тэр зүгээр л муухай ааштай болохыг ойлгосон. Тиймээс
Гэрийн тэжээвэр амьтдын хоол хийх автомат аяга таваг төсөл: 13 алхам
Гэрийн тэжээвэр амьтдын хоол хийх автомат аяга таваг төсөл: Энэхүү зааварчилгаанд хүнсний аягатай хавсаргасан гэрийн тэжээвэр амьтдын автоматжуулагч, тэжээгчийг хэрхэн яаж хийхийг тайлбарлаж, тайлбарлах болно. Бүтээгдэхүүн хэрхэн ажилладаг, ямар харагдаж байгааг харуулсан видеог би энд хавсаргав
Гэрийн тэжээвэр амьтдын хоол тараагч: 3 алхам
Гэрийн тэжээвэр амьтдын хоол тараагч: Mascotas -ийг ашиглаарай! Автомашины машиныг ашиглах нь маш чухал юм
DIY: Lego UV LED гар чийдэн / Гэрийн тэжээвэр амьтдын шээс илрүүлэгч: 3 алхам
DIY: Lego хэт ягаан туяаны LED гар чийдэн / Гэрийн тэжээвэр амьтдын шээс илрүүлэгч: Энэ бол Legos -ээс хэт ягаан туяаны LED гар чийдэн гаргах хялбар (гагнуур хийх шаардлагагүй), хөгжилтэй, хямд арга юм. Энэ нь гэрийн тэжээвэр амьтдын шээс илрүүлэгчийг хоёр дахин нэмэгдүүлдэг (үнийг харьцуулах). Хэрэв та өөрийн гараар Lego Flash хийх гэж мөрөөдөж байсан бол
Гэрийн тэжээвэр амьтдын хоол шидэх (нохой, муур, тахиа, гэх мэт), бөмбөг шидэх гэх мэт автомат катапульт: 4 алхам (зурагтай)
Гэрийн тэжээмэл амьтдын хоол шидэх автомат нохой (нохой, муур, тахиа, гэх мэт), бөмбөг шидэх гэх мэт !: Сайн байна уу, миний анхны зааварчилгаанд тавтай морилно уу! Манай нохой хоолондоо дуртай, тэр бүгдийг хэдхэн секундын дотор идэх болно. Би үүнийг удаашруулах арга замыг бодож олсон бөгөөд дотор нь хоол орсон бөмбөгнөөс эхлээд арын хашаанд хаях хүртэл байсан. Гайхалтай нь тэр