from machine import Pin, I2C, ADC
from utime import sleep
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
import dht
import utime
# إعدادات I2C لشاشة LCD
I2C_ADDR = 0x27
I2C_NUM_ROWS = 2
I2C_NUM_COLS = 16
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
lcd.backlight_on()
# إعداد الدبابيس
TRIGGER_PIN = Pin(3, Pin.OUT)
ECHO_PIN = Pin(4, Pin.IN)
MOTION_PIN = Pin(16, Pin.IN)
buzzer = Pin(15, Pin.OUT)
red_led = Pin(2, Pin.OUT) # LED الأحمر
blue_led = Pin(6, Pin.OUT) # LED الأزرق
ntc_pin = ADC(26) # مستشعر NTC متصل بـ ADC
# إعداد مستشعر DHT22
sensor = dht.DHT22(Pin(5))
def distance():
TRIGGER_PIN.on()
sleep(0.00001)
TRIGGER_PIN.off()
while not ECHO_PIN.value():
pass
pulse_start = utime.ticks_us()
while ECHO_PIN.value():
pass
pulse_end = utime.ticks_us()
pulse_duration = utime.ticks_diff(pulse_end, pulse_start)
distance_cm = pulse_duration / 58.0
return distance_cm
def read_ntc_temperature():
adc_value = ntc_pin.read_u16() # قراءة قيمة ADC (0-65535)
voltage = (adc_value / 65535) * 3.3 # تحويل قيمة ADC إلى فولت
# معادلة تقريبية لتحويل الجهد إلى درجة حرارة بناءً على خصائص مستشعر NTC
# يجب تعديل هذه المعادلة بناءً على البيانات الفنية لمستشعر NTC المستخدم
temperature_celsius = (voltage - 0.5) * 100 # معادلة تحويل افتراضية
return temperature_celsius
while True:
try:
# قراءة درجة الحرارة والرطوبة من مستشعر DHT22
sensor.measure()
dht_temperature = sensor.temperature()
dht_humidity = sensor.humidity()
# عرض قراءات مستشعر DHT22 على شاشة LCD
lcd.clear()
lcd.putstr(f"Temp: {dht_temperature:.1f}C")
lcd.move_to(0, 1)
lcd.putstr(f"Humidity: {dht_humidity:.1f}%")
sleep(5)
# تشغيل الجرس بناءً على قراءات DHT22
if dht_temperature > 30 or dht_humidity > 60: # تعديل الحدود حسب الحاجة
buzzer.value(1) # تشغيل الجرس
else:
buzzer.value(0) # إطفاء الجرس
# قراءة درجة الحرارة من مستشعر NTC
ntc_temperature = read_ntc_temperature()
# عرض درجة الحرارة من NTC على شاشة LCD
lcd.clear()
lcd.putstr(f"NTC Temp: {ntc_temperature:.1f}C")
sleep(5)
# التحكم في LED بناءً على درجة حرارة NTC
if ntc_temperature > 25: # تعديل الحد حسب الحاجة
red_led.value(1) # تشغيل LED الأحمر
blue_led.value(0) # إطفاء LED الأزرق
else:
red_led.value(0) # إطفاء LED الأحمر
blue_led.value(1) # تشغيل LED الأزرق
# قراءة المسافة من مستشعر المسافة
dist = distance()
lcd.clear()
lcd.putstr(f"Distance: {dist:.2f} cm")
sleep(5)
# قراءة حركة الحركة وعرضها على شاشة LCD
lcd.clear()
if MOTION_PIN.value():
lcd.putstr("Motion Detected")
else:
lcd.putstr("No Motion")
sleep(5)
except OSError as e:
lcd.clear()
lcd.putstr('Failed reception')
sleep(5)