جدول المحتويات:
- الخطوة 1: المواد:
- الخطوة 2: مخطط كتل النظام:
- الخطوة الثالثة: تشغيل النظام:
- الخطوة 4: الجوانب الميكانيكية
- الخطوة 5: قراءة الجهد:
- الخطوة السادسة: برمجة الأردوينو:
- الخطوة السابعة: برمجة Raspberry Pi 3:
- الخطوة 8: المخطط الكهربائي:
- الخطوة 9: النتائج:
فيديو: توليد الجهد باستخدام دراجة مقياس الجهد: 9 خطوات (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:40
تألفت صياغة المشروع من تجميع "لعبة" بهدف استخدام دواسة في دراجة مقياس سرعة موصولة بمولد وبرج من المصابيح التي يتم تنشيطها مع زيادة سرعة المحرك - وهو ما يحدث نتيجة لدواسة الدراجة. كان النظام يعتمد على قراءة - من خلال منفذ تناظري من Arduino Mega - الجهد الفوري المتولد ، ثم نقل هذه البيانات إلى Raspberry Pi 3 عبر اتصال RX-TX التسلسلي والتفعيل اللاحق للمصابيح عبر المرحل.
الخطوة 1: المواد:
- 1 Raspberry Pi 3 ؛
- 1 اردوينو ميجا 2560 ؛
- 1 درع تتابع مع 10 مرحلات 12 فولت ؛
- 10 مصابيح متوهجة 127 فولت ؛
- 1 دراجة مقياس الجهد ؛
- 1 آلة كهربائية (مولد) 12 فولت ؛
- المقاومات (1x1kΩ ، 2x10kΩ) ؛
- 1 مكثف كهربائيا 10 درجة فهرنهايت ؛
- 1 Zener Diode 5.3 V ؛
- كابل 1.5 مم (أحمر ، أسود ، بني) ؛
- 1 برج MDF مع دعم لـ 10 مصابيح.
الخطوة 2: مخطط كتل النظام:
الخطوة الثالثة: تشغيل النظام:
يعتمد النظام على تحويل الطاقة الحركية المتولدة عند ركوب الدراجة في الطاقة الكهربائية المسؤولة عن تنشيط المرحلات التي ستشغل المصابيح.
يتم قراءة الجهد الناتج عن المولد بواسطة دبوس تناظري من Arduino ويتم إرساله عبر RX-TX إلى Raspberry Pi. يتناسب تنشيط المرحلات مع الجهد المتولد - فكلما زاد الجهد ، سيتم تشغيل المزيد من المرحلات وسيضيء المزيد من المصابيح.
الخطوة 4: الجوانب الميكانيكية
من أجل ربط مولد التيار المستمر بالدراجة ميكانيكيًا ، كان لا بد من استبدال نظام الحزام بالنظام المستخدم في الدراجات العادية (يتكون من تاج وسلسلة وترس). تم لحام لوحة معدنية بإطار الدراجة بحيث يمكن تأمين المحرك بواسطة براغي. بعد ذلك ، تم لحام الترس الصغير في عمود المولد بحيث يمكن وضع السلسلة ، وربط نظام الدواسة بالمولد.
الخطوة 5: قراءة الجهد:
لقراءة جهد المولد باستخدام Arduino ، من الضروري توصيل القطب الموجب للآلة الكهربائية بالدبوس A0 لوحدة التحكم والقطب السالب بـ GND - لتجنب أن يكون الحد الأقصى لجهد المولد أكبر من 5 فولت من دبابيس Arduino ، مرشح الجهد باستخدام مكثف 10 µF ، تم إنشاء المقاوم من 1 kΩ والصمام الثنائي Zener من 5.3 V وتوصيله بين وحدة التحكم والمولد. البرنامج الثابت الذي تم تحميله في Arduino بسيط للغاية ويتألف فقط من قراءة منفذ تناظري ، وضرب القيمة المقروءة بالثابت 0.0048828125 (5/1024 ، أي جهد GPIO الخاص بـ Arduino مقسومًا على عدد بتات المنفذ التناظري) وإرسال متغير إلى المسلسل - سيكون الرمز متاحًا في المقالة.
يعتبر إجراء تمكين اتصال RX-TX في Raspberry Pi أكثر تعقيدًا بعض الشيء ، ويجب عليك اتباع الإجراء الموضح في الرابط. باختصار ، تحتاج إلى تحرير ملف يسمى "inittab" - الموجود في "/ etc / inittab" - ، قم بالتعليق على السطر "T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100" (إذا لم يكن الملف كذلك تأسست في نظام تشغيل Raspberry ، يجب عليك إدخال الأمر: "sudo leafpad /boot/config.txt" وإلحاق السطر "enable_uart = 1" في نهاية الملف). بمجرد الانتهاء من ذلك ، يجب إعادة فتح LX Terminal وتعطيل المسلسل باستخدام الأمرين "sudo systemctl stop [email protected]" و "sudo systemctl تعطيل [email protected]". بعد ذلك يجب عليك تنفيذ الأمر "sudo leafpad /boot/cmdline.txt" ، وحذف السطر "console = serial0، 115200" وحفظ الملف وأعد تشغيل الجهاز. لكي يكون اتصال RX-TX ممكنًا ، يجب تثبيت المكتبة التسلسلية على Raspberry Pi باستخدام الأمر "sudo apt-get install -f python-serial" واستيراد المكتبة إلى الكود عن طريق إدخال سطر "import serial" ، تهيئة المسلسل عن طريق إدخال السطر "ser = serial. Serial (" / dev / ttyS0 "، 9600)" وقراءة الجهد المرسل بواسطة Arduino باستخدام الأمر "ser.readline ()" - الكود الكامل المستخدم في Raspberry سيتم توفيره في نهاية المقالة.
باتباع الإجراء الموضح أعلاه ، اكتملت خطوة قراءة الجهد وإرساله.
الخطوة السادسة: برمجة الأردوينو:
كما ذكرنا سابقًا ، فإن الكود المسؤول عن قراءة الجهد المتولد عند ركوب الدراجات بسيط للغاية.
أولاً ، من الضروري اختيار دبوس A0 ليكون المسؤول عن قراءة الجهد.
في وظيفة "void setup ()" ، تحتاج إلى ضبط pin A0 على INPUT باستخدام الأمر "pinMode (sensor ، INPUT)" وتحديد سرعة نقل المنفذ التسلسلي باستخدام الأمر "Serial.begin (9600)".
في "الحلقة الفارغة ()" ، يتم استخدام وظيفة "Serial.flush ()" لمسح المخزن المؤقت في كل مرة ينهي فيها إرسال المعلومات عبر المسلسل ؛ يتم تنفيذ قراءة الجهد بواسطة الوظيفة "analogRead (sensor)" - تذكر أنه من الضروري تحويل القيمة التي يقرأها المنفذ التناظري إلى Volts - العملية المذكورة في قسم "قراءة الجهد" من المقالة.
أيضًا ، في وظيفة "void loop ()" ، من الضروري تحويل المتغير x من عدد عشري إلى سلسلة ، لأن هذه هي الطريقة الوحيدة لإرسال المتغير عبر RX-TX. الخطوة الأخيرة في وظيفة الحلقة هي طباعة السلسلة في المنفذ التسلسلي بحيث يمكن إرسالها إلى Raspberry - لهذا يجب عليك استخدام وظيفة "Serial.println (y)". تمت إضافة السطر "تأخير (100)" إلى الكود فقط بحيث يتم إرسال المتغير على فترات 100 مللي ثانية - إذا لم يتم احترام هذا الوقت ، فسيحدث الحمل الزائد التسلسلي ، مما يؤدي إلى حدوث أعطال محتملة في البرنامج.
الجهد_قراءة
مستشعر تعويم = A0 ؛ |
الإعداد باطل() { |
pinMode (المستشعر ، المدخلات) ؛ |
Serial.begin (9600) ؛ |
} |
حلقة فارغة() { |
Serial.flush () ، |
تعويم x = analogRead (المستشعر) * 0.0048828125 * 16.67 ؛ |
سلسلة ص = "" ؛ |
ص + = س ؛ |
Serial.println (ذ) ؛ |
تأخير (100) ؛ |
} |
عرض rawvoltage_read.ino مستضاف مع ❤ بواسطة GitHub
الخطوة السابعة: برمجة Raspberry Pi 3:
lamp_bike.py
import os #import مكتبة نظام التشغيل (تُستخدم لمسح الشاشة عند الضرورة) |
استيراد RPi. GPIO حيث تستخدم مكتبة gpio #import للتحكم في GPIO الخاص بـ Raspnerry |
استيراد مكتبة # استيراد المسلسل المسؤولة عن الاتصال التسلسلي |
استيراد مكتبة #import التي تجعل من الممكن استخدام وظيفة التأخير |
استيراد مكتبة عملية فرعية #import المسؤولة عن تشغيل الأغاني |
# بدء المسلسل |
ser = serial. Serial ("/ dev / ttyS0"، 9600) # حدد اسم الجهاز ومعدل الباود |
#شاشة واضحة |
clear = lambda: os.system ('clear') |
# مجموعة دبابيس للتحكم في التتابع |
gpio.setmode (gpio. BOARD) |
gpio.setup (11، gpio. OUT) # مصباح 10 |
gpio.setup (12، gpio. OUT) # مصباح 9 |
gpio.setup (13، gpio. OUT) # مصباح 8 |
gpio.setup (15، gpio. OUT) # مصباح 7 |
gpio.setup (16، gpio. OUT) # مصباح 6 |
gpio.setup (18، gpio. OUT) # مصباح 5 |
gpio.setup (19، gpio. OUT) # مصباح 4 |
gpio.setup (21، gpio. OUT) # مصباح 3 |
gpio.setup (22، gpio. OUT) # مصباح 2 |
gpio.setup (23، gpio. OUT) # مصباح 1 |
# بدء التسجيلات |
الاسم = ["بلا"] * 10 |
الجهد = [0.00] * 10 |
# قراءة ملف السجلات |
f = open ("سجلات" ، "r") |
بالنسبة لـ i inrange (10): # تظهر أفضل 10 نتائج في القائمة |
الاسم = f.readline () |
name = name [: len (name ) - 1] |
الجهد = f.readline () |
الجهد = تعويم (الجهد [: لين (الجهد ) - 1]) |
f.close () |
صافي() |
# اضبط الحد الأقصى للجهد |
الحد الأقصى = 50.00 |
# أطفئ المصابيح |
لأني في المدى (11 ، 24 ، 1): |
إذا أنا! = 14 و أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. HIGH) # اضبط على HIGH ، يتم إيقاف تشغيل المرحلات |
#بداية |
احيانا صحيح: |
#الشاشة الأولي |
طباعة "السجلات: / n" |
لأني inrange (10): |
طباعة الاسم ، ":" ، الجهد ، "V" |
current_name = raw_input ("اكتب اسمك للبدء:") |
صافي() |
# تغيير القيمة القصوى |
إذا كان Current_name == "max": |
max = input ("اكتب الحد الأقصى للجهد: (منزلتان عشريتان)") |
صافي() |
آخر: |
# بدء تحذير |
بالنسبة لـ i inrange (11 ، 24 ، 1): # تبدأ الحلقة في رقم التعريف الشخصي 11 وتتوقف في رقم التعريف الشخصي 24 |
إذا كان i! = 14 و i! = 17 و i! = 20: #PIN 14 و 20 عبارة عن دبابيس GND و 20 عبارة عن دبوس 3.3 فولت |
gpio.output (i، gpio. LOW) # قم بتشغيل المصابيح |
وقت النوم (0.5) |
ك = 10 |
لأني في المدى (23 ، 10 ، -1): |
صافي() |
إذا أنا! = 14 و أنا! = 17 و أنا! = 20: |
subprocess. Popen (['aplay'، 'Audios /' + str (k) + '. wav']) |
time.sleep (0.03). |
صافي() |
طباعة "التحضير! / n" ، ك |
time.sleep (1) الوقت |
ك- = 1 |
gpio.output (i، gpio. HIGH) # أطفئ المصابيح (واحدًا تلو الآخر) |
subprocess. Popen (['aplay'، 'Audios / go.wav']) # تشغيل موسيقى البداية |
time.sleep (0.03). |
صافي() |
اطبع "GO!" |
time.sleep (1) الوقت |
صافي() |
#Voltage قراءة |
الحالي_الجهد = 0.00 |
الجهد 1 = 0.00 |
لأني inrange (200): |
ser.flushInput () |
السابق = الجهد 1 |
الجهد 1 = تعويم (ser.readline ()) # يجمع بيانات Arduino المنقولة بواسطة RX-TX |
صافي() |
طباعة الجهد 1 ، "V" |
إذا كان الجهد 1> الجهد الحالي: |
الجهد الحالي = الجهد 1 |
# اعتمادًا على الجهد المتولد ، تضيء المزيد من المصابيح. |
إذا كان الجهد 1 <ماكس / 10: |
لأني في المدى (11 ، 24 ، 1): |
إذا أنا! = 14 و أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. HIGH) |
إذا كان الجهد 1> = ماكس / 10: |
gpio.output (11، gpio. LOW) |
لأني في المدى (12 ، 24 ، 1): |
إذا أنا! = 14 و أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. HIGH) |
إذا كان الجهد 1> = 2 * ماكس / 10: |
بالنسبة لي في المدى (11 ، 13 ، 1): |
gpio.output (i، gpio. LOW) |
بالنسبة لي في المدى (13 ، 24 ، 1): |
إذا أنا! = 14 و أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. HIGH) |
إذا كان الجهد 1> = 3 * ماكس / 10: |
لأني في المدى (11 ، 14 ، 1): |
gpio.output (i، gpio. LOW) |
لأني في المدى (15 ، 24 ، 1): |
إذا أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. HIGH) |
إذا كان الجهد 1> = 4 * ماكس / 10: |
لأني في المدى (11 ، 16 ، 1): |
إذا أنا! = 14: |
gpio.output (i، gpio. LOW) |
لأني في المدى (16 ، 24 ، 1): |
إذا أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. HIGH) |
إذا كان الجهد 1> = 5 * ماكس / 10: |
لأني في المدى (11 ، 17 ، 1): |
إذا أنا! = 14: |
gpio.output (i، gpio. LOW) |
لأني في المدى (18 ، 24 ، 1): |
إذا أنا! = 20: |
gpio.output (i، gpio. HIGH) |
إذا كان الجهد 1> = 6 * ماكس / 10: |
لأني في المدى (11 ، 19 ، 1): |
إذا أنا! = 14 و أنا! = 17: |
gpio.output (i، gpio. LOW) |
لأني في المدى (19 ، 24 ، 1): |
إذا أنا! = 20: |
gpio.output (i، gpio. HIGH) |
إذا كان الجهد 1> = 7 * ماكس / 10: |
بالنسبة لي في المدى (11 ، 20 ، 1): |
إذا أنا! = 14 و أنا! = 17: |
gpio.output (i، gpio. LOW) |
لأني في المدى (21 ، 24 ، 1): |
gpio.output (i، gpio. HIGH) |
إذا كان الجهد 1> = 8 * ماكس / 10: |
لأني في المدى (11 ، 22 ، 1): |
إذا أنا! = 14 و أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. LOW) |
لأني في المدى (22 ، 24 ، 1): |
gpio.output (i، gpio. HIGH) |
إذا كان الجهد 1> = 9 * ماكس / 10: |
بالنسبة لي في المدى (11 ، 23 ، 1): |
إذا أنا! = 14 و أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. LOW) |
gpio.output (23، gpio. HIGH) |
إذا كان الجهد 1> = الحد الأقصى: |
لأني في المدى (11 ، 24 ، 1): |
إذا أنا! = 14 و أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. LOW) |
إذا الجهد 1 |
استراحة |
# أطفئ المصابيح |
لأني في المدى (11 ، 24 ، 1): |
إذا أنا! = 14 و أنا! = 17 و أنا! = 20: |
gpio.output (i، gpio. HIGH) |
# موسيقى النصر |
إذا تيار_الجهد> = ماكس: |
subprocess. Popen (['aplay'، 'Audios / rocky.wav']) |
time.sleep (0.03). |
صافي() |
اطبع "جيد جدًا ، لقد فزت!"٪ (u '\u00c9'، u '\u00ca'، u '\u00c2') |
لأني inrange (10): |
بالنسبة لـ j inrange (11 ، 24 ، 1): |
إذا كان j! = 14 و j! = 17 و j! = 20: |
gpio.output (j، gpio. LOW) |
time.sleep (0.05). |
بالنسبة لـ j inrange (11 ، 24 ، 1): |
إذا كان j! = 14 و j! = 17 و j! = 20: |
gpio.output (j، gpio. HIGH) |
time.sleep (0.05). |
وقت النوم (0.5) |
subprocess. Popen (['aplay'، 'Audios / end.wav']) |
time.sleep (0.03). |
صافي() |
طباعة "End game… / n"، current_voltage، "V" |
# السجلات |
time.sleep (1.2). |
وصلت = 0 |
لأني inrange (10): |
إذا كان الحالي_الجهد> الجهد : |
وصلت + = 1 |
temp_voltage = الجهد |
الجهد = الفولتية الحالية |
الحالي_الجهد = temp_voltage |
temp_name = الاسم |
name = current_name |
Current_name = temp_name |
إذا تم الوصول إليه> 0: |
subprocess. Popen (['aplay'، 'Audios / record.wav']) |
time.sleep (0.03). |
صافي() |
f = open ("سجلات" ، "w") |
لأني inrange (10): |
f.write (الاسم ) |
f.write ("\ n") |
f.write (str (الجهد )) |
f.write ("\ n") |
f.close () |
صافي() |
عرض rawlamps_bike.py مستضاف مع ❤ بواسطة GitHub
الخطوة 8: المخطط الكهربائي:
يتم تشغيل Arduino و Raspberry Pi 3 بواسطة مصدر 5V بتيار 3A.
تبدأ الدائرة الكهربائية بتوصيل مولد التيار المستمر (مقترنًا بالدراجة) بأردوينو من خلال مرشح جهد يتكون من الصمام الثنائي Zener بقوة 5.3 فولت ، ومكثف من 10μF ومقاوم 1kΩ - يتم توصيل دخل المرشح بـ محطات المولد والمخرج متصل بمنفذ A0 و GND لوحدة التحكم.
يتم توصيل Arduino بـ Raspberry عبر اتصال RX-TX - يتم إجراؤه من خلال مقسم مقاوم باستخدام مقاومات 10kΩ (مطلوبة بواسطة منافذ وحدات التحكم التي تعمل بجهد كهربائي مختلف).
GPIOs Raspberry Pi متصلة بالمرحلات المسؤولة عن تشغيل المصابيح. كان “COM” لجميع المرحلات مترابطًا ومتصلًا بالطور (شبكة التيار المتردد) وتم توصيل “NO” (مفتوح عادةً) لكل مرحل بكل مصباح وكان المحايد لشبكة التيار المتردد متصلاً بجميع المصابيح. وبالتالي ، عندما يتم تنشيط GPIO المسؤول عن كل مرحل ، يتم تحويل المرحل إلى مرحلة شبكة التيار المتردد وتشغيل المصباح المعني.
الخطوة 9: النتائج:
بعد التجميع النهائي للمشروع ، تم التحقق من أنه يعمل كما هو متوقع - وفقًا لسرعة دواسات المستخدم على الدراجة ، يتم توليد المزيد من الجهد والمزيد من المصابيح تضيء.
موصى به:
Arduino للتحكم في سرعة محرك التيار المستمر والاتجاه باستخدام مقياس الجهد وشاشة OLED والأزرار: 6 خطوات
Arduino Control DC Motor Speed and Direction باستخدام مقياس الجهد وشاشة OLED والأزرار: في هذا البرنامج التعليمي سوف نتعلم كيفية استخدام محرك L298N DC MOTOR CONTROL ومقياس جهد للتحكم في سرعة واتجاه محرك التيار المستمر بزرين وعرض قيمة مقياس الجهد على شاشة OLED. شاهد فيديو توضيحي
التحكم في سطوع LED باستخدام مقياس الجهد باستخدام Arduino: 3 خطوات
التحكم في سطوع LED باستخدام مقياس الجهد باستخدام Arduino: في هذا المشروع ، سنتحكم في سطوع LED باستخدام المقاومة المتغيرة التي يوفرها مقياس الجهد. هذا مشروع أساسي جدًا للمبتدئين ولكنه سيعلمك أشياء كثيرة حول مقياس الجهد وعمل LED وهي أمور مطلوبة لتحقيق الميزات
مقياس الجهد مع مقياس الجهد: 4 خطوات
Intervalometer with Potentiometer: لقد قررت فقط عمل مقياس فاصل بسيط للغاية ، مع مدخلات سهلة لمعلمات الفاصل الزمني. يستخدم مقياس الفترات زرين (Enter and Select) وزر جهد واحد (وعاء). باستخدام الأزرار ، يمكنك الدخول في وضع البرمجة أو s
بدء تشغيل محرك DC بسلاسة وسرعة واتجاه باستخدام مقياس الجهد وشاشة OLED والأزرار: 6 خطوات
بداية سلسة لمحرك التيار المستمر وسرعته واتجاهه باستخدام مقياس الجهد وشاشة OLED والأزرار: في هذا البرنامج التعليمي سوف نتعلم كيفية استخدام محرك L298N DC MOTOR CONTROL ومقياس جهد للتحكم في محرك DC بسلاسة في البداية والسرعة والاتجاه باستخدام زرين و اعرض قيمة مقياس الجهد على شاشة OLED. شاهد فيديو توضيحي
مقياس الجهد والمؤازرة: حركة خاضعة للتحكم باستخدام Arduino: 4 خطوات
مقياس الجهد والمؤازرة: حركة خاضعة للتحكم باستخدام Arduino: تحتاج أولاً إلى جمع المواد ذات الصلة لتجميع هذه الدائرة معًا