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

الکترونیک و رباتیک -> ماژول ها و سنسور ها 1960 3 کاربر آکادمی پارتینه

تبدیل آنالوگ به دیجیتال یک عمل بسیار مهم درسیستم‌های الکترونیکی نهفته به شمار می‌رود. زیرا  خروجی بیشتر سنسورها آنالوگ بوده و برای انتقال به میکروکنترلرها باید به مقادیر باینری تبدیل شوند. بنابراین میکروکنترلرها برای پردازش داده‌های آنالوگ نیاز به مبدل آنالوگ به دیجیتال دارند. برخی از میکروکنترلرها از جمله آردوینو ، MSP430 ، PIC16F877A و... مبدل آنالوگ به دیجیتال داخلی دارند اما برخی دیگر مانند8051 و رزبری پای مبدل داخلی نداشته و باید از مبدل‌های خارجی مانند ADC0804 و ADC0808 در کنار این میکروکنترلرها استفاده شود. در این آموزش قصد داریم نحوه ارتباط ماژول مبدل PCF8591 با رزبری پای را بررسی کنیم. 

مرحله 1 : اتصالات و دیاگرام مداری

مروری بر ویژگی های ماژول مبدل آنالوگ به دیجیتال AD/DA) PCF8591)

ماژول PCF8591 یک مبدل آنالوگ به دیجیتال یا دیجیتال به آنالوگ با رزولوشن 8 بیت است. همچنین دارای یک فوتوسل به منظور سنجش نور و دما است. این ماژول دارای چهار کانال ورودی آنالوگ مبدل ADC و یک کانال خروجی آنالوگ DAC است.  پروتکل ارتباطی ماژول I2C بوده و ولتاژ تغذیه آن 2.5 الی 6 ولت است. همچنین ولتاژ ورودی توسط پتانسیومتر تعبیه‌شده روی ماژول قابل تنظیم است. سه جامپر بر روی ماژول نیز وجود دارد. جامپر J4 مدار دسترسی به ترمیستور و جامپر J5 مدار دسترسی به فوتوسل را در دسترس قرار می دهد. جامپر J6 میزان ورودی ولتاز مدار را با استفاده از پتانسیومتر تنظیم  می‌کند. دو نشانگر (LED  ( D2-D1 شدت ولتاژ خروجی و شدت ولتاژ منبع را نشان می‌دهند. 

دیاگرام مداری 
دیاگرام مداری برای ارتباط ماژول PCF8591 با رزبری پای در تصویر نشان داده شده است. در این مثال مقادیر آنالوگ توسط پین‌های آنالوگ رزبری پای خوانده شده و در ترمینال آن نشان داده می‌شوند. امکان تغییر میزان مقادیر توسط پتانسیومتر 100k وجود دارد. VCC و GND به GPIO2 و1GPIO و SDA و SCL به ترتیب GPIO3 و GPIO5 متصل می شوند. در آخر پتانسیومتر نیز به AIN0  متصل می‌شود.

 همچنین می توانید به جای نشان دادن مقادیر در ترمینال رزبری پای از یک نمایشگر کاراکتری برای نمایش مقادیر ADC استفاده کنید.

مرحله 2 : فعال سازی پروتکل I2C رزبری پای

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

گام اول: در ترمینال دستور زیر را اجرا کنید.

sudo raspi-config

گام دوم: منویی جهت فعال سازی سرویس‌ها باز می‌شود. در قسمت Advanced Options گزینه‌ی هفتم که با نام I2C مشخص شده را انتخاب کنید.

گام سوم: گزینه‌ی Yes را که در هنگام انتخاب I2C رزبری مبنی بر تایید فعال سازی می‌پرسد ،انتخاب کنید.

گام چهارم: در این مرحله رزبری سوالی مبنی بر بار گذاری مجدد ماژول kernel خواهد پرسید، در پاسخ این سوال گزینه‌ی yes را انتخاب کنید.

 گام پنجم: در آخر هم روی گزینه‌ی  Finish کلیک کرده و سیستم را ریبوت کنید.

sodo reboot

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

>ls /dev/*i2c*

پاسخ رزبری پای به دستور بالا باید عبارت زیر باشد.

/dev/i2c-1

پس از فعال‌سازی با تایپ دستور زیر در ترمینال، بسته نرم‌افزاری  i2c-tools را بر روی رزبری نصب کنید.

sudo apt-get install -y i2c-tools

در پروتکل I2C برای برقرار ارتباط رزبری با سایر قطعات جانبی ، باید آدرس هر قطعه را داشته باشیم. با دستور زیر می‌توان به آدرس ماژول متصل به رزبری پای دست پیدا کرد.

sudo i2cdetect –y 1 or sudo i2cdetect –y 0

مرحله 3 : برنامه پایتون برای تبدیل آنالوگ به دیجیتال (ADC)

سورس کد و ویدیو این پروژه در انتهای آموزش قرار داده شده است. 

در مرحله اول ، کتابخانه smbus را برای ارتباطات  I2C و کتابخانه زمان را فراخوانی کنید.

import smbus
import time

در این قسمت متغیرهای مورد نیاز از جمله آدرس I2C ماژول و پین ورودی آنالوگ را تعریف کنید.

address = 0x48
A0 = 0x40

در این مرحله باید یک شی توسط تابع (SMBus(1، از کتابخانه smbus ساخته‌ شود.

bus = smbus.SMBus(1)

در حلقه while ابتدا به IC فرمان اندازه‌گیری مقادیر آنالوگ داده می‌شود. در مرحله دوم مقدار خوانده شده در یک متغیر ذخیره شده و نمایش داده می‌شود.

## while True:
    bus.write_byte(address,A0)
    value = bus.read_byte(address)
    print(value)
    time.sleep(0.1)


در نهیات کد پایتون را در یک پوشه با پسوند py. ذخیره کرده و با وارد کردن دستور زیر در ترمینال رزبری پای آن را اجرا کنید.

python filename.py

قبل از اجرای کد از فعال شدن ارتباط  I2C  و درستی اتصالات سخت‌افزار اطمینان حاصل کنید. در صورت صحیح بودن مراحل طی شده،  مقادیر آنالوگ به صورت تصویری که مشاهده می‌کنید. در ترمینال نمایش داده شوند. با تغییر دادن پتانسیومتر تغییر تدریجی مقادیر را مشاهده خواهید کرد. 

کد :

import smbus
import time
address = 0x48
bus = smbus.SMBus(1)

while True:
    bus.write_byte(address,A0)
    value = bus.read_byte(address)
    print(value)
    time.sleep(0.1)