فهرست مطالب:

ایجاد ولتاژ با دوچرخه ارگومتر: 9 مرحله (همراه با تصاویر)
ایجاد ولتاژ با دوچرخه ارگومتر: 9 مرحله (همراه با تصاویر)

تصویری: ایجاد ولتاژ با دوچرخه ارگومتر: 9 مرحله (همراه با تصاویر)

تصویری: ایجاد ولتاژ با دوچرخه ارگومتر: 9 مرحله (همراه با تصاویر)
تصویری: تولید برق به روش آسان و ولتاژ پایین 2024, جولای
Anonim
ایجاد ولتاژ با دوچرخه ارگونومتر
ایجاد ولتاژ با دوچرخه ارگونومتر
ایجاد ولتاژ با دوچرخه ارگونومتر
ایجاد ولتاژ با دوچرخه ارگونومتر
ایجاد ولتاژ با دوچرخه ارگونومتر
ایجاد ولتاژ با دوچرخه ارگونومتر

توسعه پروژه شامل مونتاژ یک "بازی" با هدف رکاب زدن در دوچرخه ارگومتر متصل به ژنراتور و برج لامپ هایی است که با افزایش دور موتور فعال می شوند - که با رکاب زدن دوچرخه اتفاق می افتد. این سیستم بر اساس خواندن-از طریق یک پورت آنالوگ 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: نتایج:

Image
Image

پس از مونتاژ نهایی پروژه ، تأیید شد که آنطور که انتظار می رفت کار می کند - با توجه به سرعتی که کاربر روی دوچرخه رکاب می زند ، ولتاژ بیشتری تولید می شود و لامپ های بیشتری روشن می شوند.

توصیه شده: