Оглавление:

Мини-метеостанция с Attiny85: 6 шагов (с изображениями)
Мини-метеостанция с Attiny85: 6 шагов (с изображениями)

Видео: Мини-метеостанция с Attiny85: 6 шагов (с изображениями)

Видео: Мини-метеостанция с Attiny85: 6 шагов (с изображениями)
Видео: Метеостанция на esp8266 своими руками (часть 1) 2024, Июль
Anonim
Мини-метеостанция с Attiny85
Мини-метеостанция с Attiny85
Мини-метеостанция с Attiny85
Мини-метеостанция с Attiny85
Мини-метеостанция с Attiny85
Мини-метеостанция с Attiny85

В недавнем инструктивном сообщении Indigod0g описал мини-метеостанцию, которая работает довольно хорошо, используя два Arduinos. Возможно, не все хотят пожертвовать двумя Arduinos, чтобы получить показания влажности и температуры, и я заметил, что аналогичную функцию можно выполнять с двумя Attiny85. Думаю, говорить легко, так что мне лучше положить деньги туда, где я говорю.

Фактически, если я объединю две предыдущие инструкции, я написал:

2-проводный ЖК-интерфейс для Arduino или Attiny и получение и отправка данных между Attiny85 (Arduino IDE 1.06), тогда большая часть работы уже сделана. Только нужно немного адаптировать софт.

Я выбрал двухпроводное ЖК-решение со сдвиговым регистром, а не I2C LCD, потому что на Attiny сдвиговый регистр проще реализовать, чем на шине I2C. Однако … если вы, например, хотите прочитать датчик давления BMP180 или BMP085, вам в любом случае понадобится I2C для этого, так что вы также можете использовать ЖК-дисплей I2C. TinyWireM - хорошая библиотека для I2C на Attiny (но для этого требуется дополнительное место).

Спецификация передатчика: модуль передатчика DHT11 Attiny85 10 кОм 433 МГц

Приемник Attiny85 10k резистор 433 МГц модуль приемника

Дисплей 74ЛС164 сдвиговый регистр 1Н4148 диод 2х1к резистор 1х1к переменный резистор ЖК-дисплей 2х16

Шаг 1. Мини-метеостанция с Attiny85: передатчик

Мини-метеостанция с Attiny85: передатчик
Мини-метеостанция с Attiny85: передатчик
Мини-метеостанция с Attiny85: передатчик
Мини-метеостанция с Attiny85: передатчик
Мини-метеостанция с Attiny85: передатчик
Мини-метеостанция с Attiny85: передатчик
Мини-метеостанция с Attiny85: передатчик
Мини-метеостанция с Attiny85: передатчик

Передатчик представляет собой очень простую конфигурацию Attiny85 с подтягивающим резистором на линии сброса. Модуль передатчика подключается к цифровому выводу 0, а вывод данных DHT11 подключается к цифровому выводу 4. Подключите провод длиной 17,2 см в качестве антенны. (Для получения более качественной антенны см. шаг 5). Программное обеспечение выглядит следующим образом:

// будет работать на Attiny // RF433 = вывод 5 D0

// DHT11 = вывод 3 D4 // библиотеки #include // От Роба Тиллаарта #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // контакт, к которому подключен ваш передатчик // переменные float h = 0; float t = 0; int transfer_t = 0; интервал передачи_h = 0; интервал передачи_данные = 0; void setup () {pinMode (1, ВХОД); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. влажность; t = DHT11. температура; // Я знаю, здесь я использую 3 целочисленные переменные, // где я мог бы использовать 1 // но это просто для того, чтобы легче было следовать transfer_h = 100 * (int) h; transfer_t = (int) t; передача_данных = передача_ч + передача_т; man.transmit (данные_передачи); задержка (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 от Роба Тиллаарта. Эта библиотека также подходит для DHT22. Я использую версию 1.08. Однако у Attiny85 могут возникнуть проблемы с чтением DHT22 с более ранними версиями библиотеки. Мне было подтверждено, что 1.08 и 1.14, хотя и работают на обычном Arduino, имеют проблемы с чтением DHT22 на Attiny85. Если вы хотите использовать DHT22 на Attiny85, используйте версию этой библиотеки 1.20. Все дело в сроках. Версия библиотеки 1.20 имеет более быстрое чтение. (Спасибо за этот пользовательский опыт, Джероен)

Шаг 2: мини-метеостанция с Attiny85: приемник

Мини-метеостанция с Attiny85: приемник
Мини-метеостанция с Attiny85: приемник

Опять же, Attiny85 используется в базовой конфигурации с выводом сброса, подтянутым высоко с помощью резистора 10 кОм. Модуль приемника подключается к цифровому выводу 1 (вывод 6 на микросхеме). ЖК-дисплей подключается к цифровым контактам 0 и 2. Подключите провод длиной 17,2 см в качестве антенны. Код выглядит следующим образом:

#включают

# включить 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 () {если (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("Влажно:"); lcd.print (м / 100); lcd.setCursor (0, 1); lcd.print («Температура»); lcd.print (м% 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 МГц, у меня не было никаких проблем (в другом проекте) с ее использованием на 8 МГц. В любом случае, я просто не беспокоился здесь и использовал сдвиговый регистр.

Шаг 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's Ограничение на использование attiny85 в качестве приемника - это представление данных в ярком стиле. Поскольку память ограничена: такие тексты, как «Температура, влажность, уровень освещенности, приближение объекта», довольно быстро заполнят ценное пространство памяти. Тем не менее, нет причин использовать два Arduino только для отправки / получения температуры и влажности. Кроме того, это возможно. чтобы передатчик переходил в спящий режим и просыпался только для того, чтобы отправлять данные, скажем, каждые 10 минут и, таким образом, передавать их из кнопочной ячейки. Очевидно, что можно отправлять не только данные о температуре или влажности, но и можно иметь массив небольших передатчиков, отправляющих также показания влажности почвы, или добавьте анемометр или измеритель дождя

Шаг 5: Мини-метеостанция: антенна

Мини-метеостанция: антенна
Мини-метеостанция: антенна

Антенна - важная часть любой установки на 433 МГц. Я экспериментировал со стандартной стержневой антенной диаметром 17,2 см и немного поиграл с катушечной антенной. Лучше всего подойдет антенна с катушечной нагрузкой, которую легко сделать. Дизайн принадлежит Бену Шулеру и, по всей видимости, был опубликован в журнале «Elektor». PDF-файл с описанием «Антенны 433 МГц с воздушным охлаждением» легко найти. (Ссылка исчезла, проверьте здесь)

Шаг 6: Добавление BMP180

Добавление BMP180
Добавление BMP180

Хотите добавить датчик атмосферного давления, такой как BMP180? проверьте мои другие инструкции по этому поводу.

Рекомендуемые: