Оглавление:
- Шаг 1. Мини-метеостанция с Attiny85: передатчик
- Шаг 2: мини-метеостанция с Attiny85: приемник
- Шаг 3. Мини-метеостанция с Attiny85 / 45: дисплей
- Шаг 4: Мини-метеостанция с Attiny85 / 45: возможности / выводы
- Шаг 5: Мини-метеостанция: антенна
- Шаг 6: Добавление BMP180
Видео: Мини-метеостанция с Attiny85: 6 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
В недавнем инструктивном сообщении 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 с подтягивающим резистором на линии сброса. Модуль передатчика подключается к цифровому выводу 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 используется в базовой конфигурации с выводом сброса, подтянутым высоко с помощью резистора 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: дисплей
Что касается дисплея, лучше всего обратиться к моей инструкции по двухпроводному дисплею. Короче говоря, обычный дисплей 16x2 использует регистр сдвига, поэтому он может работать с двумя цифровыми выводами. Конечно, если вы предпочитаете использовать дисплей с поддержкой I2C, то есть возможно, но тогда вам нужно реализовать протокол I2C на Attiny. Это может сделать протокол Tinywire. Хотя некоторые источники говорят, что это предполагает тактовую частоту 1 МГц, у меня не было никаких проблем (в другом проекте) с ее использованием на 8 МГц. В любом случае, я просто не беспокоился здесь и использовал сдвиговый регистр.
Шаг 4: Мини-метеостанция с 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? проверьте мои другие инструкции по этому поводу.
Рекомендуемые:
Обновленный мини-динамик: 7 шагов (с изображениями)
Обновленный мини-динамик: Привет, ребята, это снова Матиас, и сегодня мы делаем переработанный мини-динамик. Громкость на нем не будет очень высокой, потому что у него нет усилителя, но вы все равно можете регулировать громкость с помощью телефона или компьютера. Повеселись
Блок питания для мини-скамейки - винтажный стиль: 6 шагов (с изображениями)
Настольный мини-блок питания - винтажный стиль: у меня было слишком много запросов по поводу моего мини-блока питания, поэтому я сделал для него инструкции. Я занимаюсь созданием нового двухканального источника питания, но из-за продолжающейся пандемии доставка идет медленно, а предметы продолжают исчезать. Тем временем я решил построить
ATtiny85 Носимые часы с отслеживанием активности с вибрацией и программирование ATtiny85 с Arduino Uno: 4 шага (с изображениями)
ATtiny85 Носимые часы с отслеживанием активности с вибрацией и программирование ATtiny85 с Arduino Uno: как сделать носимые часы с отслеживанием активности? Это носимый гаджет, который вибрирует при обнаружении застоя. Вы проводите большую часть времени за компьютером, как я? Вы сидите часами, не осознавая этого? Тогда это устройство ф
Портативный мини-монитор своими руками: 5 шагов (с изображениями)
Портативный мини-монитор DIY: в этом проекте я покажу вам, как я использовал ЖК-комплект 1280x800 для создания портативного мини-монитора с батарейным питанием, который будет полезен для вашей цифровой зеркальной камеры, вашего Raspberry Pi или для расширения поля обзора вашего компьютера. Давайте начнем
Как сделать мини-станок с ЧПУ: 11 шагов (с изображениями)
Как сделать мини-станок с ЧПУ: Привет всем, надеюсь, у вас все хорошо. Я здесь с еще одним очень крутым проектом, который вы можете построить, используя какие-то лом или бывшие в употреблении части компьютера. В этой инструкции я покажу вам, как можно сделать мини-станок с ЧПУ в домашних условиях из старого DVD Wri