آموزش رزبری پایآموزش رزبری پای پیکو Picoپروژه رزبری پای

اتصال سنسور التراسونیک به پیکو (فاصله سنج با Pico)

در آموزش قبلی ما نحوه اتصال نمایشگر Oled به رزبری پای پیکو را به طور کامل توضیح دادیم. در این آموزش ما یک سنسور التراسونیک را به برد رزبری پای پیکو متصل میکنیم و فاصله را اندازی گیری میکنیم. فاصله در نهایت در نمایشگر Oled با استفاده از میکرو پایتون نمایش داده میشود. پیشنهاد میکنم ابتدا آموزش برنامه نویسی رزبری پای پیکو با میکرو پایتون را مشاهده کنید.

توضیحات سنسور التراسونیک HC-SR04

ما باید یه اطلاعات کلی نسبت به سنسور التراسونیک داشته باشیم. ما میدانیم که ارتعاش صدا نمیتواند از طریق جامدات نفوذ کند. بنابراین وقتی یک منبع صدا باعث ایجاد ارتعاش شود ، آن ارتعاش از طریق هوا با سرعت 220 متر در هر ثانیه حرکت میکند. همانطور که گفتیم این ارتعاش ها نمیتوانند از طریق جامدات نفوذ کنند ، یعنی وقتی به یک سطح مثل دیوار برخورد کنند ، با همان سرعت برمیگردند به سمت سنسور ، این تکنیک اکو (ECHO) نامگذاری شده است.

توضیحات سنسور التراسونیک HC-SR04

سنسور التراسونیک HC-SR04 یک سیگنال خروجی متناسب با فاصله بر اساس اکو فراهم می کند. سنسور در اینجا یک لرزش صدا را در محدوده سنسور ایجاد می کند، و بعد از فرستادن یک ارتعاش ، برای بازگشت صدا منتظر می ماند.

نحوه کار سنسور التراسونیک HC-SR04

فرستنده یک موج التراسونیک را در فرکانس 40 هرتز ساطع می کند ، این موج از طریق هوا عبور می کند و هنگامی که یک جسم را حس می کند باز میگردد. امواج برگشتی توسط گیرنده مشاهده می شود. اکنون می دانیم زمان لازم برای بازتاب و بازگشت این موج گرفته شده است و سرعت موج التراسونیک 3400 سانتی متر در ثانیه است. با استفاده از این اطلاعات و فرمول زیر میتوان فاصله را حساب کرد [ فاصله = سرعت موج * زمان ]

مدار راه اندازی سنسور اولتراسونیک با رزبری پای پیکو

برای اتصال سنسور اولتراسونیک به برد Raspberry Pi Pico می توانید از شماتیک مدار زیر استفاده کنید. همانطور که می بینید ، ما از پین VBUS برد پیکو برای تأمین توان 5 ولت به ماژول سنسور اولتراسونیک و برای ماژول صفحه نمایش OLED ، از پین 3.3 ولت برد Pico استفاده کرده ایم. پین trig و پین echo سنسور اولتراسونیک به ترتیب به GPIO3 و GPIO2 متصل هستند. پین SDA و SCL ماژول صفحه نمایش OLED به ترتیب به پایه های GPIO16 و GPIO17 متصل است. پایه gnd سنسور اولتراسونیک و ماژول نمایشگر OLED به پایه gnd برد رزبری پای پیکو متصل است.

مدار راه اندازی سنسور اولتراسونیک با رزبری پای پیکو

سنسور التراسونیک پین رزبری پای پیکو پین نمایشگر OLED
VCC VBUS (PIN: 40)
Echo GPIO2 (PIN: 4)
Trigger GPIO3 (PIN: 5)
GND GND (PIN: 38) GND
3.3v (PIN: 36) VCC
GPIO16 (PIN: 21) SDA
GPIO17 (PIN: 22) SCL

قطعات مورد نیاز

ما برای اتصال سنسور اولتراسونیک به Raspberry Pi Pico به اجزای زیر نیاز داریم

  • رزبری پای پیکو
  • سنسور اولتراسونیک
  • نمایشگر OLED SSD1306
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

برنامه نویسی رزبری پای پیکو برای فاصله سنج

ابتدا فایل کد های پروژه را در انتهای صفحه دانلود کنید.

در داخل main.py ما کتابخانه machine.py و کتابخانه ssd1306.py را داریم. کتابخانه ماشین کتابخانه داخلی MicroPython است که عملکردهای اصلی مانند I2C ، ADC ، SPI و … را دارد. ما از 3 کلاس مهم مانند Pin ، I2C استفاده می کنیم. کتابخانه ssd1306.py برای صفحه نمایش OLED استفاده می شود. ما قبلاً در مورد این کتابخانه در آموزش قبلی خود در مورد چگونگی ارتباط ماژول نمایش OLED با Raspberry Pi Pico بحث کرده ایم. از کتابخانه utime.py برای ایجاد تأخیر در برنامه استفاده می شود.

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import utime

