Мазмұны:

Тағы бір ақылды ауа райы станциясы, бірақ : 6 қадам (суреттермен)
Тағы бір ақылды ауа райы станциясы, бірақ : 6 қадам (суреттермен)

Бейне: Тағы бір ақылды ауа райы станциясы, бірақ : 6 қадам (суреттермен)

Бейне: Тағы бір ақылды ауа райы станциясы, бірақ : 6 қадам (суреттермен)
Бейне: Қорқынышты құпияларды қамтитын күнделік. Өтпелі. Джералд Даррелл. Мистикалық. Ужас 2024, Маусым
Anonim
Image
Image
Тағы бір ақылды метеостанция, бірақ…
Тағы бір ақылды метеостанция, бірақ…
Тағы бір ақылды метеостанция, бірақ…
Тағы бір ақылды метеостанция, бірақ…
Тағы бір ақылды метеостанция, бірақ…
Тағы бір ақылды метеостанция, бірақ…

Жақсы, мен білемін, мұндай метеостанциялар барлық жерде бар, бірақ айырмашылықты көру үшін бірнеше минут қажет …

  • Төмен қуат
  • 2 электрондық қағаз дисплейі…
  • бірақ 10 түрлі экран!
  • ESP32 негізінде
  • акселерометр мен температура / ылғалдылық сенсорлары
  • Wifi жаңарту
  • 3D басып шығарылған корпус

және басқа да көптеген пайдалы амалдар …

Негізгі идея - қораптың бағытына байланысты екі дисплейде әр түрлі ақпаратты көрсету. Корпус параллелепипедті қорап, брусчатка түрінде, аяқ ретінде қызмет ететін белбеу тәрізді.

Жабдықтар

Көріп отырғаныңыздай, жүйе 2 электронды қағаз экраны мен 3D басып шығарылған қораптан тұрады. Бірақ онда көп нәрсе бар:

  • ESP32
  • Бір MPU6050 акселерометр
  • DHT22 сенсоры
  • LiPo батареясы
  • Бәрін қосуға арналған ПХД
  • Үйде жасалған duPont ағындары

және Wi-Fi байланысы. Іс жүзінде 3 желі жарияланды, жүйе қосылу сәтті болғанша оларды бір -бірлеп тексереді.

1 -қадам: Неліктен басқа метеостанция?

Неліктен басқа метеостанция?
Неліктен басқа метеостанция?
Неліктен басқа метеостанция?
Неліктен басқа метеостанция?
Неліктен басқа метеостанция?
Неліктен басқа метеостанция?
Неліктен басқа метеостанция?
Неліктен басқа метеостанция?

Идея - қораптың бағытына байланысты екі экранда әр түрлі ақпаратты көрсету. Корпус параллелепипедті қорап түрінде, брусчатка түрінде, оны тіреу үшін тірек ретінде қызмет ететін белбеуі бар.

Акселерометр қозғалысты және бағдарды анықтайды және дисплейлерді іске қосады.

Энергияны үнемдеу үшін мен электронды қағаз экрандарын (төмендегі сілтемелерді қараңыз) таңдадым, олар дисплей қуатсыз болса да сақталады. Сол сияқты ESP32 үшін мен Lolin32 модулін таңдадым (үнемділігімен әйгілі), мен терең ұйқыны басқаруды және акселерометрмен үзілістен оятуды үйренуге тура келді.

Экрандар SPI арқылы қосылады, мен оларды ESP32 -ге қосатын дұрыс түйреуіштерді таппас бұрын біраз іздедім, өйткені маған акселерометр үшін I2C, DHT22 оқуға арналған түйреуіш және батарея кернеуін өлшеу үшін тағы 2 басқа керек екенін білдім. ESP32 толықтай дерлік зарядталған! Кейбір түйреуіштер тек оқуға арналған екенін білемін (мен оларды DHT сенсоры үшін қолдандым), басқаларын Wifi-мен бірге пайдалану мүмкін емес, дұрыс конфигурацияны табу қиын болды.

