Mundarija:

CleanBot Guillaume Meurillon: 8 qadam
CleanBot Guillaume Meurillon: 8 qadam

Video: CleanBot Guillaume Meurillon: 8 qadam

Video: CleanBot Guillaume Meurillon: 8 qadam
Video: Omgaan met verschil in beeld en muziek 2024, Iyul
Anonim
CleanBot Guillaume Meurillon tomonidan
CleanBot Guillaume Meurillon tomonidan
CleanBot Guillaume Meurillon tomonidan
CleanBot Guillaume Meurillon tomonidan

Bu men maktab uchun qilgan loyiham uchun qo'llanma. Maqsad, sensorlardan ma'lumotlarni yig'ish paytida, Internetga ulangan Raspberry Pi bilan qurilma yaratish edi. Bu ma'lumotlar (MySQL) ma'lumotlar bazasida saqlanishi kerak edi. Ma'lumotlar Pythonda Flask veb -ilovalari to'plami va Jinja2 shablonlari bilan kodlangan veb -sayt bilan vizualizatsiya qilinishi kerak edi.

Mening fikrim, Raspberry Pi, Arduino, allaqachon buzilgan robot vakuum va datchiklar yordamida "buzilgan" robot vakuumini yaratish edi.

1 -qadam: qismlarni yig'ish

Qismlarni yig'ish
Qismlarni yig'ish
Qismlarni yig'ish
Qismlarni yig'ish
Qismlarni yig'ish
Qismlarni yig'ish
Qismlarni yig'ish
Qismlarni yig'ish

Haqiqatan ham hech narsa yaratmasdan oldin, men qanday qismlarni ishlatish, ularni qanday ulash, Pythonda dasturiy ta'minot darslarini yozish va boshqalar haqida ko'p tadqiqotlar o'tkazdim.

Ehtiyot qismlar ro'yxati fayl sifatida qo'shiladi, shunda siz kerakli qismlarni osongina qidirishingiz mumkin.

Men Raspberry Pi yonida Arduino Uno -ni ishlatishga qaror qildim, shunda men sensorlarimni Raspberry Pi -ni zo'riqtirmasdan samarali o'qishim mumkin edi. Men ham Uno -ni tanladim, chunki u yaxshi soat tezligiga ega va analog pinlar tufayli. Men Raspberry Pi uchun ADC (masalan, MCP3008) dan foydalanishim mumkin edi, lekin menga ko'proq simlar kerak bo'lardi, bu qimmatroq bo'lardi va mening Pi ancha qattiq ishlashi kerak edi.

Keyin men buzilgan robot vakuumidan foydalanish mumkin bo'lgan qismlarni tekshirishni boshladim. Ichki elektronika shikastlangan, lekin bu muammo emas edi, chunki men baribir ularni butunlay almashtirardim. Luckilly DC dvigatellari hali ham ishlagan, shuning uchun ularning hech birini almashtirish kerak emas edi.

Qismlar ro'yxati:

  • Raspberry Pi 3, kamida 8 Gb MicroSD sinf 10 va korpusli;
  • Raspberry Pi T-oyoq kiyim va non taxtasi;
  • Arduino Uno yoki shunga o'xshash (ma'qul ADC-ga ega bo'lgan xitoycha bo'lmagan versiya, ba'zi xitoylarda AREF bilan bog'liq muammolar mavjud);
  • Ethernet kabeli;
  • A (singan) robot vakuum;
  • 3x HC-SR04 ultratovushli modullar;
  • 1x zali sensori moduli;
  • Har xil qiymatdagi bir nechta rezistorlar;
  • LDR;
  • 6x 18650 Li-ionli batareyalar + 12v uchun 3-xujayrali ushlagichlar (yaxshisi yangi batareyalardan yoki LiPo batareyalaridan yaxshiroq foydalanish kerak, ular uzoq vaqt xizmat qiladi);
  • 18650 (yoki siz qaysi turdagi batareyani ishlatasiz) 12v 3 hujayrali zaryadlovchi kompyuter;
  • Komponentlarni lehimlash uchun ba'zi PCB DIY plitalari;
  • Poliuretan plastmassa varaq;
  • Laptop / ish stoli kompyuter.

Asboblar ro'yxati:

  • Bir nechta matkap uchlari bo'lgan matkap;
  • Burchakni maydalagich (tajribangiz bo'lmasa, ishlatmang) yoki Dremelga o'xshash narsa;
  • Zımpara qog'ozi;
  • Bir nechta tornavida;
  • Super yopishtiruvchi, o'rnatuvchi elim,…;
  • Lehimlantiruvchi temir (simlarni osonroq lehimlash uchun surtma ishlating);
  • Bir juft tel kesgich va qirib tashlash vositasi.

Dasturlar ro'yxati (ixtiyoriy):

  • Adobe XD: simlarni ramkalash va prototip yaratish;
  • Fritzing: elektr sxemasini yaratish;
  • PyCharm Professional: tarqatish va masofadan tarjimondan foydalanish imkoniyatiga ega Python IDE;
  • Putty: Pi bilan tez va oson ssh aloqasi;
  • Etcher.io: Raspbian tasvirini SD -kartaga o'chirish uchun qulay vosita;
  • Win32DiskImager: mavjud Raspbian sozlamasidan rasm yaratishning oson vositasi;
  • Notepad dasturchilari: /boot/cmdline.txt faylini xavfsiz tahrirlash uchun foydalanishingiz mumkin bo'lgan oddiy vosita.

2-qadam: buzadigan amallar bilan bo'yash va interfeysni loyihalash

Buzadigan amallar bilan bo'yash va interfeysni loyihalash
Buzadigan amallar bilan bo'yash va interfeysni loyihalash
Buzadigan amallar bilan bo'yash va interfeysni loyihalash
Buzadigan amallar bilan bo'yash va interfeysni loyihalash
Buzadigan amallar bilan bo'yash va interfeysni loyihalash
Buzadigan amallar bilan bo'yash va interfeysni loyihalash
Buzadigan amallar bilan bo'yash va interfeysni loyihalash
Buzadigan amallar bilan bo'yash va interfeysni loyihalash

Dizaynni yaratishni boshlashdan oldin, men tashqi qismini purkagich bilan bo'yadim, chunki menga ranglar umuman yoqmadi. Do'konga bordim va yuqori korpusni qayta bo'yash uchun plastik astar, oq quti va firuza qutisini oldim.

Püskürtmeli bo'yoqni quritib qo'ygandan so'ng, men ishlatilgan bo'yoq uchun o'n olti rangli kodni qidirib topdim, shunda men o'z veb-interfeysimni qurilmamga to'liq moslashtira oldim. Bu o'n oltilik kodni topish juda oson edi, chunki men Montana 94 grafitidan foydalanganman va hex va RGB kodlari o'z veb -saytida bo'lgan.

Men veb-saytimning har bir sahifasi uchun yuqori aniqlikdagi simli kadrlar yaratdim, shuning uchun men bu interfeysni qanday yaratishni juda yaxshi bilardim. O'qituvchilarimga interfeysimni ko'rsatgandan so'ng, fonni biroz kulrang qilish va tugmalarni oqartirish bo'yicha maslahat oldim va natija menimcha yaxshi bo'ldi.

3 -qadam: Ma'lumotlar bazasini yaratish

Ma'lumotlar bazasini yaratish
Ma'lumotlar bazasini yaratish

Keyingi mantiqiy qadam, MySQL ma'lumotlar bazasida qanday ma'lumotlarni saqlamoqchi ekanligimni o'ylashni boshlash edi. Ko'pchilik o'z vakuumini bilishni yoqtirmaydi, shuning uchun men foydalanuvchilar uchun jadvallar va ularning kirish ma'lumotlari, shuningdek sensorlar uchun jadvallar (batareya, masofa va chang idishi) bilan bordim.

Rasmda MySQL Workbench -da chizilgan jadvallar sxemasi ko'rsatilgan va jadvallar orasidagi barcha munosabatlar ko'rsatilgan.

Foydalanuvchilar uchun men interfeys va elektron pochta xabarlarini shaxsiylashtirish uchun ularning ismi va familiyasini kuzatib borishni xohlardim. Albatta, elektron pochta xabarlarini yuborish uchun menga ularning elektron pochta manzili ham kerak edi. Men shuningdek, foydalanuvchilarning elektron pochta xabarlarini (elektron pochta xabarlarini olishni xohlayaptimi yoki yo'qligini) kuzatib borish uchun jadval qo'shdim. Foydalanuvchilar haqida saqlamoqchi bo'lgan oxirgi narsa - bu ularning qurilmadagi o'rni. Men foydalanuvchilarni administrator va oddiy foydalanuvchilarga ajrataman. Administratorlar tizimga foydalanuvchilarni qo'shish, o'chirish va boshqarish huquqiga ega, oddiy foydalanuvchilar esa bu vositalarga kira olmaydi.

Keyingi jadvalda "deviceruns" mavjud, ular qurilma bajargan haqiqiy operatsiyalardir. Qurilmalar ma'lum bir foydalanuvchiga (yugurishni boshlagan kishiga) tegishli bo'lib, ish vaqtini hisoblash uchun boshlanish va tugash vaqtiga ega.

Sensordata -ni har bir qurilmaga ulash uchun boshqa jadval ishlatiladi. Sensorlarning o'zi id, ism va tavsifni o'z ichiga olgan boshqa jadvalda saqlanadi.

4 -qadam: qismlarni bir -biriga ulash

Qismlarni bir -biriga ulash
Qismlarni bir -biriga ulash
Qismlarni bir -biriga ulash
Qismlarni bir -biriga ulash

Ma'lumotlar bazasi sxemasini tuzganimdan so'ng, men barcha qismlarni bitta ishlaydigan prototipga ulash uchun taxtalar va simlardan foydalana boshladim.

5 -qadam: Raspberry Pi -ni sozlash

Raspberry Pi -ni sozlash
Raspberry Pi -ni sozlash

Raspbian -ning so'nggi rasmini yuklab olish uchun Raspbian veb -saytiga o'ting. Bu erda siz qaysi tarqatishni yuklab olishni xohlaysiz. Tezroq ishlash uchun siz RAMdan kamroq foydalanish uchun boshsiz taqsimotni yuklab olishingiz yoki grafik interfeysni afzal ko'rsangiz, GUI yordamida ish stolini yuklab olishingiz mumkin.

Operatsion tizimni o'rnatish uchun Etcher -ni yuklab oling, bu tasvirni micro SD kartangizga tez va oson yozish uchun GUI vositasi.

Boshsiz rejimni yoqish uchun siz pi -ga kirishingiz uchun kompyuteringizga Putty -ni o'rnatishingiz kerak bo'ladi. Keyingi qadam - Etcher tomonidan yaratilgan Boot papkasiga o'tish va cmdline.txt faylini sevimli matn muharriri bilan ochish, masalan Programmers Notepad. Fayl oxiriga ushbu matnni qo'shing:

ip = 169.254.10.1

Siz yangi qator yaratmasligingizga ishonch hosil qiling, buni qator oxiriga qo'shing!

Keyin Boot papkasining ildiziga qayting va ssh nomli fayl yarating. Kengaytma qo'shmang, bu sizning Pi ishga tushganda SSH serveri ishga tushishini ta'minlaydi. Endi SD -kartani Pi -ga qo'ying, Pi -ga etarlicha quvvat manbaini ulang va Pi va kompyuteringiz o'rtasida chekilgan kabelni qo'shing.

Macni oching va IP manzilini kiriting: 169.254.10.1. Endi "Ha" ni bosing va kiring, standart foydalanuvchi nomi pi va parol malina.

Keyin yangilanish uchun quyidagi buyruqni bajaring:

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

Oxirgi qadam - Raspberry Pi -da virtual Python tarjimonini yaratish, bu sizning kodingizni bajaradi. Buning uchun macunni oching va quyidagilarni yozing:

sudo mkdir loyihasi1

cd project1 python3 -m pip o'rnatish -pip setuptools g'ildiragini virtualizatsiya python3 -m venv -system -site -packages venv

6-qadam: Internet-ilovasini yozish

Web-ilovani yozish
Web-ilovani yozish

Har bir qismni ulab, Raspberry Pi ni o'rnatgandan so'ng, men Flask va Jinja2 yordamida asosiy veb-ilovamni yozishni boshladim. Flask-bu Python uchun oson ishlatiladigan orqa fon, Jinja2-men ishlatgan shablon tili. Jinja yordamida siz oddiy HTML fayllarini looplar uchun, agar tuzilmalar va boshqalar bo'lsa, yaratishingiz mumkin.

Orqa fonni kodlashda men, shuningdek, ba'zi elementlar uchun HTML, CSS va JavaScript -ni o'z ichiga olgan ilovaning oldingi qismini yozdim. Men uslublar jadvallarim uchun ITCSS usuli va BEM yozuvidan foydalandim.

Asosiy veb-ilovadan tashqari, men yana ikkita asosiy dasturni yaratdim. Ulardan biri qurilmaning IP -manzilini ro'yxatdagi foydalanuvchilarga yuborish uchun yozilgan. Elektron pochta xabarlarini qabul qilgan har bir ro'yxatdan o'tgan foydalanuvchi veb -interfeysni ishga tushirish uchun havolali xat oladi. Bu dastur systemd xizmati sifatida ishlaydi.

Boshqa asosiy fayl haqiqiy qurilma uchun. Bu Flask ilovasi orqali qurilmani ishga tushirish va to'xtatish va ma'lumotlarni yig'ish uchun qo'ng'iroq qilish mumkin. To'plangan ma'lumotlar ham ushbu magistral orqali qurilmaning ma'lumotlar bazasiga yuklanadi. Keyin bu ma'lumotlarni veb-ilovada ko'rish mumkin.

Veb-dastur Python Threading yordamida asosiy qurilmaga ulangan. Foydalanuvchi ishga tushirish tugmachasini bosganida, qurilmani fonda ishlatish uchun ip hosil bo'ladi. Shu bilan birga, foydalanuvchi dasturni mukammal ko'rib chiqishi mumkin. "To'xtatish" tugmachasini bosganingizda, bu mavzu to'xtatiladi va shuning uchun qurilma to'xtaydi.

7 -qadam: Qoplamani tugatish uchun qismlar yaratish

Qoplamani tugatish uchun qismlar yaratish
Qoplamani tugatish uchun qismlar yaratish
Qoplamani tugatish uchun qismlar yaratish
Qoplamani tugatish uchun qismlar yaratish
Qoplamani tugatish uchun qismlar yaratish
Qoplamani tugatish uchun qismlar yaratish
Qoplamani tugatish uchun qismlar yaratish
Qoplamani tugatish uchun qismlar yaratish

Ilovaning eng katta qismini yozgandan so'ng, men sensorlar va boshqa qismlar mos bo'lishi uchun qurilmaning korpusini o'zgartira boshladim. Buning uchun men mahalliy DIY do'konida poliuretan varag'ini sotib oldim va 2 qavsni kesib boshladim. Men bu poliuretan varag'idan foydalandim, chunki uni kesish paytida bo'laklarga bo'linib ketmaydi va u juda moslashuvchan, chunki bu mening robotim yumaloq shaklga ega.

Birinchi qavs yuqoridagi teshikni to'ldirish uchun qilingan, u erda displey o'tirardi. Men batareyani o'chirish uchun displeyni yoqish/o'chirish tugmasi bilan almashtirdim.

Boshqa qavs-bu mening oldimda joylashgan HC-SR04 ultratovushli sensorlarimni qo'llab-quvvatlash.

Qolgan oxirgi narsa - g'ildiraklarning birining mustahkamlovchi qismidagi teshikni kesib tashlash va g'ildirakning aylanishini kuzatish uchun magnit qo'yish.

Bu qavslarni tugatgandan so'ng, men ham dizaynga mos bo'lishi uchun ularni qoldirgan bo'yoq bilan bo'yab qo'ydim.

8 -qadam: Kod

Dasturni o'rnatish uchun code.zip faylini yuklab oling va uni project1 katalogida oching.

Keyin, bu buyruqni Raspbian yoki Putty terminalida bajaring:

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

sudo cp project1/conf/project1-*/etc/systemd/system/sudo systemctl daemon-reload sudo systemctl project-1* sudo systemctl faollashtirish project1* sudo systemctl restart nginx

Keyin, siz yaratgan ma'lumotlar bazasini oching va Argon2 xeshli parol bilan yangi foydalanuvchi yarating. Endi siz dasturdan foydalanishingiz mumkin.

Xursand bo'ling!

Tavsiya: