Мазмұны:

Attiny85 мини -метеостанциясы: 6 қадам (суреттермен)
Attiny85 мини -метеостанциясы: 6 қадам (суреттермен)

Бейне: Attiny85 мини -метеостанциясы: 6 қадам (суреттермен)

Бейне: Attiny85 мини -метеостанциясы: 6 қадам (суреттермен)
Бейне: Lesson 01 Arduino Boards | Robojax Arduino Step By Step Course 2024, Қараша
Anonim
Attiny85 бар шағын ауа райы станциясы
Attiny85 бар шағын ауа райы станциясы
Attiny85 бар шағын ауа райы станциясы
Attiny85 бар шағын ауа райы станциясы
Attiny85 бар шағын ауа райы станциясы
Attiny85 бар шағын ауа райы станциясы

Жақында нұсқаулықта Indigod0g екі Arduino көмегімен жақсы жұмыс істейтін шағын ауа райы станциясын сипаттады. Мүмкін, бәрі ылғалдылық пен температура көрсеткіштерін алу үшін 2 Ардуиноны құрбан еткісі келмеуі мүмкін, мен екі Attiny85 құрылғысымен ұқсас функцияны жасауға болатынын түсіндірдім. Менің ойымша, сөйлеу оңай, сондықтан мен ақшамды аузыма салған дұрыс.

Шын мәнінде, егер мен бұрынғы екі нұсқаулықты біріктірсем, мен жаздым:

Arduino немесе Attiny үшін 2 сымды СКД интерфейсі және Attiny85 (Arduino IDE 1.06) арасында деректерді қабылдау және жіберу, онда жұмыстың көп бөлігі дайын. Бағдарламалық жасақтаманы аздап бейімдеу қажет.

Мен I2C СК емес, ауыспалы регистрі бар екі сымды дисплейлік шешімді таңдадым, себебі Attiny -де ауысым регистрі I2C шинасына қарағанда оңай орындалады. Алайда, егер сіз, мысалы, BMP180 немесе BMP085 қысым датчигін оқығыңыз келсе, сізге I2C қажет, сондықтан сіз I2C СКД де қолдана аласыз. TinyWireM - бұл Attiny -дегі I2C үшін жақсы кітапхана (бірақ оған қосымша орын қажет).

БОМ таратқыш: DHT11 Attiny85 10 к резистор 433МГц таратқыш модулі

Қабылдағыш Attiny85 10к резистор 433 МГц қабылдағыш модуль

Дисплей 74LS164 ауысу регистрі 1N4148 диод 2x1k резистор 1x1k айнымалы резистор СКД дисплей 2x16

1 -қадам: Attiny85 бар шағын ауа райы станциясы: таратқыш

Attiny85 бар шағын ауа райы станциясы: таратқыш
Attiny85 бар шағын ауа райы станциясы: таратқыш
Attiny85 бар шағын ауа райы станциясы: таратқыш
Attiny85 бар шағын ауа райы станциясы: таратқыш
Attiny85 бар шағын ауа райы станциясы: таратқыш
Attiny85 бар шағын ауа райы станциясы: таратқыш
Attiny85 бар шағын ауа райы станциясы: таратқыш
Attiny85 бар шағын ауа райы станциясы: таратқыш

Таратқыш - бұл қалпына келтіру желісінде тартылатын резисторы бар Attiny85 -тің негізгі конфигурациясы. «0» цифрлық түйреуішіне беруші модулі бекітілген, ал DHT11 деректер түйрегіші цифрлық істікке 4. Антенна ретінде 17,2 см сымды бекітеді. (әлдеқайда жақсы антенна үшін 5 -қадамды қараңыз). Бағдарламалық жасақтама келесідей:

// Attiny -де жұмыс істейді // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // кітапханалар #қосу // Роб Тилларттан #DHT11 қосу; #define DHT11PIN 4 #dexine TX_PIN 0 // сіздің таратқыш қосылған түйреуіш // айнымалылар өзгереді h = 0; float t = 0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. ылғалдылық; t = DHT11.температура; // Мен білемін, мен мұнда 3 бүтін сандық айнымалыны қолданамын // мұнда 1 қолдануға болатын //, бірақ бұл жай ғана transmit_h = 100* (int) h ұстануға оңай; transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); кешіктіру (500); }

Бағдарлама деректерді жіберу үшін Манчестер кодын пайдаланады. Ол DHT11 оқиды және температура мен ылғалдылықты 2 бөлек қалқымда сақтайды. Манчестер коды қалқымалы емес, бірақ бүтін санды жіберетіндіктен, менде бірнеше нұсқа бар: 1- қалқымалы бөлшектерді екі бүтін санға бөлу және оларды жіберу2- әр флотты бүтін сан ретінде жіберу3- екі флотты бір бүтін сан ретінде жіберу 1 нұсқасымен мен біріктіру керек бүтін сандар қайтадан қабылдағышта қалқып жүреді және мен қандай бүтін сан екенін анықтауым керек, бұл кодты ұзақ уақытқа созады 2 -нұсқада мен әлі де бүтін сан ылғалдылыққа, ал температураға қайсысына сәйкес келетінін анықтауым керек. Мен бір бүтін сан жіберілу кезінде жоғалған жағдайда бірізділікпен бара алмаймын, сондықтан мен бүтін санға бекітілген идентификаторды жіберуім керек еді. 3 -нұсқада мен тек бір бүтін санды жібере аламын. Әлбетте, бұл көрсеткіштерді біршама дәл келтіреді - 1 градус ішінде және температураны нөлден төмен жібере алмайды, бірақ бұл қарапайым код және мұны шешудің жолдары бар. Әзірге бұл тек принцип бойынша, сондықтан мен қалқымалы бөлшектерді бүтін сандарға айналдырамын және ылғалдылықты 100 -ге көбейтемін. Содан кейін мен ылғалдылық 100% ылғалдылыққа қосылмайтынын ескере отырып. Мен алатын максималды нөмір - 9900. Температура 100 градустан жоғары болмайтынын ескере отырып, максималды саны 99 болады, сондықтан мен жіберетін ең жоғары нөмір - 9999 және оны қабылдаушы жағынан ажырату оңай. Мен 3 бүтін сандарды қолданатын есептеулерім шамадан тыс, себебі оны 1 айнымалымен оңай жасауға болады. Мен кодты орындауды жеңілдеткім келді, енді код келесі түрде құрастырылады:

Екілік эскиз өлшемі: 2 833 байт (8, 192 байт максимум), сондықтан мен пайдаланатын dht.h кітапханасы Attiny 45 немесе 85NOTE -ке сәйкес келеді, бұл Роб Тилларттан алынған кітапхана. Бұл кітапхана DHT22 үшін де жарамды. Мен 1.08 нұсқасын қолданамын. Алайда Attiny85 кітапхананың төменгі нұсқалары бар DHT22 оқуда қиындықтарға тап болуы мүмкін. Маған расталды, 1.08 және 1.14 - қарапайым Arduino -де жұмыс істесе де - Attiny85 -те DHT22 оқу қиын. Егер сіз DHT22 Attiny85 -те қолданғыңыз келсе, осы кітапхананың 1.20 нұсқасын қолданыңыз. Мұның бәрі уақытпен байланысты. Кітапхананың 1.20 нұсқасы оқу жылдамдығына ие. (Jeroen пайдаланушылық тәжірибесі үшін рахмет)

2 -қадам: Attiny85 бар шағын ауа райы станциясы: қабылдағыш

Attiny85 бар шағын ауа райы станциясы: қабылдағыш
Attiny85 бар шағын ауа райы станциясы: қабылдағыш

Тағы да Attiny85 негізгі конфигурацияда 10 к резистормен жоғары тартылған Reset түйрегімен қолданылады. Қабылдағыш модулі цифрлық 1 істікке бекітілген (чипте 6 түйреуіш). СК 0 және екі сандық түйреуіштерге бекітілген. Антенна ретінде 17,2 см сымды жалғаңыз. Код келесідей:

#қосу

#қосу LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = физикалық түйреуіш 6 жарамсыз күйді орнату () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } void loop () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print («Ылғал:»); lcd.print (м/100); lcd.setCursor (0, 1); lcd.print («Temp»); lcd.print (m%100); }}

Код өте қарапайым: берілетін бүтін сан «m» айнымалысында қабылданады және сақталады. Ол ылғалдылықты беру үшін 100 -ге бөлінеді, ал 100 модулі температураны береді. Демек, алынған бүтін сан 33253325/100 = 333325 % 100 болды делік. = 25Бұл код 3380 байтты құрайды, сондықтан оны 45 емес, attiny85 арқылы ғана қолдануға болады.

3 -қадам: Attiny85/45 бар шағын ауа райы станциясы: дисплей

Attiny85/45 бар шағын ауа райы станциясы: дисплей
Attiny85/45 бар шағын ауа райы станциясы: дисплей
Attiny85/45 бар шағын ауа райы станциясы: дисплей
Attiny85/45 бар шағын ауа райы станциясы: дисплей

Дисплей үшін екі сымды дисплейдегі нұсқаулыққа сілтеме жасаған дұрыс. Қысқаша айтқанда, жалпы 16x2 дисплейі екі цифрлық түйреуішпен жұмыс істей алатын ауысымды тіркеушіні қолданады. мүмкін, бірақ содан кейін сізге Attiny -де I2C хаттамасын енгізу қажет. Tinywire протоколы мұны істей алады. Кейбір дереккөздер бұл 1 МГц сағатты күтеді деп айтса да, мен оны 8МГц -те қолдануға еш қиындық көрмедім (басқа жобада).

4 -қадам: Attiny85/45 бар шағын ауа райы станциясы: мүмкіндіктер/қорытындылар

Attiny85/45 бар шағын ауа райы станциясы: мүмкіндіктер/қорытындылар
Attiny85/45 бар шағын ауа райы станциясы: мүмкіндіктер/қорытындылар
Attiny85/45 бар шағын ауа райы станциясы: мүмкіндіктер/қорытындылар
Attiny85/45 бар шағын ауа райы станциясы: мүмкіндіктер/қорытындылар
Attiny85/45 бар шағын ауа райы станциясы: мүмкіндіктер/қорытындылар
Attiny85/45 бар шағын ауа райы станциясы: мүмкіндіктер/қорытындылар

Жоғарыда айтылғандай, мен екі аттиний 85 (тіпті бір attiny85+ 1 attiny45) бар шағын ауа райы станциясын жасауға болатынын көрсету үшін нұсқаулық жасадым. Ол DHT11 көмегімен ылғалдылық пен температураны ғана жібереді., 6 тіпті кейбір қулықпен. Деректерді басқа сенсорлардан жіберуге болады. Менің жобамда- ленталық тақтадағы және кәсіби PCB (OSHPark) суреттерінде көрсетілгендей- мен DHT11-ден, LDR-ден және PIR-ден деректерді жіберемін/қабылдаймын. attiny85 қабылдағыш ретінде пайдаланудағы шектеулер - бұл деректерді жарқын стильде көрсету. Есте сақтау қабілеті шектеулі болғандықтан: «Температура, ылғалдылық, жарық деңгейі, тақырып жақындады» сияқты мәтіндер есте сақтау кеңістігін тез толтырады. Дегенмен, температура мен ылғалдылықты жіберу/алу үшін екі Arduino -ны қолдануға ешқандай себеп жоқ. Таратқышты ұйқыға жіберу және оны ояту керек, тек әрбір 10 минут сайын деректерді жібереді және осылайша оны түйменің ұяшығынан береді. Әлбетте, температура мен ылғалдылық туралы мәліметтерді ғана жіберуге болмайды, сонымен қатар шағын таратқыштардың жиыны болуы мүмкін. топырақ ылғалдылығын өлшеңіз немесе анемометр немесе жаңбыр өлшегішті қосыңыз

5 -қадам: шағын ауа райы станциясы: антенна

Шағын метеостанция: антенна
Шағын метеостанция: антенна

Антенна кез келген 433 МГц орнатудың маңызды бөлігі болып табылады. Мен стандартты 17,2 см «таяқша» антеннасымен тәжірибе жүргіздім және катушкалы антеннасы бар қысқа флиртке ие болдым. Дизайн Бен Шюелерден алынған және 'Elektor' журналында жарияланған сияқты. Бұл «Ауа салқындатылатын 433 МГц антенна» сипаттамасы бар PDF файлын орындауға оңай. (Сілтеме жоғалды, мұнда тексеріңіз)

6 -қадам: BMP180 қосу

BMP180 қосу
BMP180 қосу

BMP180 сияқты барометрлік қысым датчигін қосқыңыз келе ме? менің басқа нұсқаулықты тексеріңіз.

Ұсынылған: