فهرست مطالب:
- مرحله 1: مواد:
- مرحله 2: نمودار بلوک های سیستم:
- مرحله 3: عملکرد سیستم:
- مرحله 4: جنبه های مکانیک
- مرحله 5: قرائت ولتاژ:
- مرحله 6: برنامه نویسی آردوینو:
- مرحله 7: برنامه نویسی Raspberry Pi 3:
- مرحله 8: طرح الکتریکی:
- مرحله 9: نتایج:
تصویری: ایجاد ولتاژ با دوچرخه ارگومتر: 9 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:56
توسعه پروژه شامل مونتاژ یک "بازی" با هدف رکاب زدن در دوچرخه ارگومتر متصل به ژنراتور و برج لامپ هایی است که با افزایش دور موتور فعال می شوند - که با رکاب زدن دوچرخه اتفاق می افتد. این سیستم بر اساس خواندن-از طریق یک پورت آنالوگ Arduino Mega-ولتاژ فوری ایجاد شده ، سپس انتقال این داده ها به یک Raspberry Pi 3 از طریق ارتباط سریال RX-TX و فعال سازی بعدی لامپ ها از طریق رله ، انجام شد.
مرحله 1: مواد:
- 1 تمشک پای 3 ؛
- 1 آردوینو مگا 2560 ؛
- 1 سپر رله با 10 رله 12 ولت ؛
- 10 لامپ رشته ای 127 ولت ؛
- 1 دوچرخه Ergometer ؛
- 1 دستگاه برق (ژنراتور) 12 ولت ؛
- مقاومت (1x1kΩ ، 2x10kΩ) ؛
- 1 خازن الکترولیتی 10 µF؛
- 1 دیود زنر 5.3 ولت ؛
- کابل 1.5 میلی متری (قرمز ، مشکی ، قهوه ای) ؛
- 1 برج MDF با پشتیبانی از 10 لامپ.
مرحله 2: نمودار بلوک های سیستم:
مرحله 3: عملکرد سیستم:
این سیستم بر اساس تغییر انرژی جنبشی ایجاد شده در دوچرخه سواری در انرژی الکتریکی مسئول فعال شدن رله هایی است که لامپ ها را روشن می کند.
ولتاژ تولید شده توسط ژنراتور توسط پین آنالوگ آردوینو خوانده می شود و از طریق RX-TX به رزبری پای ارسال می شود. فعال سازی رله ها متناسب با ولتاژ تولید شده است - هرچه ولتاژ بیشتر باشد ، رله های بیشتری فعال می شوند و لامپ های بیشتری روشن می شوند.
مرحله 4: جنبه های مکانیک
به منظور اتصال مکانیکی ژنراتور DC به دوچرخه ، سیستم کمربند باید با سیستم مورد استفاده در دوچرخه های معمولی (متشکل از تاج ، زنجیر و پینیون) جایگزین شود. یک صفحه فلزی به قاب دوچرخه جوش داده شد تا بتوان موتور را با پیچ محکم کرد. پس از آن ، پینیون به شفت ژنراتور جوش داده شد تا زنجیر قرار گیرد و سیستم پدال را به ژنراتور متصل کند.
مرحله 5: قرائت ولتاژ:
برای خواندن ولتاژ ژنراتور با استفاده از آردوینو ، قطب مثبت دستگاه الکتریکی را به پین A0 کنترل کننده و قطب منفی را به GND متصل کنید - برای جلوگیری از حداکثر ولتاژ ژنراتور از 5 ولت پین های آردوینو ، فیلتر ولتاژ با استفاده از خازن 10 µF ، مقاومت 1 کیلو وات و دیود زنر 5.3 ولت ساخته شد و بین کنترلر و ژنراتور متصل شد. سیستم عامل بارگذاری شده در آردوینو بسیار ساده است و فقط شامل خواندن یک پورت آنالوگ ، ضرب مقدار خوانده شده با ثابت 0.0048828125 (5/1024 ، یعنی ولتاژ GPIO آردوینو بر تعداد بیت های پورت آنالوگ آن) و ارسال متغیر به سریال - کد در مقاله موجود خواهد بود.
روش فعال کردن ارتباط RX-TX در رزبری پای کمی پیچیده تر است ، و شما باید روش توصیف شده در پیوند را دنبال کنید. به طور خلاصه ، شما باید یک فایل به نام "inittab" -واقع در "/etc/inittab" -را ویرایش کنید ، خط "T0: 23: respawn:/sbin/getty -L ttyAMA0 115200 vt100" (اگر فایل نیست در سیستم عامل Raspberry تأسیس شده است ، باید فرمان: "sudo leafpad /boot/config.txt" را وارد کرده و خط "enable_uart = 1" را به انتهای فایل اضافه کنید). پس از انجام این کار ، باید ترمینال LX را مجدداً باز کرده و سریال را با دستورات "sudo systemctl stop [email protected]" و "sudo systemctl disable [email protected]" غیرفعال کنید. پس از آن باید دستور "sudo leafpad /boot/cmdline.txt" را اجرا کنید ، خط "console = serial0، 115200" را حذف کرده ، فایل را ذخیره کرده و دستگاه را راه اندازی مجدد کنید. برای اینکه ارتباط RX-TX امکان پذیر باشد ، کتابخانه سریال باید با دستور "sudo apt-get install -f python-serial" روی رزبری پای نصب شود و با درج خط "وارد کردن سریال" ، کتابخانه را به کد وارد کنید. ، راه اندازی سریال با درج خط "ser = serial. Serial (" / dev / ttyS0 "، 9600)" و خواندن ولتاژ ارسال شده توسط آردوینو با استفاده از دستور "ser.readline ()" - کد کامل استفاده شده در تمشک در انتهای مقاله در دسترس قرار می گیرد.
به دنبال روشی که در بالا توضیح داده شد ، مرحله خواندن و ارسال ولتاژ کامل شده است.
مرحله 6: برنامه نویسی آردوینو:
همانطور که قبلاً گفته شد ، کد مسئول خواندن ولتاژ ایجاد شده هنگام دوچرخه سواری بسیار ساده است.
در مرحله اول ، لازم است پین A0 را به عنوان مسئول خواندن ولتاژ انتخاب کنید.
در تابع "void setup ()" ، باید پین A0 را با دستور "pinMode (sensor، INPUT)" روی INPUT تنظیم کنید و با استفاده از دستور "Serial.begin (9600)" سرعت انتقال پورت سریال را انتخاب کنید.
در "حلقه خالی ()" ، تابع "Serial.flush ()" برای پاک کردن بافر هر بار که به ارسال اطلاعات از طریق سریال خاتمه می دهد ، استفاده می شود. خواندن ولتاژ توسط عملکرد "analogRead (سنسور)" انجام می شود - به یاد داشته باشید که لازم است مقدار خوانده شده توسط پورت آنالوگ را به ولت تبدیل کنید - فرآیند ذکر شده در بخش "ولتاژ خواندن" مقاله.
همچنین ، در تابع "void loop ()" ، لازم است متغیر x از float به string تبدیل شود ، زیرا این تنها راه ارسال متغیر از طریق RX-TX است. آخرین مرحله در عملکرد حلقه این است که رشته را در پورت سریال چاپ کنید تا بتوان آن را به رزبری ارسال کرد - برای این کار باید از تابع "Serial.println (y)" استفاده کنید. خط "تأخیر (100)" فقط به کد اضافه شده است تا متغیر در فواصل 100 میلی ثانیه ارسال شود - اگر این زمان رعایت نشود ، اضافه بار سریال رخ می دهد و خرابی های احتمالی را در برنامه ایجاد می کند.
voltage_read.ino
سنسور شناور = A0 ؛ |
voidsetup () { |
pinMode (سنسور ، ورودی) ؛ |
Serial.begin (9600)؛ |
} |
voidloop () { |
Serial.flush ()؛ |
float x = analogRead (سنسور)*0.0048828125*16.67 ؛ |
رشته y = ""؛ |
y+= x ؛ |
Serial.println (y) ؛ |
تأخیر (100) ؛ |
} |
مشاهده rawvoltage_read.ino میزبان با ❤ توسط GitHub
مرحله 7: برنامه نویسی Raspberry Pi 3:
lamp_bike.py
وارد کردن سیستم عامل #وارد کردن کتابخانه سیستم عامل (برای پاک کردن صفحه در صورت لزوم استفاده می شود) |
وارد کردن RPi. GPIOas gpio #import Library که برای کنترل GPIO Raspnerry استفاده می شود |
واردات کتابخانه #واردات کتابخانه مسئول ارتباط سریال |
وارد کردن زمان کتابخانه #واردات که امکان استفاده از تابع تأخیر را فراهم می کند |
وارد کردن فرایند #واردات کتابخانه مسئول پخش آهنگ ها |
سریال #شروع |
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 |
#شروع به ضبط |
name = ["هیچکدام"]*10 |
ولتاژ = [0.00]*10 |
#پرونده سوابق را بخوانید |
f = باز ('سوابق' ، 'r') |
for i inrange (10): #10 بهترین نمره در لیست ظاهر می شود |
نام = f.readline () |
نام = نام [: len (نام )-1] |
ولتاژ = f.readline () |
ولتاژ = شناور (ولتاژ [: len (ولتاژ )-1]) |
f.close () |
روشن () |
#حداکثر ولتاژ را تنظیم کنید |
حداکثر = 50.00 |
#لامپها را خاموش کنید |
برای i inrange (11 ، 24 ، 1): |
اگر من! = 14 و من! = 17 و من! = 20: |
gpio.output (i، gpio. HIGH) #تنظیم به HIGH ، رله ها خاموش هستند |
#شروع کن |
whileTrue: |
#صفحه اولیه |
چاپ "سوابق: / n" |
for i inrange (10): |
چاپ نام ، ":" ، ولتاژ ، "V" |
current_name = raw_input ("برای شروع نام خود را بنویسید:") |
روشن () |
#حداکثر مقدار را تغییر دهید |
if current_name == "max": |
max = ورودی ("حداکثر ولتاژ را بنویسید: (2 رقم اعشاری)") |
روشن () |
دیگری: |
هشدار #شروع |
for i inrange (11 ، 24 ، 1): #حلقه از PIN 11 شروع می شود و در PIN 24 متوقف می شود |
اگر i! = 14and i! = 17and i! = 20: #پین 14 و 20 پین GND و 20 پین 3.3 ولت است |
gpio.output (i، gpio. LOW) #لامپ ها را روشن کنید |
زمان خواب (0.5) |
k = 10 |
برای i inrange (23 ، 10 ، -1): |
روشن () |
اگر من! = 14 و من! = 17 و من! = 20: |
subprocess. Popen (['aplay'، 'Audios/'+str (k)+'. wav']) |
زمان خواب (0.03) |
روشن () |
چاپ "آماده شدن! / n" ، k |
زمان خواب (1) |
k- = 1 |
gpio.output (i، gpio. HIGH) #لامپها را خاموش کنید (یکی یکی) |
subprocess. Popen (['' aplay '،' Audios/go.wav ']) #موسیقی شروع را پخش می کند |
زمان خواب (0.03) |
روشن () |
چاپ "برو!" |
زمان خواب (1) |
روشن () |
#ولتاژ خوانده شده |
ولتاژ فعلی = 0.00 |
ولتاژ 1 = 0.00 |
برای i inrange (200): |
ser.flushInput () |
قبلی = ولتاژ 1 |
voltage1 = float (ser.readline ()) #داده های Arduino منتقل شده توسط RX-TX را جمع آوری می کند |
روشن () |
ولتاژ چاپ 1 ، "V" |
if voltage1> current_voltage: |
current_voltage = voltage1 |
# بسته به ولتاژ تولید شده ، لامپ های بیشتری روشن می شوند. |
اگر ولتاژ 1 <حداکثر/10: |
برای i inrange (11 ، 24 ، 1): |
اگر من! = 14 و من! = 17 و من! = 20: |
gpio.output (i، gpio. HIGH) |
اگر ولتاژ 1> = حداکثر/10: |
gpio.output (11 ، gpio. LOW) |
برای i inrange (12 ، 24 ، 1): |
اگر من! = 14 و من! = 17 و من! = 20: |
gpio.output (i، gpio. HIGH) |
اگر ولتاژ 1> = 2*حداکثر/10: |
برای i inrange (11 ، 13 ، 1): |
gpio.output (i، gpio. LOW) |
برای i inrange (13 ، 24 ، 1): |
اگر من! = 14 و من! = 17 و من! = 20: |
gpio.output (i، gpio. HIGH) |
اگر ولتاژ 1> = 3*حداکثر/10: |
برای i inrange (11 ، 14 ، 1): |
gpio.output (i، gpio. LOW) |
برای i inrange (15 ، 24 ، 1): |
اگر من! = 17 و من! = 20: |
gpio.output (i، gpio. HIGH) |
اگر ولتاژ 1> = 4*حداکثر/10: |
برای i inrange (11 ، 16 ، 1): |
اگر من! = 14: |
gpio.output (i، gpio. LOW) |
برای i inrange (16 ، 24 ، 1): |
اگر من! = 17 و من! = 20: |
gpio.output (i، gpio. HIGH) |
اگر ولتاژ 1> = 5*حداکثر/10: |
برای i inrange (11 ، 17 ، 1): |
اگر من! = 14: |
gpio.output (i، gpio. LOW) |
برای i inrange (18 ، 24 ، 1): |
اگر من! = 20: |
gpio.output (i، gpio. HIGH) |
اگر ولتاژ 1> = 6*حداکثر/10: |
برای i inrange (11 ، 19 ، 1): |
اگر من! = 14 و من! = 17: |
gpio.output (i، gpio. LOW) |
برای i inrange (19 ، 24 ، 1): |
اگر من! = 20: |
gpio.output (i، gpio. HIGH) |
اگر ولتاژ 1> = 7*حداکثر/10: |
برای i inrange (11 ، 20 ، 1): |
اگر من! = 14 و من! = 17: |
gpio.output (i، gpio. LOW) |
برای i inrange (21 ، 24 ، 1): |
gpio.output (i، gpio. HIGH) |
اگر ولتاژ 1> = 8*حداکثر/10: |
برای i inrange (11 ، 22 ، 1): |
اگر من! = 14 و من! = 17 و من! = 20: |
gpio.output (i، gpio. LOW) |
برای i inrange (22 ، 24 ، 1): |
gpio.output (i، gpio. HIGH) |
اگر ولتاژ 1> = 9*حداکثر/10: |
برای i inrange (11 ، 23 ، 1): |
اگر من! = 14 و من! = 17 و من! = 20: |
gpio.output (i، gpio. LOW) |
gpio.output (23 ، gpio. HIGH) |
اگر ولتاژ 1> = حداکثر: |
برای i inrange (11 ، 24 ، 1): |
اگر من! = 14 و من! = 17 و من! = 20: |
gpio.output (i، gpio. LOW) |
اگر ولتاژ 1 |
زنگ تفريح |
#لامپها را خاموش کنید |
برای i inrange (11 ، 24 ، 1): |
اگر من! = 14 و من! = 17 و من! = 20: |
gpio.output (i، gpio. HIGH) |
#موسیقی پیروزی |
if current_voltage> = max: |
subprocess. Popen (['aplay' ، 'Audios/rocky.wav']) |
زمان خواب (0.03) |
روشن () |
چاپ "بسیار خوب ، شما برنده شدید!"٪ (u '\u00c9' ، u '\u00ca' ، u '\u00c2') |
for i inrange (10): |
برای j inrange (11 ، 24 ، 1): |
اگر j! = 14and j! = 17and j! = 20: |
gpio.output (j، gpio. LOW) |
زمان خواب (0.05) |
برای j inrange (11 ، 24 ، 1): |
اگر j! = 14and j! = 17and j! = 20: |
gpio.output (j، gpio. HIGH) |
زمان خواب (0.05) |
زمان خواب (0.5) |
subprocess. Popen (['aplay' ، 'Audios/end.wav']) |
زمان خواب (0.03) |
روشن () |
چاپ "پایان بازی… / n" ، ولتاژ فعلی ، "V" |
#سوابق |
زمان خواب (1.2) |
رسیده = 0 |
for i inrange (10): |
اگر current_voltage> ولتاژ : |
به+= 1 رسید |
temp_voltage = ولتاژ |
ولتاژ = ولتاژ_جریان |
current_voltage = temp_voltage |
temp_name = نام |
نام = نام فعلی |
current_name = temp_name |
در صورت رسیدن به> 0: |
subprocess. Popen (['aplay' ، 'Audios/record.wav']) |
زمان خواب (0.03) |
روشن () |
f = باز ("سوابق" ، "w") |
for i inrange (10): |
f.write (نام ) |
f.write ("\ n") |
f.write (str (ولتاژ )) |
f.write ("\ n") |
f.close () |
روشن () |
مشاهده rawlamps_bike.py میزبانی شده توسط ❤ توسط GitHub
مرحله 8: طرح الکتریکی:
آردوینو و رزبری پای 3 از منبع 5 ولت با جریان 3A تغذیه می کنند.
مدار الکتریکی با اتصال ژنراتور DC (همراه با دوچرخه) به آردوینو از طریق فیلتر ولتاژ متشکل از دیود زنر 5.3V ، خازن 10μF و مقاومت 1kΩ شروع می شود - ورودی فیلتر به پایانه های ژنراتور و خروجی به پورت A0 و GND کنترل کننده متصل می شود.
آردوینو از طریق ارتباط RX-TX به تمشک متصل می شود-از طریق تقسیم کننده مقاومتی با استفاده از مقاومت های 10kΩ (مورد نیاز پورت های کنترل کننده ها که در ولتاژهای مختلف کار می کنند) انجام می شود.
GPIO های رزبری پای به رله های مسئول روشن شدن لامپ ها متصل می شوند. "COM" همه رله ها به هم متصل و به فاز (شبکه AC) و "N. O" (معمولاً باز) هر رله به هر لامپ متصل بود و خنثی شبکه AC به همه لامپ ها متصل بود. بنابراین ، هنگامی که GPIO مسئول هر رله فعال می شود ، رله به فاز شبکه AC منتقل می شود و لامپ مربوطه را روشن می کند.
مرحله 9: نتایج:
پس از مونتاژ نهایی پروژه ، تأیید شد که آنطور که انتظار می رفت کار می کند - با توجه به سرعتی که کاربر روی دوچرخه رکاب می زند ، ولتاژ بیشتری تولید می شود و لامپ های بیشتری روشن می شوند.
توصیه شده:
نحوه ایجاد قوس مسافرتی ساده با ولتاژ بالا (JACOB’S LADDER) با ZVS Flyback Trafo: 3 مرحله
چگونه می توان قوس مسافرتی ساده با ولتاژ بالا (JACOB’S LADDER) با ZVS Flyback Trafo ایجاد کرد: نردبان Jacob یک نمایش فوق العاده زیبا از قوس الکتریکی سفید ، زرد ، آبی یا بنفش است
مانیتور ولتاژ برای باتری های ولتاژ بالا: 3 مرحله (همراه با تصاویر)
مانیتور ولتاژ برای باتری های ولتاژ بالا: در این راهنما به شما توضیح خواهم داد که چگونه مانیتور ولتاژ باتری را برای لانگ بورد برقی خود ساخته ام. هر طور که می خواهید آن را نصب کنید و فقط دو سیم به باتری خود (Gnd و Vcc) وصل کنید. این راهنما فرض می کند که ولتاژ باتری شما بیش از 30 ولت ، w
نحوه ایجاد تنظیم کننده ولتاژ 2000 وات: 7 مرحله
نحوه ایجاد تنظیم کننده ولتاژ 2000 وات: دیمر - تنظیم کننده های الکترونیکی قدرت بار به طور گسترده ای در صنعت و زندگی روزمره مورد استفاده قرار می گیرد تا بتواند سرعت چرخش موتورهای الکتریکی ، سرعت فن ، عناصر گرمایش عناصر گرمایش ، شدت روشنایی اتاق ها با برق را کنترل کند. لام
نحوه ایجاد مدار کنترل ولتاژ با استفاده از ترانزیستور 13003: 6 مرحله
نحوه ایجاد مدار کنترل کننده ولتاژ با استفاده از ترانزیستور 13003: سلام دوست عزیز ، امروز می خواهم یک مدار از کنترل کننده ولتاژ بسازم که منبع تغذیه ولتاژ متغیر خروجی را ارائه می دهد. وقتی پروژه های الکترونیکی می سازیم ، برای کارکرد مدار به ولتاژهای مختلف نیاز داریم. من قصد دارم این را درست کنم
دوچرخه بی نهایت - بازی دوچرخه سواری داخل سالن: 5 مرحله
دوچرخه بی نهایت - بازی ویدئویی آموزش دوچرخه داخل سالن: در فصل های زمستان ، روزهای سرد و هوای بد ، علاقه مندان به دوچرخه سوار تنها چند گزینه برای انجام ورزش مورد علاقه خود دارند. ما به دنبال راهی بودیم که تمرینات داخل سالن را با نصب دوچرخه/مربی کمی سرگرم کننده تر کنیم ، اما بیشتر