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

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

سلام. آموزش جامع آنالوگ به دیجیتال در Raspberry Pi (آموزش رزبری پای #10) را آماده کردیم.

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

در این آموزش، تراشه ADC (تبدیل آنالوگ به دیجیتال) را به Raspberry Pi متصل میکنیم.سنسور ها و … کلا اجزای بیرون از کامپیوتر با سیگنال آنالوگ کار میکنند در صورتی که میکروکنترلر ها با سیگنال دیجیتال کار میکنند و ما برای تبدیل اطلاعات آنالوگ به دیجیتال از ADC میکروکنترلر استفاده میکنیم.

خب در ابتدا برای فهمیدن مفهوم ADC یک مثال میزنیم. به پخش کننده های موسیقی جدید دقت کنید. این پخش کننده ها در قسمت تنظیمات ولوم ابتدا و انتها ندارند. یعنی مثل انواع قدیمی آنها دارای پیچه برای تنظیم ولوم نیستند ! و با دکمه + و – صدا را کم و زیاد میکنند. حالا کم کم متوجه موضوع میشوید. این فرآیند تبدیل به روش ADC انجام می شود.

فیلم زیر به شما در درک نحوه عمل این کد و پروژه کمک میکند.

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

جهت کسب اطلاعات بیشتر، مقاله آنالوگ به دیجیتال را بخوانید.

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

ADC0804 و رزبری پای

میکروکنترلر ها معمولا دارای کانال ADC هستند. اما رزبری پای هیچ کانال آنالوگ به دیجیتالی ندارد. بنابراین اگر بخواهیم سنسوری را به آن متصل کنیم، به یک تراشه ADC احتیاج داریم. بنابراین در این آموزش نحوه ارتباط ADC0804 با آردوینو را یاد میگیریم.

ADC0804 چیست؟

ADC0804 تراشه ای است که برای تبدیل سیگنال آنالوگ به داده های دیجیتالی 8 بیتی طراحی شده است. این تراشه یکی از تراشه های محبوب ADC است. این یک واحد تبدیل 8bit است، بنابراین به ما مقادیری بین 0 تا 255 میدهد. به طور کلی این تراشه میتواند حداکثر 5 ولت را اندازه بگیرد و آن را به عددی بین 0 تا 255 تبدیل کند. بنابراین تغییر هر واحد با تغییر 19.5 میلی ولت تغییر میکند.

دیتاشیت پین های ADC0804 :

دیتاشیت پین های ADC0804

حال نکته مهم دیگر اینجاست که ADC0804 با 5 ولت کار می کند و بنابراین خروجی را در سیگنال منطقی 5 ولت فراهم می کند. در خروجی 8 پین (به عنوان 8 بیت)، هر پین +5 ولت خروجی را ارائه می دهد. مشکل اینجا شروع میشود که رزبری پای تحمل 3.3 ولت را دارد بنابراین نمیتواند خروجی ADC را دریافت کند زیرا در این صورت برد Raspberry Pi شما آسیب میبیند.

بنابراین برای کم کردن ولتاژ ما از مدار تقسیم ولتاژ استفاده میکنیم. ما با استفاده از مقاومت، 5 ولت را به دو ولتاژ 2.5 تبدیل میکنیم. بنابراین هر وقت منطق در تراشه 1 شود، 5 ولت ارائه میشود و با تقسیم ولتاژ ، 2.5 ولت به رزبری پای میرسد.

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

با مسائل تئوری آنالوگ به دیجیتال آشنا شدیم، حالا ADC را به صورت عملی در یک پروژه اجرا کنیم. ما در این پروژه یک پتانسیومتر را به تراشه ADC0804 متصل میکنیم و با تغییر پتانسیومتر، مقدار دیجیتال را در شل پایتون مشاهده میکنیم.

توضیحات مدار پروژه ADC

در اینجا ما از رزبری پای 2 Model B با سیستم عامل Raspbian Jessie استفاده می کنیم. در قسمت های قبل، در مورد کلیه نیازهای اولیه سخت افزار و نرم افزار بحث کرده ایم. تصویر زیر شماتیک مدار پروژه آنالوگ به دیجیتال Raspberry Pi را نشان میدهد. (برای مشاهده تصویر در اندازه کامل روی آن کلیک کنید.)

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

توضیحات مدار پروژه ADC

در این مدار میتوانیم دامنه متغیر 0 تا 5 ولت را به دیجیتال تبدیل کنیم. ADC همیشه نویز زیادی دارد، این نویز می تواند تا حد زیادی بر عملکرد تأثیر بگذارد، بنابراین ما از خازن 0.1uF برای کم کردن نویز استفاده می کنیم. بدون استفاده از خازن نوسانات زیادی در خروجی وجود خواهد داشت.

این تراشه با ساعت نوسانگر RC کار میکند. RC یعنی Resistor-Capacitor به معناری مقاومت-خازن. همانطور که در شماتیک مدار نشان داده شده است، C2 و R20 یک ساعت (Clock) را تشکیل می دهند. نکته مهمی که در اینجا باید به خاطر بسپارید این است که خازن C2 را می توان برای مقادیر بالاتر ADC به مقدار کمتری تغییر داد. هرچند با سرعت بالاتر دقت کاهش خواهد یافت. بنابراین اگر برنامه به دقت بالاتری نیاز دارد، خازن را با مقدار بالاتر انتخاب کنید و برای سرعت بیشتر خازن را با مقدار کمتری انتخاب کنید.

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

  1. IC آنالوگ به دیجیتال ADC0804
  2. مقاومت 220 اهم یا 1 کیلو اهم – هفده عدد
  3. پتانسیومتر 10 کیلو اهم
  4. خازن 0.01uF 0 دو عدد
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

توضیحات برنامه نویسی پروژه

وقتی همه چیز را مانند شماتیک مدار متصل کردید، می توانیم Raspberry Pi را روشن کنیم تا برنامه را در پایتون (PYHTON) بنویسیم. کد کامل در انتهای صفحه قرار داده شده است. در اینجا در مورد قسمت های مهم کد صحبت میکنیم.

ما میخواهیم پرونده GPIO را از کتابخانه وارد کنیم. کد زیر باعث میشود بتوانیم پین های GPIO برد رزبری پای را برنامه ریزی کنیم. همچنین مانند قسمت قبلی آموزش، نام GPIO را به IO تغییر میدهیم. و هر بار بخواهیم به پین های GPIO مراجعه کنیم از کلمه IO استفاده میکنیم.

import RPi.GPIO as IO

بعضی اوقات، پین ​​های GPIO که سعی در استفاده از آنها داریم، ممکن است عملکردهای دیگری را انجام دهند. در این حالت، هنگام اجرای برنامه، هشدارهایی دریافت خواهیم کرد. دستور زیر به PI می گوید هشدارها را نادیده گرفته و به برنامه ادامه دهد.

IO.setwarnings(False)

ما می توانیم پین های GPIO رزبری پای یا شماره پین آن یا شماره GPIO آن ها وارد کنیم. به طور مثال پین 35 روی برد Raspberry pi، همان پین GPIO 19 است. بنابراین ما میتوانیم آن را با 19 یا 35 معرفی کنیم.

IO.setmode (IO.BCM)

ما 8 پین را به عنوان پین ورودی تنظیم می کنیم. ما 8 بیت داده ADC توسط این پین ها را تشخیص خواهیم داد.

IO.setup(4,IO.IN)
IO.setup(17,IO.IN)
IO.setup(27,IO.IN)
IO.setup(22,IO.IN)
IO.setup(5,IO.IN)
IO.setup(6,IO.IN)
IO.setup(13,IO.IN)
IO.setup(19,IO.IN)

اگر پین GPIO 19 بالا برود (1 شود)، موارد داخل حلقه IF یک بار اجرا می شوند. اگر پین GPIO 19 بالا نرود، دستورات داخل حلقه IF اجرا نمی شوند.

if(IO.input(19) == True):

از دستور زیر برای ایجاد یک حلقه ی بی نهایت استفاده میشود.

while 1:

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

کد کامل :

import RPi.GPIO as IO        # فراخوانی کتابخانه پین های GPIO
import time                          # فراخوانی کتابخانه تاخیر
IO.setwarnings(False)         # عدم نمایش هشدار ها
x=1
b0 =0                                    # 8 بیت
b1 =0
b2 =0
b3 =0
b4 =0
b5 =0
b6 =0
b7 =0
IO.setmode (IO.BCM)           
IO.setup(4,IO.IN)                    # معرفی پین ها به عنوان ورودی
IO.setup(17,IO.IN)
IO.setup(27,IO.IN)
IO.setup(22,IO.IN)
IO.setup(5,IO.IN)
IO.setup(6,IO.IN)
IO.setup(13,IO.IN)
IO.setup(19,IO.IN)
while 1:                           # ایجاد حلقه ی بی نهایت
    if (IO.input(19) == True):
        time.sleep(0.001)
        if (IO.input(19) == True):
            b7=1                   # اگر پین 19 بالا برورد بیت 7 درست است
    if (IO.input(13) == True):
        time.sleep(0.001)
        if (IO.input(13) == True):
            b6=1                   # اگر پین 13 بالا برورد بیت 6 درست است
    if (IO.input(6) == True):
        time.sleep(0.001)
        if (IO.input(6) == True):
            b5=1                   # اگر پین 6 بالا برورد بیت 5 درست است
    if (IO.input(5) == True):
        time.sleep(0.001)
        if (IO.input(5) == True):
            b4=1                   # اگر پین 5 بالا برورد بیت 4 درست است
    if (IO.input(22) == True):
        time.sleep(0.001)
        if (IO.input(22) == True):
            b3=1                   # اگر پین 22 بالا برورد بیت 3 درست است
    if (IO.input(27) == True):
        time.sleep(0.001)
        if (IO.input(27) == True):
            b2=1                   # اگر پین 27 بالا برورد بیت 2 درست است
    if (IO.input(17) == True):
        time.sleep(0.001)
        if (IO.input(17) == True):
            b1=1                   # اگر پین 17 بالا برورد بیت 1 درست است
    if (IO.input(4) == True):
        time.sleep(0.001)
        if (IO.input(4) == True):
            b0=1                   # اگر پین 4 بالا برورد بیت 0 درست است    
    x = (1*b0)+(2*b1)
    x = x+(4*b2)+(8*b3)
    x = x+(16*b4)+(32*b5)
    x = x+(64*b6)+(128*b7)         # نمایش مقادیر از کم اهمیت به پر اهمیت
    print ( x)                     # نمایش مقدار آنالوگ به دیجیتال
    b0=b1=b2=b3=b4=b5=b6=b7=0      # ریست مقادیر
    time.sleep(0.01)               # صبر 10 میلی ثانیه

فیلم عملکرد و توضیحات کار با پروژه

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

به طور مثال اگر پتانسیومتر را در حد وسط ببریم، ADC0804 در ورودی خود 2.5 ولت را دارد بنابراین در صفحه مقدار 128 را مشاهده میکنیم. و به همین ترتیب برای مقدار آنالوگ +5 ولت، عدد 255 را مشاهده میکنیم.

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

بنابراین ، با تغییر چتانسیومتر ، ولتاژ را از 0 تا + 5 ولت در ورودی ADC0804 تغییر می دهیم. با استفاده از این PI مقادیر را بین 0-255 روی صفحه ظاهر میکند.

قسمت بعد : راه اندازی صفحه کلید لمسی (تاچ پد) با Raspberry Pi 

5 (7 نفر)

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

محمد رحیمی

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

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

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