Қорап 4 бағытта бағытталуы мүмкін, сонымен қатар жалпақ. Барлығы 4*2+2 = 10 ақпарат түрін тек 2 экранда көрсетуге мүмкіндік береді. Бұл сізге көп нәрсені көрсетуге мүмкіндік береді:

  • Күн мен күннің әулиесі
  • Қазіргі уақыт
  • Бүгінгі ауа райы болжамы
  • Алдағы сағаттарға арналған ауа райы болжамы
  • Алдағы күндері ауа райы болжамы
  • Батарея зарядының деңгейі
  • Менде әлі де орын болған кезде, мамандандырылған веб -сайттан кездейсоқ цитата.

2 -қадам: Сізге не қажет?

Саған не қажет ?
Саған не қажет ?
Саған не қажет ?
Саған не қажет ?
Саған не қажет ?
Саған не қажет ?
  • ESP32: Lolin32 модулі (қуаты өте төмен, батарея қосқышымен жабдықталған, батареяны USB плюс арқылы зарядтай алады)
  • 2 эпэр дисплейі: 4,2 дюйм және 2,9 дюйм. Мен модельдерді Good Display дүкенінен таңдадым.
  • DHT22 сенсоры
  • MCU6050 акселерометр - гирометр I2C сенсоры
  • LiPo батареясы
  • Батарея кернеуін өлшеу үшін: 2 10к резистор, 1 100к резистор, 1 100нФ конденсатор, 1 MOSFET транзисторы
  • Дәнекерлеу мен дәнекерлеу үтігі, баспа платасы
  • Корпус үшін 3D принтерге қол жеткізу

Тіркелген сурет ПХД -дегі барлық компоненттердің орнын көрсетеді: мен корпуста орналасуы үшін орынды үнемдеуге тура келді, ол тым үлкен болмауы керек.

Ауа райы туралы мәліметтерді алу үшін сіз ауа райы API -не тіркеліп, 'Variables.h' файлындағы кілттерді дұрыс жерге қоюыңыз керек (төменде қараңыз).

Ауа райы сайттары:

  • apixu
  • accuweather

3 -қадам: Бұл жоба мені көп нәрсені ойландырды және үйренді …

Бұл жоба мені көп нәрсені ойландырды және үйренді …
Бұл жоба мені көп нәрсені ойландырды және үйренді …
Бұл жоба мені көп нәрсені ойландырды және үйренді …
Бұл жоба мені көп нәрсені ойландырды және үйренді …
Бұл жоба мені көп нәрсені ойландырды және үйренді …
Бұл жоба мені көп нәрсені ойландырды және үйренді …

Бұл жүйе аз қуатты болуы керек еді, сондықтан батареяны әр түн сайын зарядтаудың қажеті жоқ … Энергияны үнемдеу үшін мен дисплейді өшірілмесе де сақтайтын электрондық қағазды таңдадым. Сол сияқты ESP32 үшін мен Lolin32 модулін таңдадым (үнемділігімен әйгілі), мен терең ұйқыны басқаруды, акселерометр тудыратын үзіліс туралы оятуды үйренуім керек болды.

Қорап 4 бағытта бағытталуы мүмкін, тегіс. Барлығы 4*2+2 = 10 мүмкін ақпарат түрін көрсетеді. Бұл сізге көп нәрсені жасауға мүмкіндік береді: күн мен күннің әулиесі, уақыт, бүгінгі ауа райы болжамы, алдағы сағаттарға немесе күндерге ауа райы болжамы, аккумулятордың зарядталу деңгейі және мамандандырылған веб -сайттан кездейсоқ баға.

Интернетте көп нәрсені іздеу керек, және сіз білесіз: WiFi - энергия үнемдеудің жауы …

Сондықтан біз ақпаратты жаңартып тұру үшін, бірақ қосылу үшін көп уақыт жұмсамай-ақ қосылымды басқаруға тиіспіз. Тағы бір күрделі мәселе: дәл уақытты сақтау. Маған RTC қажет емес, өйткені мен интернетте уақыт таба аламын, бірақ ESP32 ішкі сағаты, әсіресе ұйқы кезінде, аздап ауытқиды. Мен Интернетте сағатты қалпына келтіруді күту кезінде жеткілікті дәл болудың жолын табуым керек болды. Мен оны интернетте сағат сайын қайта синхрондап отырамын.

Осылайша автономия (Интернетке қосылу жиілігі) мен көрсетілген ақпараттың дәлдігі арасында айырма бар.

Тағы бір шешілетін мәселе - есте сақтау. ESP32 қатты ұйқыда болғанда, жад жоғалады, тек RTC RAM деп аталады. Бұл жадтың ені 4 МБ, оның тек 2 -ін ғана бағдарлама үшін пайдалануға болады. Бұл жадта мен ұйқы кезеңінен кейін бір орындаудан екіншісіне дейін сақталуы керек әр түрлі бағдарлама айнымалыларын сақтауым керек: ауа райы болжамы, уақыт пен күн, белгіше файлдарының атаулары, тырнақшалар және т..

Белгішелер туралы айтатын болсақ, олар SPIFFS, ESP32 файлдық жүйесінде сақталады. Тегін Wunderground ауа райы API жабылғаннан кейін мен ауа райы туралы басқа ақысыз жеткізушілерді іздеуге тура келді. Мен екеуін таңдадым: біреуі қазіргі ауа райы үшін, 12 сағаттық болжаммен, екіншісі-көпкүндіктерге арналған. Белгішелер бірдей емес, сондықтан маған екі жаңа мәселе туғызды:

  • Белгішелер жиынтығын таңдаңыз
  • Бұл белгішелерді 2 сайттың болжамды кодтарына сәйкестендіріңіз

Бұл хат алмасу RTC жедел жадында сақталған, сондықтан оны қайта жүктеудің қажеті жоқ.

Иконалармен байланысты соңғы мәселе. Олардың барлығын SPIFFS -те сақтау мүмкін емес. Барлық файлдар үшін орын тым аз. Суретті қысу керек болды. Мен Python -да сценарий жаздым, ол менің белгіше файлдарымды оқиды және оларды RLE -ге қысады, содан кейін қысылған файлдарды SPIFFS -те сақтайды. Онда өткізді.

Бірақ электронды қағазды көрсету кітапханасы қысылған суреттерді емес, BMP типті файлдарды ғана қабылдайды. Осы қысылған файлдардан белгішелерді көрсету үшін маған қосымша функция жазу керек болды.

Интернетте оқылатын деректер көбінесе json форматында болады: ауа райы туралы мәліметтер, күннің әулиесі. Мен бұл үшін (тамаша) arduinoJson кітапханасын қолданамын. Бірақ тырнақшалар бұлай емес. Мен оларды арнайы сайттан аламын, сондықтан мен оларды веб -беттің мазмұнына тікелей қарап оқуым керек. Ол үшін арнайы код жазуым керек болды. Күн сайын, түн ортасында, бағдарлама осы сайтқа кіреді және онға жуық кездейсоқ цитаталарды оқиды және оларды RTC жедел жадында сақтайды. Корпус үлкен экранға жоғары бағытталған кезде, олардың біреуі кездейсоқ түрде көрсетіледі.

Мен сізге екпінді кейіпкерлерді көрсету мәселесін айтамын (кешіріңіз, тырнақшалар француз тілінде).

Кішкене экран жоғары болғанда, батареяның кернеуі көрсетіледі, қалған деңгейді жақсы көру үшін сызбамен. Батарея кернеуін оқу үшін электронды құрастыру қажет болды. Өлшеу батареяны зарядсыздандырмауы керек болғандықтан, мен интернеттен табылған диаграмманы қолдандым, ол MOSFET транзисторын коммутатор ретінде өлшеу кезінде ғана токты тұтыну үшін пайдаланады.

Бұл схеманы жасай алу үшін және мен бәрін мүмкіндігінше қорапқа сыйғызу үшін, мен жүйенің барлық компоненттерін қосу үшін ПХД жасауым керек болды. Бұл менің бірінші ПХД. Мен бақытты болдым, себебі бұл жақта бәрі жақсы жұмыс істеді …

Имплантация картасын қараңыз: «тыйым салынған аймақ» - бұл USB кабелін қосуға арналған аймақ. Lolin32 модулі батареяны USB арқылы зарядтауға мүмкіндік береді: егер USB кабелі қосылған болса, батарея зарядталады және модуль бір уақытта жұмыс істейді.

Соңғы нүкте: қаріптер. Әр түрлі мөлшерде, батыл немесе жоқ, оларды жасау және сақтау керек болды. Adafruit GFX кітапханасы қаріп файлдарын дұрыс каталогқа орнатқаннан кейін бұл мәселеге жақсы көңіл бөледі. Файлдарды жасау үшін мен Font Converter сайтын қолдандым, өте ыңғайлы!

Таңдағаныңызға көз жеткізіңіз:

  • Алдын ала қарау дисплейі: TFT 2.4 «
  • Кітапхананың нұсқасы: Adafruit GFX қарпі

Қысқаша айтқанда: үлкен жоба, ол маған көп нәрсені үйренуге мүмкіндік берді

4-қадам: Электронды қағаз дисплейлерін пайдалану

Электронды қағаз дисплейлерін қолдану
Электронды қағаз дисплейлерін қолдану

Бұл экрандардың негізгі кемшілігі бейнеде айқын көрінеді: дисплейдің жаңартылуы бір немесе екі секундқа созылады және жыпылықтау арқылы жүзеге асады (екі экранның қалыпты және төңкерілген нұсқаларының балама дисплейі). Бұл ауа райы ақпараты үшін қолайлы, себебі мен оны жиі жаңартпаймын (қораптың бағытын өзгертуді қоспағанда). Бірақ уақытша емес. Сондықтан (және тұтынуды шектеу үшін) мен әлі де HH: MM дисплейін қолданамын (секундтар емес).

Сондықтан дисплейді жаңартудың басқа жолын іздеуге тура келді. Бұл экрандар (олардың кейбіреулері) ішінара жаңартуды қолдайды (экранның бір бөлігіне немесе бүкіл экранға қолданылады …), бірақ бұл маған жақсы болмады, себебі менің үлкен экраным (уақытты көрсететін) пикселдердің елестерін сақтайды. олар ауыстырылады. Мысалы, 10: 12 -ден 10: 13 -ке өткенде '2' '3' ішінде сәл көрінеді, ал '4', '5' және т.б.дан кейін одан да жақсы көрінеді. Бұл менің экраным үшін дәл осылай екенін көрсету үшін: мен оны GxEPD2 электронды дисплей кітапханасының авторымен талқыладым, ол маған бұл құбылысты өзінің экрандарымен бақыламағанын айтты. Біз елестерді аулай алмай, параметрлерді өзгертуге тырыстық.

Сондықтан біз басқа шешім табуға мәжбүр болдық: мен ішінара екі рет сергітуді ұсындым, ол мәселені шешті (кем дегенде бұл мен үшін қанағаттанарлық). Сағаттар экранның жарқылынсыз өтеді және елестер жоқ. Алайда ауысу бірден болмайды: уақытты өзгертуге бір секундтан сәл артық уақыт кетеді.

5 -қадам: Оны жасау

Жасау
Жасау
Жасау
Жасау
Жасау
Жасау
Жасау
Жасау

Бағыт өзгерген кезде іште ештеңе қозғалмауы үшін әр түрлі компоненттер (дисплейлер, электронды модульдер, ПХД, аккумуляторлар) желім пистолетімен жабыстырылады. Сымдарды ПХД астына бағыттау үшін мен оны аралықтармен жасалған аяқтарға орнаттым, бұл батареяға да қатысты.

Көп ұзамай мен сыртқы USB микрофон қосқышын орнатамын, сондықтан батареяны қайта зарядтау үшін корпусты ашудың қажеті жоқ.

Мүмкін, мен мұның бәрін жетілдіру үшін OTA -ны жаңартуға қызығамын …

6 -қадам: Код және файлдар

Image
Image

Үш мұрағаттық файл ұсынылады:

  • Ауа райы станциясы.zip: Arduino IDE көмегімен жүктеу үшін Arduino коды
  • Boite ecran.zip: корпусқа арналған CAD және 3D принтер файлдары
  • data.zip: ESP32 SPIFFS файлдарына жүктелетін файлдар.

Егер сіз файлдарды ESP32 SPIFFS -ке қалай жүктеу керектігін білмесеңіз, өте пайдалы плагин ұсынылатын және оны Arduino IDE -де қалай қолдану керектігін оқыңыз.

Терең ұйқының бағдарламалануы Arduino стандартты бағдарламалауынан мүлдем өзгеше. ESP32 үшін бұл ESP32 оянатынын және орнатуды орындайтынын, содан кейін ұйықтайтынын білдіреді. Сонымен, цикл функциясы бос және ешқашан орындалмайды.

Кейбір инициализация фазасы бірінші орындауда бір рет қана орындалуы керек (мысалы, уақытты алу, ауа райы деректері, дәйексөздер және т. Шешім-бұл әр ояту кезінде жоғарылайтын RTC жедел жадында (ол ұйқының терең кезеңінде де белсенді болып қалады) сақтау. Егер ол 1 -ге тең болса, онда бұл бірінші орындау және ESP32 инициализация фазасын іске қосады, әйтпесе бұл фаза өткізіп жіберіледі.

ESP32 -ді ояту үшін бірнеше мүмкіндіктер бар:

  • Таймермен ояту: код ұйқыға дейін терең ұйқының ұзақтығын есептейді. Бұл уақытты (әр 1, 2, 3 немесе 5 минут сайын) немесе ауа райы деректерін (әр 3 немесе 4 сағат сайын) тырнақшалар мен күннің қасиетті (24 сағат сайын) жаңарту үшін қолданылады.
  • Үзіліспен ояту: акселерометр ESP32 ояту үшін қолданылатын сигнал жібереді. Бұл бағдардың өзгеруін анықтау және дисплейлерді жаңарту үшін қолданылады
  • Сенсорлық сенсорды ояту: ESP32 сенсорлық сенсор ретінде жұмыс істейтін бірнеше түйреуішпен жабдықталған, бірақ оларды таймерді ояту кезінде қолдану мүмкін емес, сондықтан мен мұны қолданған жоқпын.

Дисплейді жаңартпау үшін Adafruit GFX кітапханасы қолдамайтын екпіндерді алып тастау үшін энергияны үнемдеу кезінде уақытты дәл сақтау үшін (мысалы, NTP серверін әр минут сайын қосуға болмайды) кодтың басқа жерлерінде бағдарламалаудың басқа да амалдары бар. акселерометр параметрлерін орнату қажет емес, әсіресе үзіліспен ояту үшін, ұйықтау уақытын дәл есептеңіз, егер IDE-ге қосылмаған болса, сериялық консольді пайдаланбаңыз (энергияны қайта үнемдеу үшін), ажыратыңыз. Wi -Fi қажет болмаған кезде және т.… және код функцияларды түсінуге көмектесетін түсініктемелерге толы.

Нұсқаулықты оқығаныңыз үшін рахмет (менің бірінші нұсқауым). Сізге бұл метеостанцияны жасау ұнайды деп сенемін

Сенсорлар сайысы
Сенсорлар сайысы

Сенсорлар байқауында екінші орын

Ұсынылған: