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

آنالوگ به دیجیتال ADC در پیکو با میکروپایتون

ما با آموزش دیگری از Raspberry Pi Pico در اینجا هستیم. اگر از مجموعه آموزشی Raspberry Pi Pico ما پیروی می کنید ، در حال حاضر تنظیمات اولیه و نحوه اتصال یک ماژول نمایشگر OLED با رزبری پای پیکو را می دانید. در این آموزش ، از برد Pico برای انجام تبدیل آنالوگ به دیجیتال یا همان ADC استفاده خواهیم کرد. Raspberry Pi Pico دارای چهار کانال 12 بیتی ADC است ، اما یکی از آنها به سنسور دمای داخلی متصل است. ADC های باقی مانده به ترتیب در GPIO26 ، GPIO27 و GPIO28 به ترتیب ADC0 ، ADC1 و ADC2 نام دارند. در تصویر زیر می توانید پین های ADC را که با رنگ قرمز مشخص شده اند مشاهده کنید. پیشنهاد میکنم ابتدا مقاله آنالوگ به دیجیتال چیست را مشاهده کنید.

پین های آنالوگ به دیجیتال ADC در رزبری پای پیکو

مدار راه اندازی ADC در رزبری پای Pico

یک پتانسیومتر در شماتیک مدار زیر به پین ​​های 3.3v ، GPIO28 و Ground برد رزبری پای متصل شده است. پین های SDA و SCL صفحه نمایش OLED به ترتیب به GPIO16 و GPIO17 متصل هستند ، در حالی که پین ​​VCC ماژول OLED به پین ​​3.3 ولت برد Pico متصل است. پایه Ground ماژول صفحه نمایش OLED به پایه GND رزبری پای پیکو متصل است.

مدار راه اندازی ADC در رزبری پای Pico

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

برای انجام تبدیل ADC بر روی Raspberry Pi Pico به اجزای زیر نیاز داریم.

  • تمشک پی پیکو
  • پتانسیومتر (10 کیلو اهم)
  • ماژول نمایش 1.3 اینچی I2C 128×64 OLED
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

کد میکروپایتون برای تبدیل آنالوگ به دیجیتال در رزبری پای پیکو

در Raspberry Pi Pico ، ما سه کانال ADC با وضوح 12 بیت داریم. با این حال ، وقتی برنامه Pico را با MicroPython برنامه ریزی می کنیم ، رزولوشن 16 بیتی دریافت می کنیم. در واقع ، در کتابخانه MicroPython ADC ، آنها وضوح 12 بیتی را به وضوح 16 بیت تبدیل کرده اند ، به همین دلیل ما حداکثر مقدار ADC 65535 (یعنی 2^16) را به جای 4096 (یعنی 2^12) دریافت می کنیم. از آنجا که پین ​​خروجی پتانسیومتر را به GPIO28 یا ADC2 متصل کرده ایم ، از کانال ADC2 استفاده کرده و مقدار حاصله از ADC را به ولتاژی بین 0 ولت و 3.3 ولت تبدیل می کنیم. برای بدست آوردن مقدار ولتاژ ، ضریب تبدیل را در مقدار ADC حاصل ضرب می کنیم.

فایل کامل سورس و … در انتهای صفحه برای دانلود قرار داده شده است. پوشه “T3_ADC_on_Pico” را باز کنید. دو پوشه فرعی با نام “code” و “images” پیدا خواهید کرد. در پوشه کد ، ما دو فایل داریم یعنی “main.py” و “ssd1306.py”. ما قبلاً در مورد “ssd1306.py” در آموزش قبلی خود در مورد نحوه اتصال یک ماژول صفحه نمایش OLED به پیکو بحث کرده ایم. اکنون ، اجازه دهید روی فایل “main.py” زیر تمرکز کنیم.

بیایید برنامه نویسی MicroPython را در Raspberry Pi Pico ببینیم. در فایل “main.py” ، ما کتابخانه “machine.py” و کتابخانه “ssd1306.py” را داریم. کتابخانه ماشین یک کتابخانه داخلی MicroPython است که عملکردهای اصلی مانند I2C ، ADC ، SPI و … را دارد. ما از 3 کلاس مهم مانند Pin ، ADC ، I2C استفاده خواهیم کرد. کتابخانه ssd1306.py برای صفحه نمایش OLED استفاده می شود. از کتابخانه utime.py برای تأخیر زمانی در برنامه استفاده می شود.

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

machine.ADC(28) برای تعریف کانال ADC که GPIO28 است استفاده می شود. متغیر conversion_factor برای محاسبه ولتاژ واقعی با ضرب این مقدار ADC حاصل می شود. سپس I2C (0 ، scl = Pin (17) ، sda = Pin (16) ، freq = 200000) را داریم که برای راه اندازی یک ارتباط I2C استفاده می شود. تابع “SSD1306_I2C()” برای ایجاد object با نام “oled” استفاده می شود که می تواند برای انجام عملیات روی صفحه نمایش OLED استفاده شود.

analog_value = machine.ADC(28)
conversion_factor = 3.3 / (65535)
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)
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)              # Init oled display

در کد زیر ، صفحه نمایش OLED با استفاده از تابع oled.fill(0) پاک می شود. سپس ما با استفاده از تابع oled.text() مقداری متن را با موقعیت مربوطه نمایش می دهیم. تابع ()oled.show این متون را در OLEDdisplay نمایش می دهد.

# Clear the oled display in case it has junk on it.
oled.fill(0)
# Add some text
oled.text("CIRCUIT",5,8)
oled.text("DIGEST",45,18)
oled.text("ADC",28,40)
# Finally update the oled display so the image & text is displayed
oled.show()
utime.sleep(1)

در حلقه while زیر ، ADC را در GPIO28 با استفاده از تابع analog_value.read_u16() می خوانیم و آن را در متغیر reading ذخیره می کنیم. با این حال ، همانطور که قبلاً بحث کردیم ، این مقدار adc دارای وضوح 16 بیت است زیرا تابع read_u16() در MicroPython یک مقدار وضوح 16 بیتی را برمی گرداند. بنابراین ما ضریب تبدیل را در متغیر reading ضرب می کنیم تا این مقدار ADC که 16 بیتی است را به محدوده 0 ولت تا 3.3 ولت تبدیل کنیم. سپس voltageValue توسط oled.text() نمایش داده می شود.

while True:
    oled.fill(0)
    reading = analog_value.read_u16()     
    print("ADC: ",reading)
    utime.sleep(0.2)
    voltageValue = reading* conversion_factor
    oled.text("Voltage:",5,8)
    oled.text(str(voltageValue)+"V",15,25)
    oled.show()
    utime.sleep(1)

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

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

5 (1 نفر)

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

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

محمد رحیمی

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

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

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