Բովանդակություն:

Raspberry Pi IoT Foosball սեղան ՝ 11 քայլ
Raspberry Pi IoT Foosball սեղան ՝ 11 քայլ

Video: Raspberry Pi IoT Foosball սեղան ՝ 11 քայլ

Video: Raspberry Pi IoT Foosball սեղան ՝ 11 քայլ
Video: PGI - LED Lighting on Tradewind Air Hockey (Dark) 2024, Նոյեմբեր
Anonim
Raspberry Pi IoT Foosball սեղան
Raspberry Pi IoT Foosball սեղան

Բարի գալուստ կոտրված ֆոսբոլի սեղանի իմ տարբերակը `Նոր մեդիայի և հաղորդակցության տեխնոլոգիայի ուսանողական նախագծի շրջանակներում: Ես հիմնականում մեծացել եմ ֆոսբոլի և լողավազանի սեղանների շուրջ, ուստի մտածեցի, որ հիանալի կլինի փորձել այս սարքերից մեկը ինտերնետին միացնել:

Հիմնական կարգավորումը օգտագործում է գոյություն ունեցող foosball սեղան, որը միացված է Raspberry Pi- ին, որը կարող է կատարել հետևյալ բոլոր առաջադրանքները.

  • Օգտագործում է GPIO կապում ՝ IR LED/ընդունիչներ և 8x8 կետային մատրիցային մոդուլներ վարելու համար
  • Գործարկում է Flask կայքը ՝ օգտագործելով nginx
  • Գործարկում է MySQL/MariaDB տվյալների շտեմարան տվյալների պահպանման համար

Այս նախագիծը վերստեղծելու համար ձեզ հարկավոր են հետևյալ հմտությունները.

Հետնապահ:

  • HTML/CSS/Javascript հասկանալ կայքի հաճախորդի համար
  • Python- ի ըմբռնում Flask/Flask-SocketIO/Jinja2 կայքի սերվերային կողմի համար
  • MySQL- ի հիմնական իմացություն
  • Իմացեք, թե ինչպես վարել վեբ սերվեր

Նախատիպ

  • Հիմնական գիտելիքներ, թե ինչպես միացնել էլեկտրական սխեման
  • Oldոդման
  • Հիմնական հասկացություն, թե ինչպես գրել սցենար Python- ում
  • Աշխատեք Linux- ի հետ (Raspbian)
  • Շատ համբերություն ունենալ, քանի որ շատ վրիպազերծումներ կլինեն

Քայլ 1: Նյութեր

Ահա աղյուսակի համար անհրաժեշտ բոլոր մասերով ցուցակը.

  • Raspberry Pi Model 3 (պատյանով)
  • T-Cobbler ՝ Pi- ն հացահատիկին միացնելու համար
  • Foosball սեղան (ես օգտագործել եմ այս սեղանին նման շատ հին սեղան: Պետք է պատրաստ լինել դրա մեջ անցքեր բացել)
  • MAX7219 Arduino Dot Matrix մոդուլ (2)
  • IR LED ճառագայթիչներ (2+, քանի որ դրանք կոտրվում են, ինչպես այս մեկը)
  • IR ընդունիչներ (2+, քանի որ դրանք նույնպես կոտրվում են, ինչպես այս մեկը)
  • Հիմնական առանց զոդման տախտակ
  • Շատ և շատ մետաղալարեր (կախված ֆոսբոլի սեղանի չափից)
  • արական միակցիչներ (30+)
  • իգական միակցիչներ (10+)
  • 100-220 Օմ դիմադրողներ (4+)
  • զոդման նյութեր
  • մետաղալարեր
  • LED կրողներ
  • մի քանի փայտ/պտուտակներ, եթե ցանկանում եք գնդակը փոխանցել ջրհորի մեջ

Այս նախագծի ընդհանուր արժեքը ամբողջությամբ կախված է ձեր ֆոսբոլի սեղանի արժեքից (թանկ): Բացի սեղանից, նյութերը կլինեն առավելագույնը 150 եվրո:

Քայլ 2: Էլեկտրական միացում

Էլեկտրական միացում
Էլեկտրական միացում
Էլեկտրական միացում
Էլեկտրական միացում
Էլեկտրական միացում
Էլեկտրական միացում

Soldոդման փորձ կատարելուց առաջ հավաքեք բոլոր բաղադրիչները, որոնք խորհուրդ եմ տալիս նախ փորձարկել այն տախտակի վրա: Ավելի հեշտ է փոխարինել անսարք բաղադրիչները, նախքան դրանք ժամեր կպցնելը:

Սկզբում ես փորձեցի ներդնել 8x8 LED մատրիցը 74HC595 հերթափոխի գրանցամատյանով (առաջին պատկերը) և տրանզիստորային զանգվածով, սակայն բազմաթիվ լարերի և շատ ցածր թողարկման պատճառով ես անցա MAX7219 կետային մատրիցային մոդուլին, քանի որ այն տանում է ընդամենը 5 լար և ուղղակիորեն շարժվում է SPI ավտոբուս:

Շրջանը, որն ի վերջո օգտագործեցի, գծված է Ֆրիտզինգի միջոցով: Խնդրում ենք նկատի ունենալ, որ IR LEDS- ը և ընդունիչները կարող են միացված լինել ձեր անվճար GPIO կապումներին:

IR ընդունիչներն ու LED- ը պետք է ուղղակիորեն միմյանց դիմաց լինեն, իսկ LED- ի գագաթը պետք է ուղղված լինի դեպի ստացողը: Քանի որ մենք ցանկանում ենք մոդելավորել ուղիղ ճառագայթը, որը կարող է կոտրվել գնդակի շարժումով, որի դեպքում ստացողի ՏՎՅԱԼՆԵՐԻ տողի վիճակային փոփոխություն կլինի 0 -ից 1:

Քայլ 3: Սենսորների կոդավորում

Սենսորների կոդավորում
Սենսորների կոդավորում

Այս ծրագրի մեծ մասը ծածկագրել եմ Pycharm- ով, քանի որ այն թույլ է տալիս հեշտությամբ SSH տեղակայել ձեր Raspberry Pi- ում ՝ օգտագործելով հեռակա թարգմանիչ: Չեմ մանրամասնի, թե ինչպես է աշխատում այս ծրագիրը, բայց շատ տեղեկություններ կարելի է գտնել pycharm կայքում:

Ես դեռ աշխատում եմ նախագծի վրա, բայց երբ ամեն ինչ արվի, ամբողջ նախագիծը հասանելի կլինի իմ github պրոֆիլում

Սենսորների ծածկագիրը բաղկացած է 3 դասից, որոնք գործարկվում են իմ Flask սերվերի ֆոնային շարանում (որը կբացատրվի ավելի ուշ).

  1. Նպատակների դաս (հղում)
  2. Մատրիցային դաս (հղում) -Սա MAX7219 մոդուլը միացնելու հիմնական դասն է
  3. LED և ստացողի դաս (հղում) - Սա ինֆրակարմիր ճառագայթների միացման հիմնական դասն է ՝ օգտագործելով առանձին թելեր ՝ RPi- ի պրոցեսորի բեռը նվազեցնելու համար:

LED- ը և ընդունիչը երկուսն էլ աշխատում են 38 կՀց հաճախականությամբ, և ընդունիչները միշտ ակնկալում են, որ 50% բարձր և 50% վար զարկերակը կաշխատի ճիշտ:

Քայլ 4: Սենսորների պատրաստում և տեղադրում

Սենսորների պատրաստում և տեղադրում
Սենսորների պատրաստում և տեղադրում
Սենսորների պատրաստում և տեղադրում
Սենսորների պատրաստում և տեղադրում
Սենսորների պատրաստում և տեղադրում
Սենսորների պատրաստում և տեղադրում

Այժմ մենք պատրաստվում ենք պատրաստել IR LED և ընդունիչ: Աղյուսակի նկարում կարող եք գտնել այն վայրերը, որտեղ պետք է տեղադրվեն RPi- ն և տվիչները:

Բայց նախ մենք պետք է պատրաստենք էլեկտրագծերը.

  1. Համոզվեք, որ չափեք մետաղալարերի քանակը, որոնք անհրաժեշտ են RPi/տախտակի տեղադրությունից մինչև սենսորի գտնվելու վայրը
  2. Receոդեք IR ստացողի կապում լարերի մի ծայրին (COM/GND/V+)
  3. Լարերի մյուս ծայրին միացրեք արական միակցիչի կտորները

Այժմ մենք պատրաստվում ենք պատրաստել սեղանը.

  1. Կատարեք հիմնական նկարը (նկարի հիման վրա), թե որտեղ պետք է փորել: Շատ կարևոր է, որ 2 անցքերը իրար հավասար լինեն, քանի որ սա կլինի ճառագայթների տեղադրման վայրը:
  2. Հորատեք անցքերը
  3. Եթե ունեք մի քանի լուսադիոդներ (հղում), կարող եք դրանք տեղադրել անցքի ներսում `այն ավելի ամուր դարձնելու համար
  4. Տեղադրեք + ժապավենը LED + ընդունիչը երկու կողմից
  5. Լարերը ամրացրեք + դրանք փայտով, որպեսզի դրանք շատ չանցնեն
  6. Տեղադրեք արական կապտուկները տախտակի վրա ՝ նախկինում տրամադրված սխեմայի համաձայն

Քայլ 5. Մատրիցային մոդուլի պատրաստում և տեղադրում

Մատրիցային մոդուլի պատրաստում և տեղադրում
Մատրիցային մոդուլի պատրաստում և տեղադրում

Հաջորդը մենք մտադիր ենք միացնել 2 LED մատրիցային մոդուլներ:

Նշում:

Քանի որ ես օգտագործում էի հին ֆոսբոլի սեղան, ծխախոտի բռնակների պատճառով արդեն անցքեր էին բարձրանում դեպի վերին հատվածը: Եթե դուք չունեք դրանք, ապա ձեզ հարկավոր կլինի դրանք ստեղծել:

Լարերը պատրաստելու համար.

  1. Չափեք մետաղալարը հացահատիկից դեպի սեղանի վերին հատվածը
  2. Լարերի առաջին ծայրին միացրեք մի քանի կին միակցիչներ
  3. Լարերի մյուս ծայրին միացրեք արական միակցիչներ

Մատրիցայի տեղադրում.

  1. Դուրս բերեք մատրիցը վերևի անցքից
  2. Rapապավեն + կպցրեք ներսի լարերը փայտի վրա, որպեսզի դրանք չանցնեն
  3. Տեղադրեք արական կապտուկները սեղանի վրա ՝ նախկինում տրամադրված ցիրկիի համաձայն

