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

CleanBot Guillaume Meurillon- ի կողմից. 8 քայլ
CleanBot Guillaume Meurillon- ի կողմից. 8 քայլ

Video: CleanBot Guillaume Meurillon- ի կողմից. 8 քայլ

Video: CleanBot Guillaume Meurillon- ի կողմից. 8 քայլ
Video: Guillaume Machaut Virelai: "Quant je suis mis" 2024, Հուլիսի
Anonim
CleanBot- ը ՝ Guillaume Meurillon- ի կողմից
CleanBot- ը ՝ Guillaume Meurillon- ի կողմից
CleanBot- ը ՝ Guillaume Meurillon- ի կողմից
CleanBot- ը ՝ Guillaume Meurillon- ի կողմից

Սա ուղեցույց է այն նախագծի համար, որը ես պատրաստել եմ դպրոցի համար: Նպատակը Raspberry Pi- ի միջոցով ինտերնետին միացված սարքի ստեղծումն էր ՝ միաժամանակ սենսորներից տվյալներ հավաքելով: Այս տվյալները պետք է պահվեին (MySQL) տվյալների բազայում: Տվյալները պետք է արտացոլվեին վեբ կայքի միջոցով ՝ կոդավորված Python- ում ՝ Flask webapp փաթեթով և Jinja2 կաղապարով:

Իմ գաղափարն էր ստեղծել «կոտրված» ռոբոտների վակուում ՝ օգտագործելով Raspberry Pi, Arduino, արդեն կոտրված ռոբոտների վակուում և մի շարք սենսորներ:

Քայլ 1: Մասերի հավաքում

Մասերի հավաքում
Մասերի հավաքում
Մասերի հավաքում
Մասերի հավաքում
Մասերի հավաքում
Մասերի հավաքում
Մասերի հավաքում
Մասերի հավաքում

Մինչև որևէ բան ստեղծելը, ես շատ հետազոտություններ կատարեցի այն մասին, թե ինչ մասեր օգտագործել, ինչպես միացնել դրանք, ծրագրաշարի դասեր գրել Python- ում և այլն:

Մասերի ցանկը կներառվի որպես ֆայլ, որպեսզի հեշտությամբ կարողանաք որոնել ձեզ անհրաժեշտ մասերը:

Ես որոշեցի օգտագործել Arduino Uno- ն Raspberry Pi- ի կողքին, որպեսզի կարողանամ արդյունավետ կարդալ իմ տվիչները ՝ առանց շեշտելու իմ Raspberry Pi- ին: Ես նաև ընտրեցի Uno- ի համար, քանի որ այն ունի ժամացույցի գեղեցիկ արագություն և անալոգային կապում: Ես կարող էի օգտագործել ADC (օրինակ ՝ MCP3008) իմ Raspberry Pi- ի համար, բայց ինձ շատ ավելի լարեր կպահանջվեին, դա ավելի թանկ կլիներ, և իմ Pi- ն ստիպված կլիներ ավելի շատ աշխատել:

Այնուհետև ես սկսեցի ստուգել այն մասերը, որոնք օգտագործելի էին կոտրված ռոբոտի վակուումից: Ներքին էլեկտրոնիկան վնասված էր, բայց դա խնդիր չէր, քանի որ ամեն դեպքում ես դրանք ամբողջությամբ կփոխարինեի: Բարեբախտաբար, DC շարժիչները դեռ աշխատում էին, ուստի դրանցից ոչ մեկը պետք չէր փոխարինել:

Մասերի ցուցակ

  • Raspberry Pi 3 առնվազն 8 ԳԲ MicroSD դաս 10 և պատյանով;
  • Raspberry Pi T-cobbler and breadboard (ներ);
  • Arduino Uno կամ նմանատիպ (նախընտրելի է ոչ չինական տարբերակ ՝ արժանապատիվ ADC- ով, որոշ չինացիներ ունեն AREF- ի խնդիրներ) ինչ-որ պատյանով;
  • Ethernet մալուխ;
  • Ռոբոտի (կոտրված) վակուում;
  • 3x HC-SR04 ուլտրաձայնային մոդուլներ;
  • 1x սրահի սենսորային մոդուլ;
  • Տարբեր արժեքների մի քանի դիմադրիչներ;
  • LDR;
  • 6x 18650 Li-ion մարտկոցներ + 12 վ լարման 3 բջջային կրիչներ (գերադասելի է օգտագործել նոր մարտկոցներ կամ նույնիսկ ավելի լավ օգտագործել LiPo մարտկոցներ, դրանք ավելի երկար կտևեն);
  • 18650 (կամ ինչ տեսակի մարտկոց եք օգտագործելու) 12 վ 3 բջջային լիցքավորման հատ;
  • Որոշ PCB DIY տախտակներ `ձեր բաղադրիչները միացնելու համար;
  • Պոլիուրեթանային պլաստիկի թերթ;
  • Նոթբուք / աշխատասեղան համակարգիչ:

Գործիքների ցուցակ

  • Մի քանի փորված բիթերով փորվածք;
  • Անկյունային սրիչ (մի օգտագործեք այն, եթե փորձ չունեք) կամ Dremel- ի նման մի բան.
  • Հղկող թղթի կտոր;
  • Մի քանի պտուտակահան;
  • Սոսինձ, ամրացնող սոսինձ,…;
  • Eringոդման երկաթ (օգտագործեք քսուք ձեր լարերը ավելի հեշտությամբ կպցնելու համար);
  • Մի զույգ մետաղալար կտրող և մերկացնող գործիք:

Softwareրագրաշարի ցուցակ (ըստ ցանկության)

  • Adobe XD. Մետաղալարերի շրջանակում և նախատիպի ստեղծում;
  • Fritzing: էլեկտրական սխեմայի ստեղծում;
  • PyCharm Professional. Python IDE ՝ տեղակայման և հեռակա թարգմանիչ օգտագործելու հնարավորություններով;
  • Tyեփամածիկ. Արագ և հեշտ ssh կապ Pi- ի հետ;
  • Etcher.io. Raspbian պատկերը SD քարտին միացնելու հեշտ գործիք;
  • Win32DiskImager. Հեշտ գործիք ՝ առկա Raspbian կարգավորումից պատկեր ստեղծելու համար;
  • Mersրագրավորողների գրքույկ. Պարզ գործիք, որը կարող եք օգտագործել /boot/cmdline.txt ֆայլը ապահով խմբագրելու համար:

Քայլ 2: Սփրեյ-ներկում և միջերեսի ձևավորում

Սփրեյ-ներկում և ինտերֆեյսի ձևավորում
Սփրեյ-ներկում և ինտերֆեյսի ձևավորում
Սփրեյ-ներկում և ինտերֆեյսի ձևավորում
Սփրեյ-ներկում և ինտերֆեյսի ձևավորում
Սփրեյ-ներկում և ինտերֆեյսի ձևավորում
Սփրեյ-ներկում և ինտերֆեյսի ձևավորում
Սփրեյ-ներկում և ինտերֆեյսի ձևավորում
Սփրեյ-ներկում և ինտերֆեյսի ձևավորում

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

Սփրեյ ներկը չորացնելուց հետո ես փնտրեցի օգտագործված ներկի ճշգրիտ վեցանկյուն գույնի ծածկագիրը, որպեսզի կարողանամ կատարելապես համապատասխանեցնել իմ վեբ-ինտերֆեյսը իմ սարքի հետ: Այս վեցանկյուն ծածկագիրը գտնելը բավականին հեշտ էր, քանի որ ես օգտագործում էի Մոնտանա 94 գրաֆիտի, իսկ վեցանկյուն և RGB ծածկագրերը գտնվում էին իրենց կայքում:

Իմ վեբ կայքի յուրաքանչյուր էջի համար ես ստեղծեցի բարձր հավատարմության շրջանակներ, այնպես որ ես հիանալի գիտեի, թե ինչպես եմ պատրաստվում ստեղծել այս ինտերֆեյսը: Ուսուցիչներիս իմ ինտերֆեյսը ցույց տալուց հետո ես խորհուրդ ստացա ՝ հետին պլանը մի փոքր ավելի մոխրագույն դարձնել, իսկ կոճակները ՝ սպիտակ, և արդյունքն իմ կարծիքով լավն էր:

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

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

Հաջորդ տրամաբանական քայլը սկսեց մտածել, թե ինչ տվյալներ եմ ուզում պահել MySQL տվյալների բազայում: Այնքան էլ շատ մարդիկ չեն սիրում իմանալ իրենց վակուումի մասին, այնպես որ ես գնացի օգտվողների և նրանց մուտքի տվյալների, ինչպես նաև տվիչների (մարտկոցի, հեռավորության և փոշու տարա) սեղանների հետ:

Պատկերը ցույց է տալիս MySQL Workbench- ում նկարված իմ սեղանների դասավորությունը `աղյուսակների միջև բոլոր հարաբերություններով:

Իմ օգտվողների համար ես ուզում էի հետևել նրանց անունին և ազգանունին ՝ ինտերֆեյսը և էլ. Հասցեներն անհատականացնելու համար: Իհարկե, էլեկտրոնային նամակներ ուղարկելու համար ինձ անհրաժեշտ էր նաև նրանց էլ. Ես նաև ավելացրեցի աղյուսակ ՝ իմ օգտվողների էլ. Վերջին բանը, որ ես ուզում էի պահել օգտվողների մասին, դա նրանց դերն է սարքի համար: Ես բաժանում եմ օգտվողներին որպես ադմինիստրատորներ և սովորական օգտվողներ: Ադմինիստրատորներն իրավունք ունեն համակարգում ավելացնել, հեռացնել և կառավարել օգտվողներին, մինչդեռ սովորական օգտվողները չեն կարող մուտք գործել այդ գործիքները:

Հաջորդ աղյուսակը պարունակում է «deviceruns», որոնք են սարքի իրական գործարկումները: Deiceruns- ը պատկանում է որոշակի օգտվողի (վազքը սկսած անձին) և ունեն մեկնարկի և ավարտի ժամ `աշխատաժամանակը հաշվարկելու համար:

Մեկ այլ աղյուսակ է օգտագործվում sensordata- ն յուրաքանչյուր devicerun- ին կապելու համար: Սենսորներն իրենք պահվում են մեկ այլ աղյուսակում, որը պարունակում է նրանց id, անունը և նկարագրությունը:

Քայլ 4: Մասերը միասին միացնելը

Մասերը միասին միացնելը
Մասերը միասին միացնելը
Մասերը միասին միացնելը
Մասերը միասին միացնելը

Տվյալների բազայի սխեման ստեղծելուց հետո ես սկսեցի օգտագործել տախտակներ և էլեկտրագծեր `բոլոր մասերը միմյանց միացնելու համար մեկ աշխատանքային նախատիպի մեջ:

Քայլ 5: Ազնվամորու Pi- ի կարգավորում

Ազնվամորու Պի կարգավորում
Ազնվամորու Պի կարգավորում

Raspbian- ի վերջին պատկերը ներբեռնելու համար այցելեք Raspbian կայքը: Այստեղ կարող եք ընտրել, թե որ դիստրոյն եք ցանկանում ներբեռնել: Ավելի արագ շահագործման համար կարող եք ներբեռնել անգլուխ դիստրոյը, RAM- ի ավելի քիչ օգտագործման համար կամ ներբեռնել աշխատասեղանը GUI- ով, եթե նախընտրում եք գրաֆիկական ինտերֆեյս:

ՕՀ -ը տեղադրելու համար պարզապես ներբեռնեք Etcher, դա GUI գործիք է ՝ պատկերն արագ և հեշտությամբ ձեր միկրո SD քարտին գրելու համար:

Գլխավոր ռեժիմը միացնելու համար, որպեսզի կարողանաք մուտք գործել pi, ձեզ հարկավոր է տեղադրել Putty ձեր համակարգչում: Հաջորդ քայլը պետք է գնալ Etcher- ի ստեղծած Boot թղթապանակին և բացել cmdline.txt ֆայլը ձեր նախընտրած տեքստային խմբագրիչով, նախկին Programmers Notepad- ով: Ավելացրեք այս տեքստը ֆայլի վերջում.

ip = 169.254.10.1

Պարզապես համոզվեք, որ նոր գիծ չեք ստեղծում, սա ավելացրեք տողի վերջում:

Հաջորդը, վերադառնաք Boot թղթապանակի արմատին և ստեղծեք ssh անունով ֆայլ: Մի ավելացրեք որևէ ընդլայնում, սա կապահովի, որ SSH սերվերը գործարկվի ամեն անգամ, երբ ձեր Pi- ն գործարկվի: Այժմ պարզապես տեղադրեք SD քարտը ձեր Pi- ում, միացրեք բավարար էներգիայի աղբյուր ձեր Pi- ին և ավելացրեք Ethernet մալուխ ձեր Pi- ի և ձեր համակարգչի միջև:

Բացեք ծեփամածիկը և մուտքագրեք IP հասցեն ՝ 169.254.10.1: Այժմ կտտացրեք ԱՅՈ և մուտք գործեք, կանխադրված օգտվողի անունը pi է, իսկ գաղտնաբառը `ազնվամորի:

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

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y

Վերջնական քայլը ձեր Raspberry Pi- ի վրա ստեղծել վիրտուալ Python թարգմանիչ, դա կկատարի ձեր կոդը: Դա անելու համար պարզապես բացեք ծեփամածիկը և մուտքագրեք հետևյալը.

sudo mkdir նախագիծ 1

cd project1 python3 -m pip install -upgrade pip setuptools wheel virtualenv python3 -m venv -system -site -packages venv

Քայլ 6: Վեբ հավելվածի գրառում

Վեբ հավելվածի գրառում
Վեբ հավելվածի գրառում

Յուրաքանչյուր մաս միացնելուց և Raspberry Pi- ի տեղադրումից հետո ես սկսեցի գրել իմ հիմնական վեբ ծրագիրը `օգտագործելով Flask և Jinja2: Flask- ը Python- ի համար հեշտ օգտագործվող backend շրջանակ է, իսկ Jinja2- ը այն կաղապարային լեզուն է, որը ես օգտագործել եմ: Jinja- ի հետ դուք կարող եք ստեղծել սովորական HTML ֆայլեր օղակների համար, եթե կան կառուցվածքներ և այլն:

Հետևի ծածկագիրը կոդավորելիս ես նաև դիմումի հիմնական հատվածն եմ գրել, ներառյալ HTML, CSS և JavaScript որոշ տարրերի համար: Ես օգտագործել եմ ITCSS մեթոդը և BEM նշումը իմ ոճաթերթերի համար:

Բացի հիմնական վեբ հավելվածից, ես ստեղծեցի նաև 2 այլ հիմնական ծրագրեր: Մեկը գրված է `սարքի IP հասցեն ցանկում օգտագործողներին ուղարկելու համար: Յուրաքանչյուր գրանցված օգտվող, ով ընդունել է նամակներ ստանալը, կստանա նամակ `վեբ ինտերֆեյսը գործարկելու հղումով: Այս ծրագիրը գործում է որպես համակարգված ծառայություն:

Մյուս հիմնական ֆայլը իրական սարքի համար է: Այս հիմնականը զանգահարելի է իմ Flask հավելվածի միջոցով ՝ սարքը գործարկելու և դադարեցնելու և տվյալներ հավաքելու համար: Հավաքված տվյալները նույնպես բեռնվում են սարքի տվյալների բազայում այս հիմնականի միջոցով: Այս տվյալները կարող են վիզուալացվել վեբ հավելվածում:

Վեբ-ծրագիրը միացված է Python Threading- ով հիմնական սարքին: Երբ օգտվողը կտտացնում է մեկնարկի կոճակին, ստեղծվում է թել ՝ սարքը հետին պլանում գործարկելու համար: Մինչդեռ օգտվողը կարող է կատարելապես թերթել հավելվածը: Երբ կանգառ սեղմելիս այս շարանը կանգ է առնում և սարքը դադարում է:

Քայլ 7: Պատյաններ ավարտելու համար կտորներ ստեղծելը

Ստեղծելով պատյաններ ավարտելու կտորներ
Ստեղծելով պատյաններ ավարտելու կտորներ
Ստեղծելով պատյաններ ավարտելու կտորներ
Ստեղծելով պատյաններ ավարտելու կտորներ
Ստեղծելով պատյաններ ավարտելու կտորներ
Ստեղծելով պատյաններ ավարտելու կտորներ
Ստեղծելով պատյաններ ավարտելու կտորներ
Ստեղծելով պատյաններ ավարտելու կտորներ

Theրագրի ամենամեծ մասը գրելուց հետո ես սկսեցի փոփոխել սարքի պատյանը, որպեսզի իմ սենսորներն ու մյուս մասերը իրականում տեղավորվեն: Դա անելու համար ես պոլիուրեթանային թերթ գնեցի տեղական DIY խանութում և սկսեցի կտրել 2 փակագիծ: Ես օգտագործեցի պոլիուրեթանային այս թերթիկը, քանի որ այն կտրելու հավանականություն չկա, և քանի որ այն բավականին ճկուն է, ինչը կատարյալ է, քանի որ իմ ռոբոտը ունի շրջանաձև ձև:

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

Մյուս փակագիծը հենարան է իմ HC-SR04 ուլտրաձայնային տվիչների համար, որոնք տեղադրված են սարքի առջևում:

Վերջին բանը, որ պետք էր անել, անիվներից մեկի ամրացումներում փոս կտրելն էր և մագնիս տեղադրելը, որպեսզի կարողանայի հետևել անիվի պտույտներին:

Այս փակագծերն ավարտելուց հետո ես դրանք ներկեցի նաև ներկով, որը մնացել էր, որպեսզի այն համապատասխանի դիզայնին:

Քայլ 8: Կոդ

Installրագիրը տեղադրելու համար ներբեռնեք ֆայլը code.zip և բացեք այն project1 գրացուցակում:

Հաջորդը, կատարեք այս հրամանը Raspbian- ի կամ Putty- ի տերմինալում.

sudo cp project1/conf/project-1*/etc/systemd/system/

sudo cp project1/conf/project1-*/etc/systemd/system/sudo systemctl դեմոն-վերաբեռնում sudo systemctl միացնել նախագիծը -1* sudo systemctl միացնել նախագիծը 1* sudo systemctl վերագործարկել nginx

Հաջորդը, բացեք ձեր ստեղծած տվյալների բազան և ստեղծեք նոր օգտվող Argon2 խուզած գաղտնաբառով: Այժմ կարող եք օգտագործել ծրագիրը:

Վայելեք:

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