from machine import Pin, SoftI2C, PWM, SPI
import ssd1306
from hcsr04 import HCSR04
from mfrc522 import MFRC522
import time
# 1. إعداد الشاشة (OLED)
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# 2. إعداد نظام الإطعام (الحساس وموتور الإطعام)
sensor = HCSR04(trigger_pin=12, echo_pin=14)
servo_feed = PWM(Pin(13), freq=50)
# 3. إعداد منطقة النوم (الـ RFID وموتور الباب)
servo_door = PWM(Pin(2), freq=50)
spi = SPI(1, baudrate=1000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))
rdr = MFRC522(spi, cs=Pin(5))
def set_angle(servo, angle):
duty = int(40 + (angle / 180) * 75)
servo.duty(duty)
is_feeding_time = True
while True:
# --- أولاً: فحص نظام الإطعام والمسافة ---
try:
dist = sensor.distance_cm()
except:
dist = 100
if is_feeding_time and dist < 15:
set_angle(servo_feed, 90)
feed_status = "Feeding Active"
else:
set_angle(servo_feed, 0)
feed_status = "Wait: {:.1f}cm".format(dist)
# --- ثانياً: فحص نظام منطقة النوم (RFID والباب) ---
(stat, tag_type) = rdr.request(0x26)
if stat == 0: # لو تم قراءة كارت
door_status = "Access Granted"
set_angle(servo_door, 90) # فتح الباب
else:
door_status = "Door Locked"
set_angle(servo_door, 0) # غلق الباب
# --- ثالثاً: العرض المزدوج على الشاشة ---
oled.fill(0)
oled.text("--- PET SHELTER ---", 0, 0)
oled.text(feed_status, 0, 20)
oled.text("RFID: " + door_status, 0, 40)
oled.show()
time.sleep(0.3)Loading
mfrc522
mfrc522