متغیر “trigger” و “echo” به عنوان یک object برای توابع مربوطه استفاده می شود. پین trig پینی است که به GPIO 3 برد پیکو متصل است که با استفاده از pin به عنوان OUTPUT تنظیم می شود و پین ​​اکو با استفاده از pin به عنوان INPUT تنظیم می شود.

trigger = Pin(3, Pin.OUT)
echo = Pin(2, Pin.IN)

از تابع ()ultrasonic می توان برای محاسبه زمان پاسخ پین اکو سنسور اولتراسونیک استفاده کرد. در داخل این تابع، پین trig روی LOW تنظیم شده است. من 2 میکرو ثانیه تأخیر ایجاد کرده ام و پین trig را برای 10 میکرو ثانیه HIGH تنظیم کردم. سپس دوباره آن را LOW کردم. پس از آن ، تفاوت متغیر signalon و signaloff را برای محاسبه زمانی که پین ​​اکو به ترتیب HIGH و LOW شده است را در متغیر timepassed ذخیره کرده ام.

def ultrasonic():
    timepassed=0
    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
    return timepassed

ما در مورد نحوه نمایش متن بر روی صفحه نمایش OLED در آموزشهای قبلی خود بحث کرده ایم. از کد زیر برای راه اندازی اولیه ارتباط I2C و صفحه نمایش OLED استفاده می شود.

WIDTH  = 128                                          # oled display width
HEIGHT = 64                                            # oled display height
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=200000)       # Init I2C using pins GP8 & GP9 (default I2C0 pins)
print("I2C Address      : "+hex(i2c.scan()[0]).upper()) # Display device address
print("I2C Configuration: "+str(i2c))                   # Display I2C config
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)                  # Init oled display

oled.fill (0) برای پاک کردن صفحه نمایش OLED در کد زیر استفاده می شود. سپس ، با استفاده از تابع oled.text () ، مقداری متن را در محل مربوطه نشان می دهیم. این پیامها با استفاده از متد () oled.show روی صفحه نمایش OLED نشان داده می شوند. سپس از utime.sleep (4) برای تأخیر 4 ثانیه استفاده می شود.

oled.fill(0)
# Add some text
oled.text("CIRCUIT DIGEST",5,8)
oled.text("INTERFACING THE",5,30)
oled.text("ULTRASONNIC",28,40)
oled.text("SENSOR",50,50)
# Finally update the oled display so the image & text is displayed
oled.show()
utime.sleep(4)

در حلقه while ، می توانید دریابید که تابع ultrasonic() فراخوانی می شود تا زمان پاسخ را بین پالس trig و پالس echo برگرداند. سپس از متغیر distance_cm برای محاسبه فاصله با استفاده از فرمول فاصله استفاده می شود. تابع round () برای رند کردن از فاصله اندازه گیری شده تا دو رقم اعشار استفاده می شود. سپس فاصله با استفاده از تابع oled.text() بر روی صفحه نمایش OLED نمایش داده می شود.

while True:
    oled.fill(0)
    measured_time = ultrasonic()     
    distance_cm = (measured_time * 0.0343) / 2
    distance_cm = round(distance_cm,2)
    oled.text("ObjectDistance:",0,8)
    oled.text(">> "+str(distance_cm)+" cm",2,25)
    oled.show()
    utime.sleep(1)

فایل های “main.py” و “ssd1306.py” را در Thonny IDE باز کنید. برای شروع ، روی دکمه های “ctrl+shift+s” در صفحه کلید خود کلیک کنید تا فایل “ssd1306.py” در برد Pico ذخیره شود. قبل از ذخیره داده ها ، مطمئن شوید که برد Pico شما به لپ تاپ شما متصل است. وقتی کد را ذخیره می کنید ، یک پنجره مانند زیر باز می شود. ابتدا باید رزبری پای پیکو را انتخاب کنید ، سپس کد را به عنوان “ssd1306.py” ذخیره کنید. این فرآیند را برای فایل “main.py” تکرار کنید. این تکنیک به شما امکان می دهد هر زمان که Pico را روشن می کنید برنامه اجرا شود.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

برنامه نویسی در رزبری پای Pico

موارد موجود در فایل : سورس کامل

3 (4 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

5 نظر

  1. سلام قسمت from ssd1306 import SSD1306_I2Cرا نمی خواند چرا MPY: soft reboot
    Traceback (most recent call last):
    File “”, line 2, in
    ImportError: no module named ‘ssd1306’ این ارور میده

    1. سلام عزیز
      خوشحالم که براتون مفید بوده

  2. درود بر شما

    ممنون از مقاله های آموزشی شما.
    یک مقاله در مورد ثبت داده ها در حافظه پیکو و خواندن آنها از حافظه هم ارائه نمایید عالی خواهد بود

    با سپاس فراوان

    1. سلام عزیز
      سعی میکنیم در مقاله های آینده قرار بدیم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *