آموزش ساخت اسیلوسکوپ با آردوینو و پایتون
محتویات
سلام. ساخت اسیلوسکوپ با آردوینو و پایتون (آموزش کامل پروژه راه اندازی Oscilloscope با Arduino) را آماده کردیم.
ساخت اسیلوسکوپ با Arduino و Python
اسیلوسکوپ یکی از مهمترین ابزار هایی است که شما روی میز کار هر مهندس الکترونیک یا … پیدا خواهید کرد. این وسیله در درجه اول برای مشاهده شکل موج و تعیین سطح ولتاژ ، فرکانس ، نویز و … استفاده میشود. همچنین توسط توسعه دهندگان نرم افزار برای رفع اشکال کد و تکنسین ها از آن برای عیب یابی دستگاه های الکترونیکی هنگام تعمیر استفاده می کنند. اسیلوسکوپ ها می توانند بسیار گران قیمت باشند ، اسیلوسکوپ هایی که اساسی ترین عملکردها را با کمترین دقت انجام می دهند می توانند به عنوان 45 تا 100 دلار قیمت داشته باشند و انواع پیشرفته تر آن بیش از 150 دلار قیمت دارند.
پیشنهاد میکنم مقاله اسیلوسکوپ چیست را مشاهده کنید.
در این پروژه آردوینو با استفاده از برد Arduino Uno (یا هر برد آردوینوی دیگری) و نرم افزاری که با زبان برنامه نویسی پایتون ساخته میشود ما یک اسیلوسکوپ 4 کاناله میسازیم که دارای قابلیت نمایش شکل موج ها ، سطح ولتاژ سیگنال ها است.
نحوه کار پروژه اسیلوسکوپ با آردوینو
ابتدا باید سیگنال را از آنالوگ به دیجیتال تبدیل کرده و سپس داده ها را ترسیم کنیم. برای تبدیل ، ما بر روی ADC (مبدل آنالوگ به دیجیتال) داده ها را اعمال می کنیم. پس از تبدیل ، مقدار ها از طریق UART از Arduino به کامپیوتر ارسال می شود که در آن نرم افزار پلاتر (که توسط پایتون آن را میسازیم)، با ترسیم داده ها در برابر زمان ، جریان ورودی را به شکل موج تبدیل می کند.
قطعات مورد نیاز پروژه
- برد آردوینو Uno (یا هر برد دیگری)
- مقاومت 1 کیلو اهم
- سنسور LDR
نرم افزار های مورد نیاز
- نرم افزار آردوینو (دانلود آردوینو)
- نرم افزار پایتون
- کتابخانه های پایتون: Pyserial ، Matplotlib ، Drawnow
توضیحات مدار پروژه
شماتیک کامل در فایل دانلود قرار داده شده اس. برای ساخت مدار اسیلوسکوپ با آردوینو تنها کاری که باید انجام دهیم این است که سیگنال را برای بررسی به پین آنالوگ مشخص شده در آردوینو متصل کنیم. ما برای تست از LDR در یک تقسیم ولتاژ ساده برای تولید سیگنال مورد بررسی استفاده کردیم. یعنیه شکل موج تولید شده، سطح ولتاژ را بر اساس شدت نور اطراف LDR توصیف می کند.
توضیحات کد پروژه Oscilloscope
این پروژه به دو بخش تقسیم میشود. یک بخش ساخت نرم افزار با پایتون و یک بخش نوشتن کد آردوینو.
توضیحات کد پایتون پروژه
کد کامل پایتون در فایل دانلودی قرار داده شده است. ما از سه کتابخانه Drawnow ، Matplotlib و Pyserial استفاده خواهیم کر. Pyserial به ما امکان ایجاد اسکریپت پایتون را می دهد که بتواند از طریق پورت سریال ارتباط برقرار کند ، Matplotlib به ما امکان تولید پلات ها از داده های دریافت شده از طریق پورت سریال را می دهد و Drawnow ابزاری را برای ما فراهم می کند تا بتوانیم طرح را در زمان واقعی به روز کنیم.
روش های مختلفی برای نصب این کتابخانه ها بر روی رایانه شخصی شما وجود دارد که ساده ترین آنها از طریق پیپ است. پیپ را می توان از طریق CMD بر روی ویندوز یا دستگاه لینوکس نصب کرد. PIP با python3 بسته بندی شده است بنابراین به شما توصیه می کنم python3 را نصب کنید. با نصب پیپ ، اکنون می توان کتابخانه های دیگر مورد نیاز خود را نصب ;kdn.
در منوی استارت CMD را سرچ کنید و عبارات زیر را تایپ کنید.
pip install pyserial
pip install matplotlib
pip install drawnow
پس از وارد کردن کتابخانه های مورد نیاز نوشتن کد را شروع می کنیم.
در ابتدا کتابخانه های مورد نیاز را فراخوانی میکنیم :
import time import matplotlib.pyplot as plt from drawnow import * import pyserial
در مرحله بعد متغیرهایی را که در طول کد استفاده می شود را ایجاد می کنیم. از آرایه val برای ذخیره داده های دریافت شده از درگاه سریال استفاده می شود و برای شمارش از cnt استفاده می شود. داده ها بعد از هر 50 شمارش حذف می شوند. این کار برای نگه داشتن اطلاعات در اسیلوسکوپ انجام می شود.
val = [ ] cnt = 0
در مرحله بعد ، ماژول پورت سریال را ایجاد می کنیم که از طریق آن Arduino با اسکریپت پایتون ما ارتباط برقرار می کند. اطمینان حاصل کنید که پورت COM مشخص شده در زیر همان درگاه COM شما است که از طریق آن برد Arduino شما با با کامپیوتر ارتباط برقرار می کند. برای اطمینان از ارتباط سریع با آردوینو از نرخ 11500 استفاده شده است. برای جلوگیری از بروز خطاها ، باید درگاه سریال آردوینو نیز فعال شود تا بتواند با این میزان سرعت ارتباط برقرار کند.
port = serial.Serial('COM4', 115200, timeout=0.5)
سپس ما نقشه را میسازیم :
plt.ion()
ما برای ایجاد طرح از داده های دریافت شده ، باید یک تابع ایجاد کنیم و حد و مرز حداکثر و حداقل را ایجاد کنیم ، که در این حالت 1023 بر اساس رزولوشن ADC Arduino است.
def makeFig(): plt.ylim(-1023,1023) plt.title('Osciloscope') plt.grid(True) plt.ylabel('ADC outputs') plt.plot(val, 'ro-', label='Channel 0') plt.legend(loc='lower right')
با این کار ، اکنون ما آماده هستیم تا حلقه اصلی که داده ها را از درگاه سریال می گیرد بنویسیم. وقتی آردوینو داده های آنالوگ را دریافت می کند ، با داده های ADC پاسخ می دهد.
while (True): port.write(b's') if (port.inWaiting()):# اگر آردوینو جواب داد value = port.readline() print(value)#print so we can monitor it number = int(value) print('Channel 0: {0}'.format(number)) time.sleep(0.01) val.append(int(number)) drawnow(makeFig)#آپدیت پلات plt.pause(.000001) cnt = cnt+1 if(cnt>50): val.pop(0)#تازه نگه داشتن نمودار و آپدیت
توضیحات کد آردوینو پروژه
کد کامل آردوینو در فایل دانلودی قرار داده شده است. شروع می کنیم با اعلام پین آنالوگ پین آردوینو که سیگنال در آن اعمال می شود. در ابتدا پین آنالوگ برای دریافت جریان را معرفی می کنیم.
int sensorpin = A0;
در مرحله بعد ، ارتباط سریال را با نرخ 115200 شروع و تنظیم می کنیم.
void setup() { Serial.begin(115200); }
سرانجام، کد تابع voidloop () که خواندن داده ها را بر عهده دارد و داده ها را به صورت سریال به پلاتر ارسال می کند را مینویسیم.
void loop() { float sensorValue = analogRead(sensorpin); byte data = Serial.read(); if (data == 's') { Serial.println(sensorValue); delay(10); } }
برای دانلود فایل ها باید حساب کاربری داشته باشید
سلام آقایمهندس
مشخصات اسیلوسکوپ
ولتاژ p-pوفرکانس کاریش چنده
سلام آقای مهندس
فایل رو استخراج نمیکنه واز حالت زیپ درش نمیاره ومیگه زیپ تو زیپه
سلام عزیز، از نرم افزار WinRAR استفاده کنید.
سلام جناب مهندس رحیمی
ممنون بابت آموزشای خوبتون
مهندس رحیمی ببخشید با این اسیلوسکوپ میتونیم شکل های دیگه موج هارو ببینیم؟؟؟
سلام جناب، در حد یک اسیلوسکوپ حرفه ای عمل نمیکنه اما تا حدی خوبه.
آموزش بسیار خوبی بود . ممنون از این که علمتون را در اختیار بقیه می گذارید . ان شاءالله همیشه سلامت شاد و موفق باشید.
سلام جناب. ممنونم از شما.