Ինչ -որ պահի ես կավելացնեմ մի փոքր DIY քայլ ՝ մատրիցային մոդուլի պատյան ավելացնելու համար, բայց առայժմ նրանք մերկ են:

Քայլ 6: Այն դարձնել IoT

Այն դարձնելով IoT
Այն դարձնելով IoT

Եթե դուք պարզապես ցանկանում եք գրանցել և ցուցադրել միավորները, կարող եք ավարտել նախագիծը ՝ գրելով փոքրիկ վազող պիթոնի սցենար, որը շրջվում է, մինչև որ հաշիվներից մեկը հասնի 9 -ի, այնուհետև վերակայվի:

Այնուամենայնիվ, եթե ցանկանում եք ձեր սեղանը միացնել ինտերնետին, հաջորդ մի քանի քայլերը պետք է ուղղվեն ձեր նրբանցքին:

Հաջորդ մի քանի քայլերում մենք կանդրադառնանք հետևյալին.

  • Raspberry Pi- ի կազմաձևում
  • Պահեստավորման համար տվյալների բազայի ստեղծում
  • Վեբ կայքի ստեղծում
  • Տեղադրելով այն առցանց

Այս պահին, եթե ծանոթ եք git- ին, խորհուրդ եմ տալիս u ստեղծել պահոց GitHub/GitLab- ում ՝ ձեր ֆայլերին հետևելու համար: Եթե դուք չեք, կարող եք ստեղծել նույն կառուցվածքով թղթապանակ, ինչպես նկարում:

Ամբողջ նախագիծը շուտով հասանելի կլինի GitHub- ում: Այնուամենայնիվ, առկա է ժամանակավոր rar ֆայլ ՝ բոլոր անհրաժեշտ ֆայլերով:

Քայլ 7: Միացրեք Raspberry Pi- ն

Հաջորդը մենք պատրաստվում ենք կարգավորել ազնվամորու pi միջավայրը, դրա համար անհրաժեշտ է կատարել հետևյալ քայլերը.

  • Միացեք SSH- ով ձեր Rasberry Pi- ին (կարող եք օգտագործել PuTTY)
  • Ստեղծեք թղթապանակ (օրինակ mkdir նախագիծ) և տեղափոխեք այս պանակը ՝ օգտագործելով cd հրամանը
  • Ստեղծեք վիրտուալ Python միջավայր այս թղթապանակում ՝ օգտագործելով python3 -m venv --system-site-packages env հրամանը
  • Ակտիվացրեք վիրտուալ թարգմանիչը աղբյուրի/env/bin/activ հրամանով
  • Տեղադրեք փաթեթները պահանջներից: txt python -m pip install package -name հրամանով
  • Նախկինում տրամադրված project_example.rar ֆայլից ֆայլերը փոխանցեք ձեր ծրագրի պանակում գտնվող SSH- ով

Այժմ դուք պետք է կարողանաք ամբողջ նախագիծը գործարկել ձեր Raspberry Pi- ի վրա: Ես խորհուրդ եմ տալիս օգտագործել Python IDE- ն, ինչպիսին է PyCharm- ը, որը թույլ է տալիս Ձեզ օգտագործել SSH- ում ձեր հեռակա թարգմանիչից կարգաբերելու և անհրաժեշտության դեպքում ուղղակիորեն փոփոխություններ ներբեռնելու համար:

Քայլ 8: Տվյալների բազայի ստեղծում

Ստեղծելով տվյալների շտեմարան
Ստեղծելով տվյալների շտեմարան

Այժմ դուք պետք է ստեղծեք շատ հիմնական տվյալների բազա ՝ հիմնված այս մոդելի վրա:

Դրանով զբաղվելու ամենահեշտ ձևը ձեր տվյալների բազան ստեղծելն է MySQL աշխատատեղում, որտեղ կարող եք նաև որոշ փորձարկումներ կատարել:

Ավարտելուց հետո կարող եք արտահանել ձեր տվյալների շտեմարանը և տեղադրել այն ձեր RPi- ում, այնուհետև այն կատարել sudo mariadb <pathtofile/file.sql- ով

Քայլ 9: Վեբ կայքի ստեղծում

Վեբ կայքի ստեղծում
Վեբ կայքի ստեղծում
Վեբ կայքի ստեղծում
Վեբ կայքի ստեղծում
Վեբ կայքի ստեղծում
Վեբ կայքի ստեղծում

Հաջորդը կարող եք վերլուծել (և օգտագործել) project_example.rar ֆայլում ներկայացված կոդը:

Հիմնական ֆայլը Flask.py- ն է, որն այս նախագծի հացն ու կարագն է.

  • Գործարկում է Flask-SocketIO ծրագիրը, որը կարգավորում է վեբ կայքի հետնամասը
  • Ստեղծում է կապ տվյալների բազայի և Flask- ի միջև
  • Ապահովում է մուտքի վավերացում և օգտագործողի գրանցում
  • Տրամադրում է անհրաժեշտ ծածկագիր, թե ինչպես խաղալ, օգտագործում է socketio- ն ՝ խաղի ընթացքում կայքը իրական ժամանակում թարմացնելու համար
  • Խաղի արդյունքները տեղադրում է տվյալների բազայում

Ստատիկ և ձևանմուշների պանակներում կարող եք գտնել HTML/CSS/JS- ը, որոնք ապահովում են կայքի առջևի հատվածը: Ազատորեն փոփոխեք դրանք ըստ ձեր սեփական նախասիրությունների:

Քայլ 10: Միացում Համաշխարհային ցանցին

Մեր կայքը վեբին միացնելու համար մենք կօգտագործենք nginx և uwsgi: Նախագծի օրինակով կարող եք գտնել անհրաժեշտ ֆայլերը conf թղթապանակում:

Այս ֆայլերում առաջին հերթին պետք է թարմացնել հետևյալը.

  • Uwsgi-flask.ini- ում պետք է վիրտուալ պարամետրերի ուղին փոխել ձեր թարգմանիչին
  • Project1-flask.service- ում դուք պետք է թարմացնեք ֆայլի առայություն] մասը ՝ ձեր հավատարմագրերով և հարակից ֆայլերի ուղիներով
  • Nginx ֆայլում անհրաժեշտ է թարմացնել սերվերը և գտնվելու վայրը / ուղին դեպի հարակից վարդակից

Հաջորդը դուք պետք է փոխարինեք կանխադրված nginx վեբ սերվերի ֆայլը ձեր nginx կազմաձևման ֆայլի տեղադրությամբ, ստորև բերված է դա Linux- ի հրամանների օրինակ

  • me@my-rpi:/project1 $ sudo cp conf/nginx/etc/nginx/sites-available/project1
  • me@my-rpi:/project1 $ sudo rm/etc/nginx/sites-enabled/defaul t
  • me@my-rpi:/project1 $ sudo ln -s/etc/nginx/կայքեր-հասանելի/project1/etc/nginx/կայքեր-միացված/նախագիծ 1
  • me@my-rpi: ~/project1 $ sudo systemctl վերագործարկել nginx.service

Ի վերջո, դուք պետք է ձեր համակարգված թղթապանակին ավելացնեք հարմարեցված ծառայություններ, սա օրինակ է, թե ինչպես դա անել.

  • me@my-rpi: ~/project1 $ sudo cp conf/project1-*. ծառայություն/այլն/systemd/system/
  • me@my-rpi: ~/project1 $ sudo systemctl daemon-reload
  • me@my-rpi:/project1 $ sudo systemctl սկսել նախագիծը 1-*
  • me@my-rpi: ~/project1 $ sudo systemctl կարգավիճակի նախագիծ 1-*

Եթե ցանկանում եք, որ վեբ սերվերը սկսի ձեր ազնվամորու pi- ի բեռնման ժամանակ, ապա պետք է օգտագործեք sudo systemctl միացման project1-*ծառայության հրամանը:

Եթե դա ճիշտ արվի, համակարգի վերագործարկումից հետո ձեր կայքը պետք է աշխատի ձեր IP հասցեով: Եթե ցանկանում եք խմբագրել այս կազմաձևման ֆայլերից մեկը, միշտ պետք է դադարեցնեք ծառայությունը, վերբեռնեք ֆայլերը և օգտագործեք daemon-reload հրամանը, որին հաջորդում է մեկնարկը, հակառակ դեպքում փոփոխությունները արդյունավետ չեն լինի:

Քայլ 11: Ավարտումը անջատված է

Ավարտումը անջատված է
Ավարտումը անջատված է

Այս ուսանելի ուսուցման վերջին մասը մուտքագրելիս ՝ այս փոքրիկ դպրոցական նախագիծը դեռ ընթացքի մեջ է:

Ես անհամար ժամեր եմ ծախսել 2,5 շաբաթվա ընթացքում դա անելու համար: Չնայած ամեն ինչ մի փոքր շտապեց, ես դեռ հպարտ եմ այն ամենով, ինչին հասել եմ: Մոնտաժման փուլում ես հանդիպել եմ անհամար սխալների/սխալների/անսարք սենսորների, այնպես որ շատ մի հուսահատվեք, եթե ամեն ինչ չի աշխատում առաջին փորձից:

Ամենալավ բանը, որ կարող եք անել, ինտերնետում օգնություն խնդրելն է կամ փնտրելը, կան շատ ավելի լավ գիտելիքներով մարդիկ, ովքեր շատ են ցանկանում օգնել ձեզ:

Վերջին, բայց ոչ ամենակարևորը, ես ուզում եմ շնորհակալություն հայտնել Նոր մեդիայի և հաղորդակցության տեխնոլոգիայի ուսուցիչներիս, ովքեր ինձ շատ խորհուրդներ տվեցին և օգնեցին ինձ ավարտել այս նախագիծը:

Խորհուրդ ենք տալիս: