import ssd1306
import framebuf
import time
from machine import Pin, ADC, I2C
from onewire import OneWire
from ds18x20 import DS18X20
import math
import time # اضافه کردن ماژول time
# تنظیمات I2C
i2c = I2C(0, scl=Pin(9), sda=Pin(8)) # تغییر پینها در صورت نیاز
# تنظیم نمایشگر (اندازه: 128x64)
oled = ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
# دادههای باینری تصویر
image_data = bytearray([
0x00, 0x00, 0x00, 0x1f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x3f, 0xff, 0x80, 0x7f, 0xff, 0xfc, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0xfc, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x1f, 0xfc, 0x00, 0x0f, 0xff, 0xfc, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x1f, 0xf8, 0x00, 0x01, 0xff, 0xf8, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf8, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x0f, 0xf0, 0xc0, 0x00, 0x0f, 0xf0, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x03, 0xe7, 0xc6, 0x00, 0xe7, 0xc0, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x1f, 0xfc, 0x26, 0x78, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x3f, 0xf9, 0xe7, 0x7c, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x3f, 0xff, 0xef, 0xfc, 0x03, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xfe, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0x00, 0xfc, 0x6f, 0xff, 0xff, 0xf6, 0x3f, 0x00, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1c, 0x00, 0x3f, 0xef, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x00, 0x0f, 0xdf, 0xff, 0xff, 0xfb, 0xf0, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x1f, 0xff, 0xff, 0xfa, 0xc0, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x43, 0xff, 0xff, 0xc2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x71, 0x80, 0x41, 0xff, 0xff, 0x82, 0x01, 0x8e, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x11, 0xff, 0x00, 0x80, 0xff, 0xff, 0x81, 0x00, 0xff, 0x88, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0xfe, 0x80, 0x00, 0xff, 0xff, 0x01, 0x01, 0x7f, 0x88, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x7f, 0x80, 0xf0, 0x7f, 0xff, 0x07, 0x01, 0xfe, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1c, 0x1f, 0x00, 0x80, 0x7f, 0xff, 0x01, 0x00, 0xf8, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0x80, 0x07, 0x00, 0x3f, 0xfe, 0x00, 0x60, 0x01, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xf0, 0x1f, 0xe0, 0x3f, 0xfe, 0x07, 0xf8, 0x07, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x3f, 0xfe, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x3f, 0xfc, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x3f, 0xfc, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x40, 0x3f, 0xfc, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x40, 0x3f, 0xfc, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfe, 0x60, 0x1f, 0xfc, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfe, 0x60, 0x1f, 0xfc, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfe, 0x40, 0x1f, 0xfc, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x40, 0x1f, 0xfc, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x40, 0x1f, 0xfe, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x3f, 0xff, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x3e, 0x1f, 0x23, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x24, 0x07, 0xf8, 0x23, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x26, 0x3f, 0xff, 0x27, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x10, 0x7f, 0xff, 0xc7, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x10, 0xc3, 0xf0, 0xcf, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x08, 0xc0, 0x00, 0xdf, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x04, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x01, 0xe2, 0x10, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x01, 0xe2, 0x01, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x03, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x03, 0xf8, 0x07, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x03, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0xfe, 0x3f, 0xdf, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00
])
image_logo = bytearray([
0x00, 0x00, 0x00, 0x1f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x3f, 0xff, 0x80, 0x7f, 0xff, 0xfc, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0xfc, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x1f, 0xfc, 0x00, 0x0f, 0xff, 0xfc, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x1f, 0xf8, 0x00, 0x01, 0xff, 0xf8, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf8, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x0f, 0xf0, 0xc0, 0x00, 0x0f, 0xf0, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0x03, 0xe7, 0xc6, 0x00, 0xe7, 0xc0, 0xff, 0xf8, 0x00, 0x00, 0x00,
])
# ایجاد فریمبافر برای تصویر
fb = framebuf.FrameBuffer(image_data, 128, 64, framebuf.MONO_HLSB)
tb = framebuf.FrameBuffer(image_logo, 128, 64, framebuf.MONO_HLSB)
# پاک کردن نمایشگر
oled.fill(0)
# نمایش تصویر
oled.blit(fb, 0, 0)
oled.show()
time.sleep(3)
# پاک کردن نمایشگر
oled.fill(0)
time.sleep(3)
# نمایش تصویر
oled.blit(tb, 0, 0)
oled.show()
time.sleep(3)
# خاموش کردن نمایشگر
oled.fill(0)
oled.show()
#/////////////////////////////////////////////////////////////////////////////////////////////////////
# تنظیم پین برای DS18B20
data_pin = Pin(28) # سنسور دما روی پورت GP26
ow = OneWire(data_pin)
ds = DS18X20(ow)
# تنظیم پینهای سنسور سطح آب
sensor_power = Pin(15, Pin.OUT) # GPIO 15 برای تغذیه سنسور
sensor_pin = ADC(27) # GPIO 27 برای خواندن سنسور سطح آب
# تنظیم پینهای سنسور سوماتیک
somatic_sensor_pin = ADC(26) # GPIO 27 برای سنسور سوماتیک (فرض بر این است که آنالوگ است)
# ثابتها
diameter = 15 / 1000 # قطر استوانه به متر (15 میلیمتر به متر تبدیل میشود)
radius = diameter / 2 # شعاع استوانه به متر
pi = math.pi
# مقدار اولیه پایه تغذیه سنسور را LOW قرار دهید
sensor_power.value(0)
# جستجوی سنسورهای متصل به باس DS18B20
roms = ds.scan()
if not roms:
print("No DS18B20 sensors found. Check connections.")
else:
print("Found DS18B20 devices:", roms)
def read_water_sensor():
sensor_power.value(1) # روشن کردن تغذیه سنسور سطح آب
time.sleep_ms(10) # تأخیر 10 میلیثانیه
value = sensor_pin.read_u16() # خواندن مقدار آنالوگ سنسور سطح آب
sensor_power.value(0) # خاموش کردن تغذیه سنسور
return value
def read_somatic_sensor():
# خواندن مقدار سنسور سوماتیک
value = somatic_sensor_pin.read_u16() # مقدار آنالوگ سنسور سوماتیک
return value
# تبدیل ارتفاع به حجم
def height_to_volume(height):
volume = pi * (radius ** 2) * height # حجم استوانه
return volume
# اعمال نویزگیری و ایزوله کردن مقادیر منفی
def noise_filter(flow):
# اگر فلو منفی باشد آن را نادیده میگیریم
if flow < 0:
flow = 0
# اعمال نویزگیری به کمک میانگینگیری از چند نمونه
return flow
# حلقه اصلی
previous_height = 0
total_volume = 0
time_interval = 1 # زمان به ثانیه
height_samples = [] # لیست نمونهها برای میانگینگیری
sample_count = 10 # تعداد نمونهها برای میانگینگیری (به عنوان مثال 10 نمونه)
def draw_page1():
oled.fill(0) # پاک کردن صفحه
oled.text("Robo Automation", 0, 10) # متن در خط اول
oled.text("Welcome to", 20, 30) # متن در خط دوم
oled.text("Robotics!", 30, 50) # متن در خط سوم
oled.show() # نمایش صفحه
# تابع رسم صفحه 2
def draw_page2():
oled.fill(0) # پاک کردن صفحه
oled.text("Innovation", 10, 10) # متن اصلی
oled.rect(10, 25, 108, 30, 1) # رسم مستطیل
oled.text("Automation", 20, 35) # متن داخل مستطیل
oled.text("is Future!", 20, 50) # متن زیرین
oled.show() # نمایش صفحه
while True:
try:
# پاک کردن نمایشگر
oled.fill(0)
# خواندن و نمایش دما از DS18B20
if roms:
ds.convert_temp()
time.sleep(0.75) # مدت زمان کافی برای خواندن دما
for rom in roms:
temp = ds.read_temp(rom)
print(f"Temperature from {rom}: {temp:.2f} °C")
oled.text(f"Temp: {temp:.2f} C", 0, 0)
# خواندن و نمایش سطح آب
water_level = read_water_sensor()
print(f"Water level: {water_level}")
oled.text(f"Water: {water_level}", 0, 16)
# خواندن و نمایش مقدار ADC از سنسور سوماتیک
somatic_value = read_somatic_sensor()
print(f"Somatic Sensor Value: {somatic_value}")
oled.text(f"Somatic: {somatic_value}", 0, 32)
# بهروزرسانی نمایشگر
oled.show()
time.sleep(1) # تأخیر 1 ثانیه
except Exception as e:
print("Error:", e)
time.sleep(1)