Selamlar hayvan dostları, bugün sizlerle Raspberry Pi kiti PicoBricks kullanarak otomatik evcil hayvan besleyici yapacağız. Bu besleyiciyi yapabilmeniz için gerekli 3D baskı dosyalarını ve Python kodlarını yazı içinde paylaştık. Hadi o zaman başlayalım.
Evcil hayvanlarımız, özellikle de kedi ve köpeklerimiz çok sık acıkıyorlar. Zaman zaman mama koymaya üşeniyor olabilirsiniz. Bu çok normal. Ben de sevgili kedim Oslo'nun sürekli mama kabını doldurmaya üşeniyorum :).
İşte bu yüzden hem kendim için hem de sizler için çok faydalı bir proje hazırlamaya karar verdim: raspberry pi cat feeder.
Bu muhteşem robotumuzun özelliklerini sıralamam gerekirse:
- Otomatik timer özelliği sayesinde belirlediğiniz saat aralıklarında mama haznesini otomatik doldurur.
- HC-SR04 (LDR) sayesinde mamanın bittiğini robotumuz algılıyor ve OLED ekranda bir uyarı çıkıyor ve robot bip sesi çıkarıyor.
- Evcil hayvanınızın pleasebo etkisi geliştirebilmesi için mama dökülürken bip sesi çıkarıyor.
Harika özellikler değil mi? Hadi o zaman adım adım nasıl DIY otomatik kedi ve köpek besleyici yapacağımızı öğrenelim.
Wiring Diagram
Components
- PicoBricks Mainboard
- OLED Screen
- LDR
- Buzzer
1. Adım: 3D Yazıcı ile Baskı Alalım
Bu projenin en iyi yanlarından biri 3D baskı imkanı sunması. Bu sayede evde kendi mama haznenizi ücretsiz bir şekilde oluşturabilirsiniz.
Merak etmeyin, sizinle gerekli STL dosyalarını aşağıda paylaştım:
Kodları Raspberry Pi'ımıza Yükleyelim
Aşağıda sizinle paylaşacağım kodları BricksIDE veya Raspberry Pi destekleyen herhangi bir uygulamadan kolayca yükleyebilirsiniz. Eğer nasıl yapacağınızı bilmiyorsanız yazımızı okuyabilirsiniz:
How to Use PicoBricks with Microphyton?
İşte kodlar:
# time_tracking.py
import time
from machine import Pin
from machine import I2C
from picobricks import SSD1306_I2C
from machine import PWM
from math import fabs
import utime
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=200000)
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
pwm_1 = PWM(Pin(21))
pwm_1.freq(50)
buzzer = PWM(Pin(20))
trigger = Pin(15, Pin.OUT)
echo = Pin(14, Pin.IN)
def getDistance():
trigger.low()
utime.sleep_us(2)
trigger.high()
utime.sleep_us(5)
trigger.low()
while echo.value() == 0:
signaloff = utime.ticks_us()
while echo.value() == 1:
signalon = utime.ticks_us()
timepassed = signalon - signaloff
distance = (timepassed * 0.0343) / 2
print("The distance from object is ",distance,"cm")
return distance
def CalculateAngle(angle):
angle = fabs((angle * (6000 / 180)) + 2000)
angle = round(angle)
return angle
# Configure the hardware timer
timer = machine.Timer()
# Define a global variable to store the elapsed time
elapsed_time = 0
# Function to be called by the timer interrupt
def timer_callback(timer):
global elapsed_time
elapsed_time += 1
# Configure the timer to call the callback function every second
timer.init(freq=1, mode=machine.Timer.PERIODIC, callback=timer_callback)
# Main loop
while True:
pwm_1.duty_u16(CalculateAngle(0))
# Print the elapsed time every 5 seconds
oled.text("It'll give food",0,0)
oled.text("in every",0,10)
oled.text("12 hours?",0,20)
oled.show()
distance = getDistance()
if distance < (5):
oled.fill(0)
oled.text("FEEDING TIME",10,30)
oled.show()
else:
oled.fill(0)
oled.text("{}".format("Mama Bitti"), 0, 0)
oled.show()
#buzzer.freq(300)
#buzzer.duty_u16(100)
time.sleep(0.25)
if elapsed_time % 10 == 0:
pwm_1.duty_u16(CalculateAngle(30))
time.sleep((5))
print(elapsed_time)
time.sleep((1))
oled.fill(0)
# Sleep for a short duration to reduce CPU usage
Veee... işte bu kadaar. Artık mama haznesini doldurabilir ve mutlu kedinizin karnını okşayabilirsiniz.
Sorunuz olursa sormaktan çekinmeyin. Kendinize iyi bakın. :)