Съдържание:

Мини метеорологична станция с Attiny85: 6 стъпки (със снимки)
Мини метеорологична станция с Attiny85: 6 стъпки (със снимки)

Видео: Мини метеорологична станция с Attiny85: 6 стъпки (със снимки)

Видео: Мини метеорологична станция с Attiny85: 6 стъпки (със снимки)
Видео: Digispark attiny 85 WEATHER STATION DHT 11 ssd1306 2024, Юли
Anonim
Мини метеорологична станция с Attiny85
Мини метеорологична станция с Attiny85
Мини метеорологична станция с Attiny85
Мини метеорологична станция с Attiny85
Мини метеорологична станция с Attiny85
Мини метеорологична станция с Attiny85

В скорошна инструкция Indigod0g описва мини метеорологична станция, която работи доста добре, използвайки два Arduinos. Може би не всеки иска да жертва 2 Arduino, за да получи показания за влажност и температура и коментирах, че би трябвало да е възможно да се направи подобна функция с две Attiny85. Предполагам, че разговорът е лесен, затова по -добре да сложа парите си там, където ми е устата.

Всъщност, ако комбинирам две по -ранни инструкции, написах:

2-Wire LCD интерфейс за Arduino или Attiny и Получаване и изпращане на данни между Attiny85 (Arduino IDE 1.06), тогава по-голямата част от работата вече е свършена. Трябва само да адаптирате софтуера малко.

Избрах за двужично LCD решение с регистър за смяна, а не I2C LCD, защото на Attiny регистърът за смяна е по -лесен за изпълнение от I2C шината. Въпреки това … ако например искате да прочетете сензор за налягане BMP180 или BMP085, все пак се нуждаете от I2C за това, така че можете също така да използвате I2C LCD. TinyWireM е добра библиотека за I2C на Attiny (но изисква допълнително място).

BOM Предавателят: DHT11 Attiny85 10 k резистор 433MHz предавателен модул

Приемник Attiny85 10k резистор 433 MHz приемник модул

Дисплеят 74LS164 регистър на смяна 1N4148 диод 2x1k резистор 1x1k променлив резистор LCD дисплей 2x16

Стъпка 1: Мини метеорологична станция с Attiny85: Предавателят

Мини метеорологична станция с Attiny85: Предавателят
Мини метеорологична станция с Attiny85: Предавателят
Мини метеорологична станция с Attiny85: Предавателят
Мини метеорологична станция с Attiny85: Предавателят
Мини метеорологична станция с Attiny85: Предавателят
Мини метеорологична станция с Attiny85: Предавателят
Мини метеорологична станция с Attiny85: Предавателят
Мини метеорологична станция с Attiny85: Предавателят

Предавателят е много основна конфигурация на Attiny85 с издърпващ се резистор на линията за нулиране. Предавателният модул е прикрепен към цифров щифт '0' и DHT11 данните се свързват към цифров щифт 4. Прикрепете проводник от 17,2 см като антена (за много по -добра антена вижте стъпка 5). Софтуерът е следният:

// ще работи по Attiny // RF433 = D0 пин 5

// DHT11 = D4 пин 3 // библиотеки #include // От Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // пин, където е свързан вашият предавател // променливите плават h = 0; поплавък 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; предава_t = (int) t; предаване_данни = предаване_h+предаване_t; man.transmit (transmit_data); забавяне (500); }

Софтуерът използва код на Манчестър за изпращане на данните. Той отчита DHT11 и съхранява температурата и влажността в 2 отделни поплавъка. Тъй като кодът на Манчестър не изпраща плаващи знаци, а цяло число, имам няколко опции: 1- разделям поплавъците на две цели числа и ги изпращам2- изпращам всеки поплавък като цяло число3- изпращам двата поплавъка като едно цяло число С опция 1 трябва да комбинирам целите числа отново се изплават в приемника и трябва да идентифицирам кое цяло число е, което прави кода дълъг. С опция 2 все още трябва да идентифицирам кое цяло число е за влажност и кое за температура. Не мога да премина по последователност сам, в случай че едно цяло число се загуби при предаването, така че ще трябва да изпратя идентификатор, прикрепен към цяло число. С опция 3 мога да изпратя само едно цяло число. Очевидно това прави показанията малко по -малко точни - в рамките на 1 градус - и човек не може да изпраща температури под нулата, но това е просто прост код и има начини да се заобиколи това. Засега става въпрос само за принципа. И така, това, което правя, е да превърна поплавъците в цели числа и да умножа влажността със 100. След това добавям температурата към умножената влажност. Като се има предвид факта, че влажността никога няма да бъде 100% максималният номер, който ще получа, е 9900. Предвид факта, че температурата също няма да бъде над 100 градуса, максималният номер ще бъде 99, следователно най -високият номер, който ще изпратя, е 9999 и това е лесно да се отдели от страната на приемника. Разбира се моето изчисление, при което използвам 3 цели числа, е прекалено много, тъй като лесно може да се направи с 1 променлива. Просто исках да направя кода по -лесен за следване. Кодът сега се компилира като:

Размер на двоична скица: 2, 836 байта (от максимум 8, 192 байта), така че да се побере в Attiny 45 или 85 ЗАБЕЛЕЖКА библиотеката dht.h, която използвам, е тази на Rob Tillaart. Тази библиотека е подходяща и за DHT22. Използвам версия 1.08. Attiny85 обаче може да има проблеми с четенето на DHT22 с по -ниски версии на библиотеката. Беше ми потвърдено, че 1.08 и 1.14 - въпреки че работят на обикновен Arduino - имат проблеми с четенето на DHT22 на Attiny85. Ако искате да използвате DHT22 на Attiny85, използвайте версията 1.20 на тази библиотека. Всичко е направено с времето. Версията на библиотеката 1.20 има по -бързо четене. (Благодаря за това потребителско изживяване Jeroen)

Стъпка 2: Мини метеорологична станция с Attiny85: приемникът

Мини метеорологична станция с Attiny85: приемникът
Мини метеорологична станция с Attiny85: приемникът

Отново Attiny85 се използва в основна конфигурация с издърпания щифт високо с 10 k резистор. Приемният модул е прикрепен към цифров щифт 1 (щифт 6 на чипа). LCD е прикрепен към цифрови щифтове 0 и 2. Прикрепете като антена проводник от 17,2 см. Кодът е следният:

#включва

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = физически пин 6 void setup () {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.принт (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m%100); }}

Кодът е сравнително прост: предаденото цяло число се приема и съхранява в променлива „m“. Тя се разделя на 100, за да се даде влажност, а по модул на 100 дава температура. Така че приемем, че полученото цяло число е 33253325/100 = 333325 % 100 = 25 Този код се компилира като 3380 байта и следователно може да се използва само с attiny85, а не с 45

Стъпка 3: Мини метеорологична станция с Attiny85/45: Дисплеят

Мини метеорологична станция с Attiny85/45: Дисплеят
Мини метеорологична станция с Attiny85/45: Дисплеят
Мини метеорологична станция с Attiny85/45: Дисплеят
Мини метеорологична станция с Attiny85/45: Дисплеят

За дисплея е най -добре да се позова на инструкциите си на двужичен дисплей. Накратко, обикновен 16x2 дисплей използва регистър за смяна, така че да може да работи с два цифрови пина. Разбира се, ако предпочитате да използвате дисплей, готов за I2C, т.е. също е възможно, но тогава трябва да внедрите I2C протокол на Attiny. Протоколът Tinywire може да направи това. Въпреки че някои източници казват, че това очаква 1 Mhz часовник, нямах никакви проблеми (в друг проект) да го използвам на 8Mhz

Стъпка 4: Мини метеорологична станция с Attiny85/45: Възможности/заключения

Мини метеорологична станция с Attiny85/45: Възможности/заключения
Мини метеорологична станция с Attiny85/45: Възможности/заключения
Мини метеорологична станция с Attiny85/45: Възможности/заключения
Мини метеорологична станция с Attiny85/45: Възможности/заключения
Мини метеорологична станция с Attiny85/45: Възможности/заключения
Мини метеорологична станция с Attiny85/45: Възможности/заключения

Както казах, направих тази инструкция, за да покажа, че може да се направи мини метеорологична станция с две attiny85 (дори с една attiny85+ 1 attiny45). Тя изпраща само влажност и температура, използвайки DHT11. Въпреки това, Attiny има 5 цифрови пина за използване, 6 дори с известна хитрост. Следователно е възможно да се изпращат данни от повече сензори. В моя проект- както се вижда на снимките на лента и на професионална печатна платка (OSHPark)- изпращам/получавам данни от DHT11, от LDR и от PIR, всички използвайки Ограничението при използването на attiny85 като приемник е представянето на данните в крещящ стил. Тъй като паметта е ограничена: Текстове като „Температура, Влажност, ниво на светлината, приближаване на обекта“ще запълнят ценното пространство в паметта доста бързо. Независимо от това, няма причина да използвате два Arduino само за изпращане/получаване на температура и влажност. Допълнително е възможно. за да накарате предавателя да заспи и само да се събужда, за да изпраща данни, да речем на всеки 10 минути и по този начин да ги захранва от клетка с бутон. Очевидно е, че могат да се изпращат не само данни за температурата или влажността, но може да има масив от малки предаватели, изпращащи показания за влажност на почвата, или добавете анемометър или дъждомер

Стъпка 5: Мини метеорологична станция: Антената

Мини метеорологична станция: Антената
Мини метеорологична станция: Антената

Антената е важна част от всяка 433Mhz настройка. Експериментирах със стандартната 17,2 см антена с „пръчка“и имах къс флирт с антена с бобина. Това, което изглеждаше най -добре, е антена с намотка, която е лесна за изработка. Дизайнът е от Бен Шулер и очевидно е публикуван в списание „Elektor“. PDF файл с описанието на тази „Въздушно охладена 433 MHz антена“е лесен за следване. (Връзката изчезна, проверете тук)

Стъпка 6: Добавяне на BMP180

Добавяне на BMP180
Добавяне на BMP180

Искате ли да добавите сензор за барометрично налягане като BMP180? проверете другите ми инструкции за това.

Препоръчано: