Мазмуну:

Жергиликтүү метеостанция: 8 кадам (сүрөттөр менен)
Жергиликтүү метеостанция: 8 кадам (сүрөттөр менен)

Video: Жергиликтүү метеостанция: 8 кадам (сүрөттөр менен)

Video: Жергиликтүү метеостанция: 8 кадам (сүрөттөр менен)
Video: Ойлонордон мурда бул ВИДЕОНУ КӨРҮҢҮЗ! 2024, Июль
Anonim
Жергиликтүү аба ырайы станциясы
Жергиликтүү аба ырайы станциясы

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

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

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

Бул Raspberry Pi 4 иштеп жаткан Linuxтен жасалган.

  • Apache веб -сайты (html css js)
  • Eventlet (сервердин веб -сайты)
  • MariaDB (маалымат базасы сервери)

Жабдуулар

  • Raspberry Pi 4:

    sd-card (эң аз 16gb)

  • Сенсорлор:

    1. QS-FS шамалдын ылдамдыгы сенсору
    2. Шамал Sensor Garden Signal Output Алюминий Alloy шамал багыты Sensor Wind Vane ылдамдыгын өлчөө инструменти https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminum-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Өлчөө-Аспап-б-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (нымдуулук)
    4. BMP280 (абанын басымы)
    5. DS18B20 (температура)
  • Электр менен камсыздоо

    • 5V электр менен камсыздоо (RPi)
    • 9v электр менен камсыздоо (тышкы нан тактасы боюнча)
  • Нан тактасы (x2)

    T-cobbler plus RPi 4 үчүн

  • секирүүчү зымдар
  • ICs

    • MCP3008
    • PCF8574AN
  • ЖК дисплей 16х2
  • LED (кызыл
  • Корпус (оптикалык)

    • шарап идиштери
    • жыгач мамы (2 м)
    • жыгач тактай (1м)

1 -кадам: нерселерди даярдоо

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

Ошентип, биринчи, Сизге эмне керек:

  • Raspberry Pi 4:

    sd-card (эң аз 16gb)

  • Сенсорлор:

    1. QS-FS шамалдын ылдамдыгы сенсору
    2. Wind Sensor Garden Signal Output Алюминий эритмеси Шамалдын багыты Сенсор Wind Vane ылдамдыгын өлчөөчү прибор
    3. DHT22 (нымдуулук)
    4. BMP280 (абанын басымы)
    5. DS18B20 (температура)
  • Электр менен камсыздоо

    • 5V электр менен камсыздоо (RPi)
    • 9v электр менен камсыздоо (тышкы нан тактасы боюнча)
  • Нан тактасы (x2)
  • T-cobbler plus RPi 4 үчүн
  • секирүүчү зымдар
  • ICs

    • MCP3008
    • PCF8574AN
  • ЖК дисплей 16х2
  • LED (кызыл)
  • Корпус (оптикалык)

    • жыгачтан жасалган шарап
    • жыгач тактай (1м)
    • түркүк (2м)

Мен сатып алган бардык шилтемелерди киришүү астындагы материалдар бөлүмүнөн таба аласыз.

2 -кадам: RPi орнотуу

RPi орнотуу
RPi орнотуу

Биздин долбоор үчүн бизге орнотулган программалык камсыздоо менен RPi керек.

  • Apache веб -сайты (html css js)
  • Flask Socket-IO (backend серверинин веб-сайты)
  • MariaDB (маалымат базасы сервери)

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

sudo apt update

Apache:

Алгач Apache жөнүндө сүйлөшөлү. Apache - бул дүйнө жүзү боюнча колдонулган веб -сервер. Бул сиздин веб -сайтыңызды кемчиликсиз иштетет. Сизге керек болгон жалгыз нерсе - аны орнотуу жана веб -сайтыңызды туура папкага салуу жана ал жерде.

sudo apt install apache2 -y

Дал ушул!

Бардыгы туура орнотулгандыгын текшерүү үчүн, браузериңиздеги малина pi Ip дарегине өтүңүз жана демейки веб-сайтты алсаңыз болорун текшериңиз. Эгерде сизде бул кадамга байланыштуу кандайдыр бир көйгөйлөр бар болсо, сиз RPi веб -сайтын бул жерден текшере аласыз.

Окуя:

Эми Eventletти орнотолу. Ал биздин серверди иштетет жана сенсорлорубуздан веб -сайтыбызга байланышты түзөт. Ал үчүн бизге бир -эки пакет керек.

Flask-socketIO:

pip3 колбасы-сокетин орнотуу

Окуя:

pip3 окуяны орнотуу

Гевент:

pip3 gevent орнотуу

Mariadb:

Mariadb - бул MySQLге негизделген, реляциялык маалымат базасын түзүүчү маалымат базасы. Бул көбүнчө RPiде колдонулат, андыктан интернеттен таба турган көптөгөн жардамдар бар. Көбүрөөк маалымат алуу үчүн бул шилтемеге кирсеңиз болот.

apt install mariadb-server

3 -кадам: сенсорлорду туташтыруу жана кодду кошуу

Сенсорлорду туташтыруу жана кодду кошуу
Сенсорлорду туташтыруу жана кодду кошуу
Сенсорлорду туташтыруу жана кодду кошуу
Сенсорлорду туташтыруу жана кодду кошуу
Сенсорлорду туташтыруу жана кодду кошуу
Сенсорлорду туташтыруу жана кодду кошуу

Сенсорлорду биздин RPiге туташтыруу үчүн биз T-Cobbler plus колдоно алабыз. Бул колдонмо кичинекей курал, бул RPiдеги бардык казыктарыңызды нан тактасында колдонууга мүмкүндүк берет.

Менин долбоорумда 5 сенсор бар:

  1. QS-FS шамалдын ылдамдыгы сенсору
  2. Wind Sensor Garden Signal Output Алюминий эритмеси Шамалдын багыты Сенсор Wind Vane ылдамдыгын өлчөөчү прибор
  3. DHT22 (нымдуулук)
  4. BMP280 (абанын басымы)
  5. DS18B20 (температура)

Шамалдын ылдамдыгы сенсору:

Биринчиден, мен шамалдын ылдамдыгын сенсорунан баштадым, анткени мен бул сенсорго абдан кубандым. Бул 0-5v аналогдук сигналга ээ болгон сенсор жана иштөө үчүн минималдуу 7 вольттун чыңалуусу керек. Мен аны иштетүү үчүн 9 вольт адаптерин тандайм.

Бул сенсордо окуу үчүн мен аналогдук сигналдарда окуу үчүн IC болгон MCP3008 колдондум. IC 3.3V же 5V иштей алат, бирок мен аны RPi менен шайкеш кылуу үчүн 3.3V тандап алам. Бул 5Vдан 3.3Vга чыгуу чыңалуусун өзгөртүшүм керек дегенди билдирет, муну 2 резистор (2k жана 1k ohm) тарабынан түзүлгөн чыңалуу бөлүштүргүчүн кошуу менен жасадым.

Шамалдын багытын аныктоочу сенсор:

Шамалдын багыты шамалдын ылдамдыгы сыяктуу маанилүү, ошондуктан мен муну кийинкиде байланыштырам.

Бул сенсор шамалдын ылдамдыгы сенсорунун спецификасына ээ. Ал ошондой эле 9В иштейт жана 5 вольттун чыгыш чыңалуусуна ээ. Ошондой эле бул сенсор биз MCP3008ге чыңалуу бөлүүчү аркылуу туташат.

DHT22 (нымдуулук):

DHT22 нымдуулукту окуйт. Бул сизге пайыздык маанини берет жана анын маанисин RPiдеги I2C протоколунун жардамы менен окууга болот. Ошентип, сиз I2C портторун Raspi-конфигурациясында иштетишиңиз керек. Көбүрөөк маалымат бул жерде.

BMP280 (абанын басымы):

BMP280 абанын басымын окуу үчүн колдонулат. Анын мааниси RPiдеги SPI автобусу аркылуу окулат. Бул протокол Raspi-конфигурациясында да иштетилиши керек. Менин кодум үчүн мен Adafruit китепканасын колдондум.

DS18B20 (температура):

Акыркы сенсор температураны өлчөйт. бул сенсор Далластан жана эгер сизде Даллас менен бир аз тажрыйба болсо, анда алар 1Wire-автобусту колдонорун билишиңиз керек. Бул протоколду Raspi-configде иштетүү керек деп айтсам, таң калбаңыз.

Мен сенсорлорду кантип туташтырдым:

Pdf катары мен бир аз жеңилдетүү үчүн электр жана нан схемасын жүктөдүм.

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

4 -кадам: Желе интерфейсин долбоорлоо

Желе интерфейсин иштеп чыгуу
Желе интерфейсин иштеп чыгуу
Желе интерфейсин иштеп чыгуу
Желе интерфейсин иштеп чыгуу
Желе интерфейсин иштеп чыгуу
Желе интерфейсин иштеп чыгуу

Эми биз веб -сайтыбыздын дизайны керек болгон сенсорлорду туташтырдык.

Биз сенсорлордун бардык реалдуу убакыт маалыматтарын көрсөтүү менен веб-сайттын оңой көрүнүшүн каалайбыз.

Ошондой эле, биз убакыт аралыгында бул ченелген баалуулуктардын тарыхын көрө алгыбыз келет.

Ошентип, адегенде мен илхам алуу үчүн интернеттен издей баштадым. Баарынан маанилүүсү, мен издеп жүргөн дизайны жок маалымат сайттары. Базарда болгон метеорологиялык станциялардын дисплейи бар болчу. Жана ошол дисплейден менин илхамым чыкты. Көпчүлүк дисплейлердин сетка түрүндөгү дизайны бар. Бул мага бардык сенсорлор көрсөтүлө турган үй баракчасын түзүү идеясын берди.

Бирок, мен ар бир сенсордун тарыхын анын баалуулуктарын көрө турган баракча жасагым келгенин айттым.

Ушул себептен улам, мен муну камтыган дизайнымда 2 -бетти жасадым. Бул бетте мен сенсорум жөнүндө кошумча маалыматты көрө алдым, алар менин алдыңкы бетимде жана албетте тарых бөлүгүндө көрсөтүлбөйт.

Бир нече сааттан кийин мен толук дизайнымды иштеп чыктым!

Дизайн Adobe XD аркылуу жасалган.

5 -кадам: Маалыматтар базасын түзүү

Маалыматтар базасын түзүү
Маалыматтар базасын түзүү

Дизайн бөлүгүнөн тыныгуу үчүн мен маалымат базамда баштадым.

Бул маалымат базасы бардык сенсорлорду (5), бардык кыймылдаткычтарды (2) жана ошол сенсорлор болгон баалуулуктарды камтыйт.

Маалыматтар базасы абдан оңой жана анча -мынча мамилелери бар.

Сүрөттө маалымат базасынын моделин көрө аласыз.

6 -кадам: Веб -сайтты коддоо: Frontend (html Css)

Вебсайтка кайтуу!

Азыр менде дизайн бар, аны чындап колдонуу үчүн html css катары коддоого киришем.

Башкы бетте:

Мен ар бир сенсорду веб -сайтымдын элементи катары карап баштагам. Кийинчерээк бул бөлүктү менин Javascript кодум менен түзүүгө уруксат берүү үчүн.

Мен ошондой эле элементтерге кокусунан JS-кармоочу класстарды киргиздим. Булар ошол элементтин мазмунун өзгөртүүгө мүмкүндүк берет

Бул мага көп убакытты талап кылды, анткени мен бул тилде анча жакшы эмесмин.

Үй баракчасын бүтүрүп, тарых баракчасынан баштоого убакыт келди.

Тарых барагында:

Бул баракты кайра түзүү бир аз оңой болгон. Бул баракта сенсор жөнүндө маалыматты алуу үчүн JS-кармоочулар да бар болчу, реалдуу убакытта уячалар жана бардык өлчөнгөн баалуулуктар менен таблицаны көрсөтүү.

Таблицанын же диаграмманын ортосунда тандоо үчүн веб-сайтымда табулатура опциясын түзүү үчүн мен элементтерди көрсөтпөө же көрсөтпөө үчүн бир аз Javascript кошушум керек болчу.

Азыр бизде укмуш вебсайт бар, бирок анда эч нерсе көрсөтө албай жатасызбы? Муну оңдойлу.

Сиз менин кодумду github репозиторийимден таба аласыз:

7 -кадам: Веб -сайтты коддоо: Backend (eventlet) + Frontend коддоо (javascript)

Арткы бети:

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

колбадан импорттоодон Колбаны, сурамды, jsonifyти flask_socketioдон импорттоону SocketIO flask_corsдон CORSту импорттоону

Серверди иштетүү үчүн биз төмөнкүлөрдү кошушубуз керек:

socketio.run (app, debug = False, host = '0.0.0.0')

Азыр сервер онлайнда, бирок фронт менен сүйлөшө албайт.

Ал эч нерсени албайт жана кайтарбайт. Муну өзгөртөлү.

Берилиштер базасындагы бардык сенсорлорду сураш үчүн, маршрут кошулат:

@app.route (акыркы чекит + '/сенсорлор', ыкмалар = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () return jsonify (sensors = s), 200

Бул код DataRepository деп аталган классты колдонот жана маалымат базасы менен сүйлөшөт. Бул жерде биз сураган сенсорлорду кайтарып берет.

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

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

@socketio.on ('connect') def initial_connection (): print ('A new client connect') socketio.send ("U bent geconnecteerd") # # Кардарга жөнөт!

Бул тынчтык коду кардар туташканда иштей баштайт.

Ар кандай билдирүүлөрдү алуу үчүн бул кодду колдонсоңуз болот.

@socketio.on ('билдирүү') def message_recieved (): өтүү

Сиз ошондой эле билдирүүлөрдү жөнөтө аласыз. Бул төмөнкүлөр аркылуу ишке ашат.

socketio.emit ('Update_RTD', dict_results, уктуруу = Ырас)

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

Javascript:

Учурдагы маалыматтарды көрсөтүү жана маалымат базасынан маалымат алуу үчүн серверди арткы серверге туташтыруу үчүн бир аз JS кошуу маанилүү.

Биз маалыматты кабыл алуу жана жөнөтүү үчүн жасаган socketIO функцияларын чакырабыз.

Биз Json объектиси катары маалыматтарды алганыбызда, биз каалаган маалыматты алуу үчүн аны талкалап, анан веб-сайтыбызга койгон JS кармагычтарына салабыз.

Сиз менин кодумду github репозиторийимден таба аласыз:

8 -кадам: Корпус жасоо

Корпус жасоо
Корпус жасоо
Корпус жасоо
Корпус жасоо
Корпус жасоо
Корпус жасоо
Корпус жасоо
Корпус жасоо

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

Мен шарап идиштерин алдым.

Алардын бирин мен RPi жана сенсорлорумдун көпчүлүгүн камтыган кутуча катары колдоном.

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

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

Бул, албетте, муну кантип кыла алаарыңыздын мисалы. Сиз муну менен каалаган нерсеңизди кыла аласыз.

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