- كيف تعمل
- المكونات المطلوبة
- المخططات
- كود Arduino Osclloscope
- نص بايثون (الراسمة)
- كود اردوينو
- اردوينو راسم الذبذبات أثناء العمل
يعد Oscilloscope أحد أهم الأدوات التي ستجدها على طاولة عمل أي مهندس أو صانع إلكترونيات. يتم استخدامه بشكل أساسي لعرض شكل الموجة وتحديد مستويات الجهد والتردد والضوضاء والمعلمات الأخرى للإشارات المطبقة عند دخلها والتي قد تتغير بمرور الوقت. يتم استخدامه أيضًا من قبل مطوري البرامج المضمنة لتصحيح أخطاء التعليمات البرمجية والفنيين لاستكشاف أخطاء الأجهزة الإلكترونية أثناء الإصلاح. هذه الأسباب تجعل راسم الذبذبات أداة لا غنى عنها لأي مهندس. المشكلة الوحيدة هي أنها يمكن أن تكون باهظة الثمن ، يمكن أن تكون راسمات الذبذبات التي تؤدي أبسط الوظائف بأقل قدر من الدقة باهظة الثمن مثل 45 دولارًا إلى 100 دولار في حين أن التكلفة الأكثر تقدمًا وكفاءة تزيد عن 150 دولارًا. سأقوم اليوم بشرح كيفية استخدام Arduinoوبرنامج ، سيتم تطويره باستخدام لغة البرمجة المفضلة لدي Python ، لبناء راسم ذبذبات أردوينو منخفض التكلفة رباعي القنوات قادر على أداء المهام التي يتم من أجلها نشر بعض راسم الذبذبات الرخيصة مثل عرض أشكال الموجة وتحديد مستويات الجهد للإشارات.
كيف تعمل
هناك جزئين لهذا المشروع ؛
- محول البيانات
- الراسمة
تتضمن راسمات الذبذبات عمومًا التمثيل المرئي للإشارة التناظرية المطبقة على قناة الإدخال الخاصة بها. لتحقيق ذلك ، نحتاج أولاً إلى تحويل الإشارة من تناظرية إلى رقمية ثم رسم البيانات. للتحويل ، سنستفيد من ADC (المحول التناظري إلى الرقمي) على متحكم atmega328p الذي يستخدمه Arduino لتحويل البيانات التناظرية عند إدخال الإشارة إلى إشارة رقمية. بعد التحويل ، يتم إرسال القيمة لكل مرة عبر UART من Arduino إلى جهاز الكمبيوتر حيث يقوم برنامج الراسمة الذي سيتم تطويره باستخدام Python بتحويل تدفق البيانات الواردة إلى شكل موجة عن طريق رسم كل بيانات مع الوقت.
المكونات المطلوبة
المكونات التالية مطلوبة لبناء هذا المشروع ؛
- Arduino Uno (يمكن استخدام أي من اللوحات الأخرى)
- اللوح
- 10 كيلو المقاوم (1)
- ال دي ار (1)
- أسلاك توصيل
البرامج المطلوبة
- اردوينو IDE
- بايثون
- مكتبات Python: Pyserial ، Matplotlib ، Drawnow
المخططات
التخطيطي ل Arduino Oscilloscope بسيط. كل ما نحتاج إليه هو توصيل الإشارة التي سيتم فحصها بالدبوس التناظري المحدد في Arduino. ومع ذلك ، سنستخدم LDR في إعداد مقسم جهد بسيط لتوليد الإشارة المراد فحصها ، بحيث يصف شكل الموجة المتولد مستوى الجهد ، بناءً على شدة الضوء حول LDR.
قم بتوصيل المكونات كما هو موضح في المخططات أدناه ؛
بعد الاتصال ، يجب أن يعجب الإعداد بالصورة أدناه.
بعد الانتهاء من جميع الاتصالات ، يمكننا المضي قدمًا في كتابة الكود.
كود Arduino Osclloscope
سنكتب الرموز لكل قسم من القسمين. بالنسبة إلى Plotter كما ذكرنا سابقًا ، سنقوم بكتابة برنامج نصي بيثون يقبل البيانات من Arduino عبر UART و Plots ، بينما بالنسبة للمحول ، سنكتب رسم Arduino يأخذ البيانات من ADC ويحولها إلى مستويات الجهد التي يتم إرسالها إلى الراسمة.
نص بايثون (الراسمة)
نظرًا لأن كود Python أكثر تعقيدًا ، فسنبدأ به.
سنستخدم مكتبتين بما في ذلك ؛ drawnow و Matplotlib و Pyserial مع نص بيثون كما ذكرنا سابقًا. يتيح لنا Pyserial إنشاء نص برمجي بيثون يمكنه التواصل عبر المنفذ التسلسلي ، ويمنحنا Matplotlib القدرة على إنشاء مخططات من البيانات المستلمة عبر المنفذ التسلسلي ويوفر drawnow وسيلة لنا لتحديث المؤامرة في الوقت الفعلي.
هناك عدة طرق لتثبيت هذه الحزم على جهاز الكمبيوتر الخاص بك ، أسهلها هو عن طريق النقطة . يمكن تثبيت Pip عبر سطر الأوامر على نظام windows أو جهاز linux. يتم حزم PIP مع python3 لذا سوف أنصحك بتثبيت python3 وتحديد المربع الخاص بإضافة python إلى المسار. إذا كنت تواجه مشكلات في تثبيت pip ، فتحقق من هذا الموقع الإلكتروني الرسمي للبيثون للحصول على نصائح.
مع تثبيت pip ، يمكننا الآن تثبيت المكتبات الأخرى التي نحتاجها.
افتح موجه الأوامر لمستخدمي windows ، المحطة الطرفية لمستخدمي Linux وأدخل ما يلي ؛
تثبيت pyserial
مع القيام بذلك ، قم بتثبيت matplotlib باستخدام ؛
نقطة تثبيت matplotlib
يتم تثبيت Drawnow أحيانًا جنبًا إلى جنب مع matplotlib ولكن للتأكد فقط ، قم بتشغيل ؛
نقطة تثبيت السحب
مع اكتمال التثبيت ، نحن الآن جاهزون لكتابة نص بايثون.
يشبه نص Python لهذا المشروع الذي كتبته لـ Raspberry Pi Based Oscilloscope.
نبدأ باستيراد جميع المكتبات اللازمة للرمز ؛
استيراد الوقت matplotlib.pyplot كما PLT من drawnow استيراد * استيراد pyserial
بعد ذلك ، نقوم بإنشاء وتهيئة المتغيرات التي سيتم استخدامها أثناء الكود. سيتم استخدام صمام الصفيف لتخزين البيانات المستلمة من المنفذ التسلسلي وسيتم استخدام cnt للعد. سيتم حذف البيانات الموجودة في الموقع 0 بعد كل 50 حسابًا للبيانات. يتم ذلك للاحتفاظ بالبيانات المعروضة على الذبذبات.
فال = cnt = 0
بعد ذلك ، نقوم بإنشاء كائن المنفذ التسلسلي الذي من خلاله سيتواصل Arduino مع برنامج Python النصي الخاص بنا. تأكد من أن منفذ com المحدد أدناه هو نفس منفذ com الذي تتصل من خلاله لوحة Arduino بـ IDE. تم استخدام معدل الباود 115200 المستخدم أعلاه لضمان اتصال عالي السرعة مع Arduino. لمنع الأخطاء ، يجب أيضًا تمكين منفذ Arduino التسلسلي للتواصل مع معدل الباود هذا.
المنفذ = تسلسلي. ('COM4' ، 115200 ، المهلة = 0.5)
بعد ذلك ، نجعل الحبكة تفاعلية باستخدام ؛
plt.ion ()
نحتاج إلى إنشاء وظيفة لإنشاء المؤامرة من البيانات المستلمة ، وإنشاء الحد الأعلى والأدنى الذي نتوقعه ، والذي في هذه الحالة هو 1023 بناءً على دقة ADC في Arduino. نقوم أيضًا بتعيين العنوان وتسمية كل محور وإضافة وسيلة إيضاح لتسهيل التعرف على المؤامرة.
#create the figure function def makeFig (): plt.ylim (-1023،1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val، 'ro - '، التسمية =' القناة 0 ') plt.legend (loc =' أسفل اليمين ')
بعد القيام بذلك ، نحن الآن جاهزون لكتابة الحلقة الرئيسية التي تأخذ البيانات من المنفذ التسلسلي عند توفرها وتخطيطها. للمزامنة مع Arduino ، يتم إرسال بيانات المصافحة إلى Arduino بواسطة البرنامج النصي Python للإشارة إلى استعدادها لقراءة البيانات. عندما يتلقى Arduino بيانات المصافحة ، فإنه يرد ببيانات من ADC. بدون هذه المصافحة ، لن نتمكن من رسم البيانات في الوقت الفعلي.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # إذا كانت ردود arduino القيمة = port.readline () # اقرأ الرد print (value) #print حتى نتمكن من ذلك مراقبته رقم = int (القيمة) # تحويل البيانات المستلمة إلى عدد صحيح طباعة ('القناة 0: {0}'. تنسيق (رقم)) # سكون لمدة نصف ثانية. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) #update plot لتعكس إدخال البيانات الجديد plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # احتفظ بالمخطط محدثًا عن طريق حذف البيانات الموجودة في الموضع 0
يتم تقديم رمز Python الكامل لـ اردوينو راسم الذبذبات في نهاية هذه المقالة الموضحة أدناه.
كود اردوينو
الكود الثاني هو رسم Arduino للحصول على البيانات التي تمثل الإشارة من ADC ، ثم انتظر لتلقي إشارة المصافحة من برنامج الراسمة. بمجرد أن يتلقى إشارة المصافحة ، فإنه يرسل البيانات المكتسبة إلى برنامج الراسمة عبر UART.
نحن نبدأ بإعلان دبوس دبوس النظير من اردوينو التي سيتم تطبيق إشارة.
int sensorpin = A0 ؛
بعد ذلك ، نقوم بتهيئة وبدء الاتصال التسلسلي بمعدل باود 115200
إعداد باطل () { // تهيئة الاتصال التسلسلي بمعدل 115200 بت في الثانية لمطابقة ذلك الخاص بنص بايثون: Serial.begin (115200) ؛ }
أخيرًا ، وظيفة voidloop () التي تعالج قراءة البيانات ، وترسل البيانات عبر المسلسل إلى الراسم.
الحلقة الفارغة () { // اقرأ الإدخال على الطرف التناظري 0: float sensorValue = analogRead (sensorpin) ؛ بيانات البايت = Serial.read () ، إذا (البيانات == 's') { Serial.println (sensorValue) ؛ تأخير (10) ؛ // تأخير بين القراءات لتحقيق الاستقرار } }
يتم تقديم كود Arduino Oscilloscope الكامل أدناه وكذلك في نهاية هذه المقالة الموضحة أدناه.
int sensorpin = A0 ؛ إعداد باطل () { // تهيئة الاتصال التسلسلي بمعدل 115200 بت في الثانية لمطابقة ذلك الخاص بنص بايثون: Serial.begin (115200) ؛ } حلقة فارغة () { // قراءة الإدخال على الدبوس التناظري 0: ################################### ###################### float sensorValue = analogRead (sensorpin)؛ بيانات البايت = Serial.read () ، إذا (البيانات == 's') { Serial.println (sensorValue) ؛ تأخير (10) ؛ // تأخير بين القراءات لتحقيق الاستقرار } }
اردوينو راسم الذبذبات أثناء العمل
قم بتحميل الكود إلى إعداد Arduino وقم بتشغيل برنامج Python النصي. يجب أن ترى البيانات تبدأ في التدفق عبر سطر أوامر python وتتغير المؤامرة مع شدة الضوء كما هو موضح في الصورة أدناه.
هذه هي الطريقة التي يمكن بها استخدام Arduino كرسم الذبذبات ، ويمكن أيضًا صنعه باستخدام Raspberry pi ، تحقق هنا من البرنامج التعليمي الكامل على Oscilloscope Raspberry Pi.