Мазмуну:

Контактсыз суу фонтаны: 9 кадам (Сүрөттөр менен)
Контактсыз суу фонтаны: 9 кадам (Сүрөттөр менен)

Video: Контактсыз суу фонтаны: 9 кадам (Сүрөттөр менен)

Video: Контактсыз суу фонтаны: 9 кадам (Сүрөттөр менен)
Video: МОЙ ВЫПУСКНОЙ 2022 #shortsvideo #shorts #video #tiktok #снежанаснежок 2024, Ноябрь
Anonim
Байланышсыз суу фонтаны
Байланышсыз суу фонтаны

MCT студенти катары биринчи курсумдун аягында мага жыл бою курстардан алган бардык көндүмдөрүм камтылган долбоорду түзүү тапшырылды.

Мен мугалимдерим койгон бардык талаптарды текшерип, ошол эле учурда мага кызыктуу болушу үчүн долбоор издеп жүрдүм. Теманы издеп жатып, мен Ковид-19дан шыктанганын сезе албай койдум (Бул дүйнөлүк масштабга жеткенге чейин болгон.) Мен суу булагы/диспенсери жок контактты тандадым, анткени ал сунуш кылат. суу чыкмайынча кээ бир баскычтарга тийбестен суу ичүү.

Бул проектте аралыктын сенсорун колдонуп, суу чыгаруунун астына чыны же стакан коюлганын аныктоо үчүн, фонтан 60 секундга (100мл / мүнөт) суу чыгарууга өтөт. Бул аны дагы ырааттуу кылуу үчүн, анткени айнектин тартылып алынганын аныктоо өтө кыйын/жай иш экени аныкталган, ошондуктан таймер коюлган. Сиздин стаканыңызга 100 мл суу куюлгандан кийин, сиз 5 секунд күтө аласыз, эгер айнек дагы деле аралык сенсорунун алдында болсо, анда ал башка убакытты толтурат (бул эки башка толтуруунун ортосунда 5 секунддук тыныгуу бар дегенди билдирет) буюмдар).

Жабдуулар

Компоненттер

- 1x RaspberryPi (мен 4-версиясын колдондум, бирок эски версиялары да иштеши мүмкүн)- 1x S8050 транзистору же 1x PN2222 транзистору да иштеши мүмкүн- 1x Photoresistor- 1x HC-SR04 (Ultrasonic Distance Sensor)- 1x RFID-RC522- 3x түрдүү түстөр LED (көк, сары, кызыл)- 1x LCD1602- 1x Active Buzzer- 1x PCF8574- 1x MCP3008- 1x Суу Насосу (12v перисталтикалык насос колдонулган, бул нерсеге шилтеме)

- 1x DC электр менен камсыздоо (12v, 600mAh)- 3 орундуу 1x күч кирпичтери- 3х панели (балким азыраак колдонсоңуз болот)- RaspberryPi GPIO казыктары үчүн T-өтүкчү- T-өтүк кабели (pi менен өтүкчүнүн ортосунда туташуу үчүн)

Колдонулган материалдар жана шаймандар

- Төмөндөгү бургулоочу учтары бар бургулоо:

- 4мм (бурамалар үчүн алдын ала бургулоо үчүн) - 15мм (аралык сенсорунун тешиктерин бургулоо үчүн)

- Ар кандай отвертка- 45 мм узундугу 30 бурама- 20 мм 6 винт- эшик үчүн 2 шарнир

1 -кадам: Районду чогултуу

Циркти чогултуу
Циркти чогултуу
Циркти чогултуу
Циркти чогултуу
Циркти чогултуу
Циркти чогултуу

Район үчүн бизде 2 сенсор, аралык сенсору жана фоторезистор бар. Алыстык сенсору суу булагынын диапазонуна чөйчөк салынганын аныктоо үчүн колдонулат жана мен фоторезисторду коштум, бул корпусту ачууга жатпаган адам тарабынан ачылганын аныктоо үчүн колдонулат. Анын үстүнө бизде RFID окурманы бар, бул суу сактагычты толтуруу үчүн же башка механикалык маселе боюнча ишти ачуу керек болгон механикти тастыктоо үчүн колдонулушу мүмкүн.

Бизде активдүү элементтер үчүн бизде LCD1602, активдүү ызылдагыч жана перисталтикалык насос бар, ЖК абалды көрсөтүү үчүн колдонулат, эгерде абал ачык болсо же насос иштеп жаткан болсо, ошондой эле түзмөктүн IP дареги көрсөтүлөт, ызылдак кимдир бирөө уруксат бербестен иш ачылганда коркунучтуу үн чыгаруу үчүн колдонулат.

Мен төмөндөгү схеманын нан тактасын жана схемалык көрүнүштөрүн коштум.

2 -кадам: Биздин RaspberryPi орнотуу

Биздин RaspberryPi орнотуу үчүн, биз Raspberry сайтынан сүрөт иштетүүчү программаны жүктөп алабыз, мунун жардамы менен сиз каалаган Raspbian версиясын жүктөп алып, SDCARD картаңызды сүрөткө тарта аласыз. Бул курал өз ишин бүтүргөндөн кийин Windows Explorerде SDCARD ачсаңыз болот, сиз RaspberryPiңиздин жүктөөчү бөлүгүн көрө аласыз. Бул жерде cmdline.txt деп аталган файлды табабыз (бул файлды блокнотто ачпаңыз, Notepad ++ же башка IDEде ачыңыз). Биз бул файлдын аягына ip = 169.254.10.1 кошобуз, биз түзмөгүбүзгө Ethernet аркылуу туташа алабыз (файлдын аягына эч кандай ENTERS кошпогонуңузду текшериңиз же көйгөйгө туш болосуз).

Эми сиз SDCARDыңызды RaspberryPiге салып, жүктөй аласыз, Piңизди компьютериңизге туташтырып, SSH аркылуу Пиңизге туташуу үчүн Putty колдоно аласыз. Мен Putty'ди колдонуунун ордуна Pi'име туташуу үчүн төмөнкү буйрукту колдоном. "ssh [email protected]" бул убакыттын өтүшү мүмкүн, андыктан чыдамдуу болуңуз жана Pi жүктөлгөнчө күтө туруңуз. Сырсөз суралганда, биз "малина" демейки сырсөзүн толтурабыз. Киргенден кийин бул сырсөздү өзгөртүүнү унутпаңыз, кимдир бирөө сиздин Raspberry Piге кирүүсүнө жол бербесин.

Биз азыр Piбизди кодубузга керектүү функцияларды камсыз кылуу үчүн конфигурациялайбыз. Конфигурация менюну ачуу үчүн "sudo raspi-config" колдонуңуз жана бул жерде биз Интерфейс Жолдоруна барабыз.

Бул жерде биз төмөнкү параметрлерди күйгүзөбүз:- SPI- I2C

Пиңизге зымсыз интернет байланышын орнотуу үчүн бул колдонмону ээрчиңиз, муну ийгиликтүү аткаргандан кийин биз керектүү пакеттерибизди орното алабыз.

Топтомдор: (буйруктарды бул жерде белгиленген тартипте иштетүү)

Pi -sudo apt update && apt upgrade -y үчүн акыркы жаңыртууларды алуу үчүн төмөнкүлөр

Биздин MySQL серверибизди жана webserver- sudo apt install mariadb-server apache2 орнотуңуз

Мен MySQL Workbenchти ушул колдонмодо кийинчерээк маалымат базасын орнотуу үчүн колдоном, эгер сиз муну колдонбосоңуз жана phpmyadminди тандасаңыз, муну төмөнкү буйрук менен орнотсоңуз болот, башка MySQL Клиентин колдонууга акысыз маалыматтар базасын туура импорттой алам.- phpmyadminди орнотуу

Жогоруда айтылгандардын баарын аткаргандан кийин, биздин маалымат базабыз үчүн колдонуучу түзүү керек. MySQL сервериңизге кирүү үчүн "sudo mysql -u root" колдонуңуз, бул жерде биз тиешелүү сырсөзү менен db_admin аттуу колдонуучуну түзөбүз. Бул сырсөз кийинчерээк көрсөтмөлөрдө жазылган. БАРДЫК АРТЫКЧЫЛЫКТАРДЫ КОНТУРУҢУЗ. *. * TO "db_admin"@"%" IDENTIFIED BY "yourPasswordHere" ГРАНТ ОПЦИОНУ МЕНЕН;

MySQL терминалынан чыгуу үчүн "\ q" буйругун колдонуңуз.

Python топтомдору: Биз дагы эле улантылардан мурун, кээ бир python пакеттерин орнотушубуз керек, кемчиликсиз бир тажрыйба үчүн бардыгы бар экенине ынануу үчүн төмөнкү буйрукту аткарыңыз.

sudo pip3 Flask Flask-Cors Flask-SocketIO орнотуу gevent-websocket greenlet spi SPI-Pyspidev

Төмөнкү MySQL да python пакеттерин туташтырат apt install python3 -mysql.connector -y

Эгерде баары ойдогудай болсо, анда сиз азыр веб -браузериңиздеги Пиңизге төмөнкү дарек менен кире аласыз

3 -кадам: Backend орнотуу

Арткы жагын орнотуу
Арткы жагын орнотуу

Бул жерде мен сиз өзүңүздүн арткы бетиңизди кантип орнотсоңуз болорун түшүндүрөм, адегенде rar файлын төмөндөн жүктөп алыңыз, аны убактылуу каталогго ачыңыз. FileZilla же WinSCP менен RaspberryPiге төмөнкү грамоталар менен туташыңыз:

IP: 169.254.10.1 Колдонуучу: piPassword: малина (эгер сиз сырсөздү өзгөртсөңүз, бул жерде да жасаңыз)

Сиз андан кийин пи колдонуучунун үй каталогунда каалаган каталогго чыгарылган файлдарды өткөрүүнү уланта аласыз. Жөнөкөйлүк үчүн, бул орнотууда биз бардык файлдарыбызды документ каталогуна жүктөдүк деп ойлойбуз.

Кийинки кадам үчүн FTP программаңызды ачык кармаңыз!

Эми SSH туташууңуз менен командалык чакырууңузду кайра ачыңыз, анткени биз веб -серверге кээ бир өзгөртүүлөрдү киргизишибиз керек, ошондуктан фронтт backend менен байланыша алат. Биз демейки Apache2 конфигурация файлын ачып, аны бир аз өзгөртөбүз: nano /etc/apache2/sites-available/000-default.conf

Жаңы ачылган конфигурация файлына DocumentRoot астына төмөнкү саптарды кошуңуз: ProxyPass/api/https://127.0.0.1:5000/api/ProxyPassReverse/api/https://127.0.0.1:5000/api/

Мисал үчүн тиркелген сүрөттү карап көрсөңүз болот.

4 -кадам: Frontend орнотуу

Файлдарыбызды өткөрүп берүүдөн мурун, биз өзүбүздүн алдыңкы файлдарыбызды өткөрүп баштаардан мурун бир нерсе кылышыбыз керек. Мурун жасаган SSH туташууңуз менен буйругуңузду ачыңыз жана RaspberryPiбиздин түпкү колдонуучусуна өтүү үчүн төмөнкү команданы колдонуңуз: "sudo su -"

Ушундан кийин биз төмөнкү колдонуучу менен биздин түпкү колдонуучубуздун сырсөзүн өзгөртө алабыз: "passwd" Бул сизден жаңы сырсөздү киргизүүнү суранат, муну кылгандан кийин сиз FTP программаңызга кайра кирип, түпнуска маалыматыңыз менен кире аласыз:

IP: 169.254.10.1 Колдонуучу: rootPassword:

Rar файлын төмөндөн жүктөп алып, аны убактылуу папкага алып салыңыз, сиз бул файлдарды RaspberryPiге төмөнкү каталогго/var/www/html/жылдыра аласыз, ал бүткөндөн кийин http:/ /169.254.10.1, сиз азырынча өз ара аракеттене албайсыз, анткени арткы жагы азырынча иштебейт, муну кантип жасоону бул колдонмодо кийинчерээк көрсөтөм.

5 -кадам: Биздин долбоордун маалымат базасын импорттоо

Биздин долбоордун маалымат базасын импорттоо
Биздин долбоордун маалымат базасын импорттоо
Биздин долбоордун маалымат базасын импорттоо
Биздин долбоордун маалымат базасын импорттоо

Сүйүктүү MySQL серверди башкаруу программаңызды ачыңыз жана 2 -кадамда биз түзгөн грамоталар менен Raspberry Pi менен туташыңыз.

Берилиштер базасын төмөндөн жүктөп алып, аны импорттоңуз, адатта, MySQL Workbench, File> Open SQL Script'ке өтүп, жүктөлгөн маалымат базасын тандаңыз. маалымат базасын түзүү керек.

Мен төмөндө мисал катары RaspberryPi үчүн колдонгон грамоталарды, ошондой эле маалымат базасынын структурасынын бир нече сүрөттөрүн коштум, аны карап, аракет кылып, бардыгы кантип иштээри жөнүндө жалпы түшүнүк ала аласыз.

6 -кадам: Биздин долбоорду баштоо

Биздин долбоорду баштоо
Биздин долбоорду баштоо
Биздин долбоорду баштоо
Биздин долбоорду баштоо

Долбоорубузду баштаардан мурун, config.py файлындагы маалымат базасынын ишеним грамоталарын өзгөртүүбүз керек, эгер сиз инструкцияны так аткарган болсоңуз, анда аларды /home/pi/Documents/Backend/src/config.py сайтынан таба аласыз. бул жерде сиз db_config өзгөрмөсүнүн ишеним грамоталарын биздин маалымат базасы үчүн мурда түзүлгөндөргө дал келиши үчүн өзгөртүү керек. Төмөндө бул файлда көрө турган нерсеңиздин мисалын коштум.

Андан кийин биз.service файлын кошобуз, бул файл RaspberryPi башталганда биздин долбоордун башталганын текшерет, сиз арткы файлдарды орноткон жериңизге ылайыктуу түрдө каталогду өзгөрткөнүңүздү текшериңиз. Кызмат файлын түзүү үчүн төмөнкү буйрукту колдонуңуз: sudo nano /etc/systemd/system/dispenser.service Бул кызмат файлын түзүп, төмөнкү файлды бул файлга көчүрөт.

[Unit] Description = Water DispenserAfter = mysql.service

[Кызмат] Түрү = simpleRestart = alwaysRestartSec = 1Колдонуучу = piExecStart =/usr/bin/python3 /home/pi/Documents/Backend/index.py

[Орнотуу] WantedBy = multi-user.target

/Home/pi/Documents/Backend/index.py деп жазылган сапты өзгөртүңүз, эгер сиз муну туура кылбасаңыз, долбоор туура башталбайт! Мен төмөндө мисал файлын кошом.

Сиз муну жасап, текст редакторунан чыккандан кийин, биз кызматты төмөнкү буйруктар менен иштете алабыз:- sudo systemctl daemon-reload- sudo systemctl иштетүү диспенсери

Жана кошумча катары биз иштете алабыз: sudo systemctl status dispenserБул биздин кызматтын айланасында кээ бир маалыматты көрсөтөт, эгер ал активдүү болсо же болбосо,…

7 -кадам: Case

Case
Case
Case
Case
Case
Case
Case
Case

Куттуктайбыз, биз дээрлик ошол жердебиз, мен долбоорум үчүн колдонгон өлчөмдөрдү так көрсөтө турган кээ бир сүрөттөрдү кошомун, мен 18 мм калыңдыктагы MDF плиталарын колдонгом, сиз кааласаңыз башка калыңдыкты колдонсоңуз болот. Менин корпусум сиздикин долбоорлоодо колдонмо катары колдонулушу мүмкүн же сиз мен жасаганды кайра жаратсаңыз болот. (Эгерде сиз MDFтин башка калыңдыгын колдонсоңуз, менин чиймелерим мындан ары менин дизайнымды жасоого мүмкүндүк бербейт, аны ылайыкташтырууну унутпаңыз!) Мен жасаган панелдер:- 32смден 42смге чейинки 2 панель (каптал панелдер)- 24смден 1 панель 32см (астыңкы тарелка)- 16смден 24смге чейинки 2 панель (алдыңкы плитасы ЖК турган жерде жана кошуна тарелкада)- 28смден 24смге чейинки 1 панель (ортоңку табак алдыдан көрүнөт)- 30смден 24смге чейинки 1 панель (үстүңкү табак)

8 -кадам: Акыркы продуктка суктануу

Акыркы продуктка суктануу
Акыркы продуктка суктануу
Акыркы продуктка суктануу
Акыркы продуктка суктануу

Сиз аягына жеттиңиз жана азыр баарын чындыкка айландырдыңыз деп үмүттөнөбүз. Эгерде сиз жөн эле окуп жатсаңыз, кош келиңиз, акыркы кадамга чейин окуганыңыз үчүн рахмат!

Мен бул долбоорго көп кан, тер жана көз жашымды сарптадым, эгерде сиз комментарий калтырсаңыз, аны баалаар элем, аны жакшыртуу боюнча сын -пикирлер кабыл алынат!

9 -кадам: Проблемалар

Мен долбоорду азыркы абалына коюп, бир топ жакшыртууларды көрө турган жумушчу прототип катары коймокмун.

Арткы коддун базасы бир фонтан негизги фронттун милдетин аткара турган жана башка бардык фонтандар мастердин REST api үстүндө маалыматтарды жана өзгөрүүлөрдү түртүп турган маалда кул мамилеси эң сонун түзүлө тургандай түзүлгөн. Коддо API токен тутумунун калдыктары да бар, анткени бул ишке ашырылышы керек болчу, бирок кийинчерээк убакыттын тардыгына байланыштуу кесилген.

Мен кодумду Gitlab сервериме жүктөдүм жана ал жерде сиз бүтүндөй кодду карай аласыз:

Сунушталууда: