Mundarija:

Kontaktsiz suv favvorasi: 9 qadam (rasmlar bilan)
Kontaktsiz suv favvorasi: 9 qadam (rasmlar bilan)

Video: Kontaktsiz suv favvorasi: 9 qadam (rasmlar bilan)

Video: Kontaktsiz suv favvorasi: 9 qadam (rasmlar bilan)
Video: Desktop Fountain Water Without Electricity Ver.9 | น้ำพุไม่ใช้ไฟฟ้า ทำจากขวดน้ำ แบบที่ 9 2024, Iyul
Anonim
Kontaktsiz suv favvorasi
Kontaktsiz suv favvorasi

MCT talabasi sifatida birinchi yilim oxirida menga yil davomida kurslardan olgan barcha ko'nikmalarimni o'z ichiga olgan loyihani tuzish topshirildi.

Men o'qituvchilar tomonidan qo'yilgan barcha talablarni tekshiradigan va shu bilan birga men uchun qiziqarli bo'ladigan loyihani qidirardim. Mavzuni izlayotganda, men o'zimni ilhomlantira olmadim, Covid-19 (Bu dunyo miqyosida avj olishidan oldin edi.) Men aloqa qilish uchun kamroq suv bulog'i/dispenserini tanladim. suv chiqmasidan oldin ba'zi tugmachalarga tegmasdan suv ichish.

Bu loyiha masofa sensori yordamida suv chiqishi ostiga chashka yoki stakan qo'yilganligini aniqlaydi, shundan keyin favvora 60 soniya (100ml / daqiqa) suv chiqa boshlaydi. Bu yanada izchil bo'lishi uchun, chunki oynaning tortib olinganligini aniqlash vazifani bajarish juda qiyin/sekin ekanligini ko'rsatdi, shuning uchun taymer o'rnatildi. Sizning stakaningiz 100 ml suv bilan to'ldirilgandan so'ng, siz 5 soniya kutishingiz mumkin va agar shisha hali ham masofa sensori oldida bo'lsa, u boshqa vaqtni to'ldiradi (bu shuni anglatadiki, ikki xil to'ldirish o'rtasida 5 soniya tanaffus ham bor) narsalar).

Ta'minotlar

Komponentlar

- 1x RaspberryPi (men 4-chi versiyani ishlatardim, lekin eski versiyalar ham ishlashi mumkin)- 1x S8050 tranzistor yoki 1x PN2222 tranzistor ham ishlashi mumkin- 1x Fotoresistor- 1x HC-SR04 (Ultrasonik masofa sensori)- 1x RFID-RC522- 3x farqli ranglar LEDlari (ko'k, sariq, qizil)- 1x LCD1602- 1x faol buzzer- 1x PCF8574- 1x MCP3008- 1x suv nasosi (12v peristaltik nasos ishlatilgan, ushbu havola)

- 1x shahar quvvat manbai (12v, 600mAh)- 1 ta 3 g'ishtli g'ishtli g'isht- 3x taxtali (ehtimol siz kamroq ishlatishingiz mumkin)- RaspberryPi GPIO pinlari uchun T-burg'ulash moslamasi- T-tikuvchi kabeli (pi va oyoq kiyimlarini ulash uchun)

Amaldagi materiallar va asboblar

- Quyidagi matkap uchlari bo'lgan matkap:

- 4 mm (vintlar uchun oldindan burg'ulash uchun) - 15 mm (masofa sensori uchun teshiklarni burg'ilash uchun)

- Har qanday tornavida- 45 mm uzunlikdagi 30 vint- 20 mm 6 vint- eshik uchun 2 ta menteşe- MDF plastinkasi taxminan 130 sm dan 80 sm gacha- bir nechta fayl

1 -qadam: O'chirish sxemasini yig'ish

Devrenni yig'ish
Devrenni yig'ish
Devrenni yig'ish
Devrenni yig'ish
Devrenni yig'ish
Devrenni yig'ish

O'chirish uchun bizda 2 ta sensor, masofa sensori va fotorezistor mavjud. Masofa sensori chashka suv bulog'iga joylashtirilganligini aniqlash uchun ishlatiladi va ixtiyoriy ravishda men fotorezistor qo'shdim, bu korpus ochilmaydigan kishi tomonidan ochilganligini aniqlash uchun ishlatiladi. Buning ustiga bizda RFID o'quvchi bor, bu suv omborini to'ldirish uchun yoki boshqa mexanik muammo uchun ishni ochish kerak bo'lgan mexanikni tasdiqlash uchun ishlatilishi mumkin.

Bizda mavjud bo'lgan LCD1602, faol signal va peristaltik nasosli faol elementlar uchun LCD displey holatni ko'rsatish uchun ishlatiladi, agar korpus ochiq bo'lsa yoki nasos ishlayotgan bo'lsa, shuningdek qurilmaning IP -manzili ko'rsatiladi. kimdir ruxsat bermagan holda ish ochilganda, xavotirli ovoz chiqarish uchun ishlatiladi.

Men pastdagi sxemani va sxematik ko'rinishni qo'shdim.

2 -qadam: RaspberryPi -ni o'rnatish

Bizning RaspberryPi -ni sozlash uchun biz Raspberry saytidan tasvirlash dasturini yuklab olamiz, buning yordamida siz xohlagan Raspbian versiyasini yuklab olishingiz va SDCARD -ni siz uchun tasvirlashingiz mumkin. Ushbu vosita o'z ishini tugatgandan so'ng, Windows Explorer -da SDCARD -ni ochishingiz mumkin, siz RaspberryPi -ning yuklash qismini ko'rasiz. Bu erda biz cmdline.txt nomli faylni topamiz (bu faylni bloknotda ochmang, uni Notepad ++ yoki boshqa IDEda oching). Biz qurilmamizga chekilgan tarmoq orqali ulanishimiz mumkinligiga ishonch hosil qilish uchun ushbu faylning oxiriga ip = 169.254.10.1 qo'shamiz (fayl oxiriga hech qanday ENTER qo'shmasligingizga ishonch hosil qiling).

Endi siz SDCARD -ni RaspberryPi -ga qo'yishingiz va uni yuklashingiz, Pi -ni kompyuteringizga ulashingiz va Put -dan foydalanib, SSH orqali Pi -ga ulanishingiz mumkin. Putty -ni ishlatish o'rniga Pi -ga ulanish uchun quyidagi buyruqni ishlataman. "ssh [email protected]" vaqti tugashi mumkin, shuning uchun sabr qiling va Pi yuklanishini kuting. Parol so'ralganda, biz "malina" standart parolini to'ldiramiz. Raspberry Pi -ga yomon niyatli kimdir kirmasligi uchun tizimga kirganingizdan so'ng ushbu parolni o'zgartirganingizga ishonch hosil qiling.

Endi biz Pi-ni konfiguratsiya menyusini ochish uchun "sudo raspi-config" dan foydalanamiz va bu erda interfeys parametrlariga o'tamiz.

Bu erda biz quyidagi variantlarni yoqamiz: SPI- I2C

Pi -ga simsiz Internet -ulanishni o'rnatish uchun ushbu qo'llanmani bajaring, buni muvaffaqiyatli bajarganingizdan so'ng biz kerakli paketlarni o'rnatishimiz mumkin.

Paketlar: (buyruqlarni bu erda ko'rsatilgan tartibda bajaring)

Quyidagilar bizning Pi- sudo apt update && apt upgrade -y uchun eng so'nggi yangiliklarni olish uchun

MySQL serverimizni va veb-serverimizni o'rnating- sudo apt install mariadb-server apache2

Ma'lumotlar bazasini ushbu qo'llanmada o'rnatish uchun men MySQL Workbench -dan foydalanaman, agar siz buni ishlatmasangiz va phpmyadmin -ni afzal ko'rsangiz, uni quyidagi buyruq bilan o'rnatishingiz mumkin, siz boshqa MySQL mijozidan foydalanishingiz mumkin. Ma'lumotlar bazasini to'g'ri import qila olaman.- sudo apt install phpmyadmin

Yuqoridagilarning barchasini bajarganingizdan so'ng, biz ma'lumotlar bazamiz uchun foydalanuvchi yaratishimiz kerak. MySQL -serveringizga kirish uchun "sudo mysql -u root" dan foydalaning, bu erda biz o'z parolimiz bilan db_admin nomli foydalanuvchi yaratamiz. bu parol keyinroq ko'rsatmalarda yozilgan. BARCHA HAMMA imtiyozlarni yoqing *. * TO "db_admin"@"%" IDPIFIED "yourPasswordHere" GRANT OPSIYASI BILAN;

MySQL terminalidan chiqish uchun "\ q" buyrug'idan foydalaning.

Python paketlari: Ishni davom ettirishdan oldin, biz hali ham bir nechta python paketlarini o'rnatishimiz kerak, hamma narsa benuqson bo'lishi uchun ishonch hosil qilish uchun quyidagi buyruqni bajaring.

sudo pip3 Flask Flask-Cors Flask-SocketIO gevent gevent-websocket greenlet spi SPI-Pyspidev-ni o'rnatadi

Python3 -mysql.connector -y bilan bir qatorda quyidagi MySQL -ni ulang.

Agar hamma narsa to'g'ri bo'lsa, endi veb -brauzeringizdagi Pi -ga tashrif buyuring, quyidagi manzil bilan

3 -qadam: Orqa fonni sozlash

Orqa fonni sozlash
Orqa fonni sozlash

Bu erda men qanday qilib orqa fonni o'zingiz o'rnatishingiz mumkinligini tushuntirmoqchiman, avval rar faylini pastdan yuklab oling, uni vaqtinchalik katalogga olib tashlang. RaspberryPi -ga FileZilla yoki WinSCP -ga quyidagi hisob ma'lumotlari bilan ulaning:

IP: 169.254.10.1 Foydalanuvchi: piPassword: malina (agar parolni o'zgartirgan bo'lsangiz, bu erda ham bajaring)

Keyin siz ochilgan fayllarni pi foydalanuvchining uy katalogida kerakli katalogga o'tkazishni davom ettirishingiz mumkin. Oddiylik uchun biz ushbu sozlamada barcha fayllarimizni hujjatlar katalogiga yuklaganmiz deb o'ylaymiz.

Keyingi qadam uchun FTP dasturini ochiq saqlang!

Endi SSH ulanishi bilan buyruq satrini yana oching, chunki biz veb -serverda ba'zi o'zgarishlar qilishimiz kerak bo'ladi, shuning uchun frontend orqa tomon bilan aloqa o'rnatishi mumkin. Biz standart Apache2 konfiguratsiya faylini ochamiz va uni biroz o'zgartiramiz: sudo nano /etc/apache2/sites-available/000-default.conf

Biz ochgan konfiguratsiya fayliga DocumentRoot ostiga quyidagi qatorlarni qo'shing: ProxyPass/api/https://127.0.0.1:5000/api/ProxyPassReverse/api/https://127.0.0.1:5000/api/

Misol uchun ilova qilingan rasmni ko'rib chiqishingiz mumkin.

4 -qadam: Frontendni sozlash

Fayllarni uzatishdan oldin, biz oldingi fayllarni uzatishni boshlashdan oldin biror narsa qilishimiz kerak. Oldindan tuzilgan SSH ulanishi yordamida buyruq satrini oching va RaspberryPi -ning asosiy foydalanuvchisiga o'tish uchun quyidagi buyruqni ishlating: "sudo su -"

Shundan so'ng, biz root foydalanuvchisining parolini quyidagi buyruq bilan o'zgartirishimiz mumkin: "passwd" Bu sizdan yangi parolni kiritishingizni so'raydi, buni tugatgandan so'ng siz yana FTP dasturingizga o'tishingiz va o'z hisob ma'lumotingiz bilan kirishingiz mumkin:

IP: 169.254.10.1 Foydalanuvchi: rootParol:

Rar faylini pastdan yuklab oling va uni vaqtinchalik papkada oching, siz ushbu fayllarni RaspberryPi -ga quyidagi katalogga ko'chirishingiz mumkin/var/www/html/, siz http: /169.254.10.1, siz hozircha o'zaro aloqa qila olmaysiz, chunki orqa fon hali ishlamayapti, men buni keyinroq sizga ko'rsatmada ko'rsataman.

5 -qadam: Loyihamiz uchun ma'lumotlar bazasini import qilish

Loyihamiz uchun ma'lumotlar bazasini import qilish
Loyihamiz uchun ma'lumotlar bazasini import qilish
Loyihamiz uchun ma'lumotlar bazasini import qilish
Loyihamiz uchun ma'lumotlar bazasini import qilish

Sevimli MySQL server boshqaruv dasturini oching va 2 -bosqichda biz yaratgan hisob ma'lumotlari bilan Raspberry Pi -ga ulaning.

Ma'lumotlar bazasi dampini pastdan yuklab oling va uni odatdagidek import qiling, MySQL ishchi paneli - Fayl> SQL skriptini ochish va yuklangan ma'lumotlar bazasi dampini tanlang, keyin CTRL + SHIFT + ENTER tugmalarini bosing va SQL skriptini ishga tushirish kerak. ma'lumotlar bazasini yaratish kerak.

Men quyida misol sifatida RaspberryPi uchun ishlatilgan hisob ma'lumotlarini va ma'lumotlar bazasi tuzilmasining bir nechta rasmlarini qo'shdim, siz uni ko'rib chiqib, hamma narsa qanday ishlashi haqida umumiy tasavvurga ega bo'lishingiz mumkin.

6 -qadam: Loyihamizni ishga tushirish

Loyihamizni ishga tushirish
Loyihamizni ishga tushirish
Loyihamizni ishga tushirish
Loyihamizni ishga tushirish

Loyihamizni ishga tushirishdan oldin, config.py faylidagi ma'lumotlar bazasi ma'lumotlarini o'zgartirishimiz kerak, agar siz ko'rsatmalarga to'liq amal qilgan bo'lsangiz, ularni /home/pi/Documents/Backend/src/config.py ostida topishingiz mumkin. bu erda siz db_config o'zgaruvchisining hisob ma'lumotlarini ma'lumotlar bazamiz uchun ilgari yaratgan ma'lumotlarga mos ravishda o'zgartirishingiz kerak. Men quyida ushbu faylda ko'rishingiz mumkin bo'lgan misolni qo'shdim.

Shundan so'ng, biz.service faylini qo'shamiz, bu fayl RaspberryPi ishga tushganda bizning loyihamiz boshlanishiga ishonch hosil qiladi, siz arxiv fayllarini o'rnatgan joyni mos ravishda o'zgartirganingizga ishonch hosil qiling. Xizmat faylini yaratish uchun quyidagi buyruqdan foydalaning: sudo nano /etc/systemd/system/dispenser.serviceBu xizmat faylini yaratadi va quyidagi faylni nusxa ko'chiring.

[Birlik] Tavsif = Suv dispenseriAfter = mysql.service

[Xizmat] Type = simpleRestart = alwaysRestartSec = 1User = piExecStart =/usr/bin/python3 /home/pi/Documents/Backend/index.py

[O'rnatish] WantedBy = multi-user.target

/Home/pi/Documents/Backend/index.py yozilgan qatorni orqa fayllarni o'rnatgan joyga o'zgartiring, agar buni to'g'ri qilmasangiz, loyiha to'g'ri ishga tushmaydi! Men quyida namuna faylini qo'shaman.

Buni qilganingizdan va matn muharriridan chiqqandan so'ng, biz xizmatni quyidagi buyruqlar bilan yoqishimiz mumkin:- sudo systemctl daemon-reload- sudo systemctl dispenserni ishga tushirish- sudo systemctl ishga tushirish dispenserini ishga tushirish.

Va biz qo'shimcha ravishda ishga tushirishimiz mumkin: sudo systemctl status dispenserBu bizning xizmatimiz haqida ba'zi ma'lumotlarni ko'rsatadi, agar u faol bo'lsa yoki bo'lmasa …

7 -qadam: ish

Ish
Ish
Ish
Ish
Ish
Ish
Ish
Ish

Tabriklaymiz, biz deyarli keldik, men o'z loyiham uchun ishlatgan o'lchamlarni aniq ko'rsatadigan rasmlarni qo'shaman, men qalinligi 18 mm bo'lgan MDF plitalarini ishlatardim, siz ixtiyoriy ravishda boshqa qalinlikdan foydalanishingiz mumkin. Mening korpusim sizning dizayningiz uchun qo'llanma sifatida ishlatilishi mumkin yoki siz men yasagan narsani qayta yaratishingiz mumkin. (Agar siz boshqa qalinlikdagi MDFdan foydalansangiz, mening chizmalarim endi dizaynimni yaratishga imkon bermaydi, uni moslashtirishga ishonch hosil qiling!) Men tayyorlagan panellar:- 32 sm dan 42 sm gacha 2 panel (yon panellar)- 24 sm dan 1 panelli. 32 sm (pastki plastinka)- 16 sm dan 24 sm gacha bo'lgan 2 ta panel (old panel LCD joylashgan va qo'shni plastinka)- 28 sm dan 24 sm gacha bo'lgan bitta panel (o'rtadan oldingi plastinka)- 30 sm dan 24 sm gacha bo'lgan 1 panel (yuqori plastinka)

8 -qadam: Yakuniy mahsulotga qoyil qoling

Yakuniy mahsulotga qoyil qoling
Yakuniy mahsulotga qoyil qoling
Yakuniy mahsulotga qoyil qoling
Yakuniy mahsulotga qoyil qoling

Siz oxirigacha etib keldingiz va umid qilamanki, hamma narsani haqiqatga aylantira oldingiz. Agar siz o'qiyotgan bo'lsangiz, xush kelibsiz, oxirgi qadamigacha o'qiganingiz uchun tashakkur!

Men bu loyihaga ko'p qon, ter va ko'z yoshlarimni sarfladim, shuning uchun agar siz izoh qoldirsangiz, buni qadrlayman, uni takomillashtirish bo'yicha har qanday tanqid qabul qilinadi!

9 -qadam: Muammolar

Men loyihani hozirgi holatiga juda ko'p yaxshilanishlarni ko'radigan ishlaydigan prototip sifatida qo'yardim.

Orqa fonning kod bazasi shunday tuzilganki, bitta asosiy favvora asosiy frontand vazifasini bajaradigan va boshqa barcha favvoralar ma'lumot va o'zgarishlarni xo'jayinning REST api ustidan bajaradigan asosiy qul munosabatini o'rnatishi mumkin. Bundan tashqari, kodda API token tizimining qoldiqlari mavjud, chunki uni amalga oshirish rejalashtirilgan edi, lekin vaqt cheklanganligi sababli keyinroq kesib tashlandi.

Men o'z kodimni Gitlab serverimga yukladim va u erda siz kodni to'liq ko'rib chiqishingiz mumkin:

Tavsiya: