Am2302 arduino подключение

Rus59Wolf ›
Блог ›
Гигрометр на ардуино, dht22 и nokia5110 lcd.

Или два дня жестоких тупняков и извращений.
Эта запись скорее для меня самого, однако вполне возможно что кому нибудь она тоже пригодится. Прошу отнестись к ней скорее как к записи в блокноте для самого автора нежели как к законченной статье, однако вполне возможно что немного годноты здесь всеже будет.

Однажды меня попросили гигрометр. У человека, очень для меня близкого смею заметить, есть проблемы, связанные с сухостью воздуха.Человеку был задарен увлажнитель воздуха однако гигрометра там не было а померить хотелось чего-же там за воздух то в обычной квартире в обычном панельном доме. Собственно мжно было просто купить прибор и не мучатся, но наши руки не для скуки. Обычный психрометр меня крайне не устраивал ибо пользую такой на работе и меряет он явно фигню всякую. Плюс за ним следить надо постоянно и обслуживать не забывать. Можно купить готовый электронный дешевый китайский но там как повезет. С другой стороны в заначке вполне нормально лежат и пылятся без дела несколько мелких ништячков, вполне достаточных для сборки. Это и привело к решению прибор не покупать а собрать.

Нужно понимать что у меня все было кроме датчика. Просто лежало и пылилось. Даже антистатические пакеты были не вскрыты. Следовательно стоимость готового прибора лично для меня приравнивалась к стоимости датчика. Прецезионный конечно хотелось но земноводное не спало и поэтому рассматривались только китайские dht11 и dht22. 22й стоит дороже но и диапазон измерения шире. В китае по нынешнему курсу можно нарыть такой рублей за 200. Но ждать от месяца и до бесконечности. Вполне нормальный вариант, но надо было срочно поэтому искал в этой стране. Как ни странно но самый дешевый магазинный оказался именно в перми причем в шаговой доступности от места сборки. 400р это всяко не 900 как в чип и дипе плюс можно купить по дороге за хлебушком а не ждать неделю почту россии. Так я и поступил. Интернет магазин весьма сомнительного дизайна выдал мне номер и адрес. Звонок, договоренность и через крайне малое время я стою на пороге обычной квартиры и меняю кровные 4ре бумажки на датчик в антистат пакет у обычного такого молодого человека. Забавное немного ощущение если честно. Этакий магазин на диване. Ну и за хлебом заодно сходил, куда уж без этого.

Полный размермикрорекламка)

Дальше я буду рассказывать про сборку но говорю сразу — если кто то будет также собирать прибор по этому описанию, то пусть сначала прочитает до конца потому что я рассказываю историю по порядку а не составляю оптимальный гад по сборке.

Полный размеркомплектуха

Теперь немного о том, из чего все собиралось.
New design Pro Mini atmega328 5V 16M — мозг
FT232RL USB to Serial adapter module USB TO RS232 Max232 for Arduino download — у мозга нет юсб и нужен usb-uart преобразователь для заливки прошивки.
Датчик dht22
LCD Module White backlight adapter PCB for Nokia 5110 Arduino — дисплей он и в африке дисплей. Нравятся они мне — эти старые дисплеи.
DC-DC USB 0.9V-5V to 5V dc Boost Step-up Power Supply Module — стабилизатор по сути. Задача батареечные 3.7 (4.1) поднять до стабильных 5в
5V Micro USB 1A 18650 Lithium Battery Charging Board Charger Module — заряжалка лития
батарейкодержатель формата 18650 и аккумулятор. В виде соединителей немного кроссировки (связисты поймут) и старый IDE шлейф, очень уж удобно его резать и цеплять модули. Получается на модуль один аккуратный шлейф вместо множества проводков. Кнопки россыпью с фиксацией и без. Резистор на 10КОм
Все это добро легко гуглится и вопросов обычно не вызывает. Было куплено на ебэе очень давно из рассчета беру два и один на запас мало ли сдохнет. Еще раз говорю что у меня не было только датчика, если покупать это все для такого простого прибора как у меня то земноводное просто взвоет.

Собирал я все это хозяйство прям при будущем владельце. Собирал на трезвую, хотя иногда по старой кодерской привычке очень хотелось полирнуть. Прошу сразу не ругаться, по тексту поймете почему такое желание возникло. Ну и лень матушка прям таки заставила не брать свой бук с установленными дровами и средой. Я же помню что там все просто. Хотя чтото такое внутри посвербывало.

Сборку я начал с плана. Взял таки большую бумажку, ручку и пошел писать. Очень люблю читать Терри Пратчета и там описан маленький народец великих раздолбаев, которые однажды написали на бумажке ПЛН и стали практически непобедимы (серия про Тиффани Болид если что). Согласно плану я должен был припаять к дуинке дисплей, датчик, оттестить прогу и запаять линию питания. Очень часто встречал упоминание о нелюбви нокиевских дислеев к питанию 5в. Вот вроде как 3,3 им надо и хоть убейся. Однако китайцы вроде как 5 переносят спокойно. Надо сказать что свой я на 5 паял ранее и проблем не было но тут решил собрать делитель напряжения. От скуки неиначе. Еще надо было распаять сопротивление на датчик. Сопротивляшки у меня были, делитель подобрал быстро, немного задумался о компоновке но коробочки у меня не было и решил все повесить на шлейфы. Резисторы решил напаивать прямо на элементы дабы не плодить сущности. На дуинку при таком раскладе просто распаивались шлейфы.

Полный размерпосчитал делитель.

Ровно через 10 минут у мну был распаян датчик, повешен на шлейф и припаян к дуинке, которая в свою очередь подцеплена к компу через адаптер, а я уже довольно потирал лапки распаковывая среду разработки и качая дрова. Среда поставилась, библиотечка по работе с датчиком легла куда надо, тестовый пример нормально скомпилировался. При чем именно скомпилировался потому что на мк я его не заливал. Дальше начался какойто адЪ. Дрова я взял свежие, подложил в систему и чегото начало происходить. Система вин 7 х64 проф сп1(просто для справки. обычно я работаю с хр). Для тех кто не знает или уже забыл эта самая ттл (адаптер usb-uart) определяется в системе, хавает свои дрова и определяется как два виртуальных устройства — конвертер и усб порт который потом превращается в виртуальный com порт.

Дрова загуглил легко и качнул отсюда www.ftdichip.com/Drivers/VCP.htm версию 2.12.16. Устройство весело дровишки подкинуло и бук почемуто моргнул дисплеем и перезагрузился. Я почувствовал приближение пушного зверька ибо бук не мой но вроде все загрузилось. Однако устройство работать отказалось — вторая половина дров не стала, контроллер появился а ком порта не было, зато было некое неивестное устройство, на которое дрова не получалось поставить от слова совсем. Печаль. Потыркался со сносом и преустановкой, поподсовывал другие версии. Печалька начала превращаться в жопку. Масло в огонь подливала хозяйка бука, которой ессно не нравились все эти процессы на ее родном зверьке. Промаявшись так два часа мы утопали на кино. Как раз хотели сходить на зверополис — крайне неплохой мультфильм, лично мне понравился весьма он) Во всей этой катавасии меня устойчиво непокидало ощущение беспомощности. Как бы фиг с ним с буком, ничего ему не будет. Да и с хозяйкой как нибудь договоримся. Но прибор то я не соберу получается да еще словил какуюто фигню с которой не понимаю что делать. Как то некруто это все.

они такие разные но всетаки они вместе

Следующая стадия этого балета наступила вечером. Я в принципе понимал все так — либо семерке на буке не нравится этот девайс вообще и его дрова в частности, либо девайс мне достался конченый ибо свои более ранние поделки я шил другим девайсом который кудато благополучно замылил и поэтому взял новый. Либо был третий вариант. К этому моменту я уже узнал про интересную штуку — оказывается производителя этих адаптеров порядком подзадрали китайские плагиатчики и этот самый производитель решил подгадить всем. В дровах версии 2.10 была программная закладка, которая проверяла чип адаптера на подлинность и всем неверным делала атата путем записи в энергонезависимую память чипа бяки изменяющей pid устройства. Короче дрова убивали пиратские копии чипа, перепрошивая им мозг, после чего девайс не определялся и не работал с родными дровами. Падлы. Странность была в том что моя проблема под симптомы не подходила — у меня пид был нормальным, дрова ставились но ком порт не определялся.

Погрустив немного я загуглил лечение от этой беды и попробовал таки ее вылечить. Лечил по этой инструкции тыц, подтверждаю что инструкция работоспособная для вин 7 х64. Естественно я дрова не патчил ибо у меня все работало. Прошивка от идеальной отличалась только не тем выбранным элементом в списке usb vid\pid. Привел в соответствие с картинкой и о чудо — в диспетчере устройств стало возможно поставить дрова на usb-port, что в свою очередь превратило его в нормальный com-порт. На будущее для всех — просто ставьте дрова до версии 2.10, например 2.8.14, которые мозг не любят и девайс не убивают. Алилуйа, у меня появилась возможность прошивки мк, но чет времени было уже поздновато.

На всякий случай вечером выкроил 5 минут и залил тестовый скетч для работы с датчиком. Все залилось, датчик завелся и начал отдавать циферки в монитор последовательного порта. С чувством оооочень глубокого морального удовлетворения отложил все на завтра и приступил к лечению нервов излюбленным русским способом. Для страждущих — , пользуйтесь на здоровье. з.ы. по поводу терминологии. В среде ардуинщиков программа написанная в среде разработки для заливки этой самой средой называется скетчем. Лично я считаю что это просто безобидный фетиш ибо это както отделяет программистов пишущих программу, индусов лячкающих говнокод от ардуинщиков творящих скетчи. Разница какбы есть но какбы несущественна. Но раз терминология уже сложилась то и не будем выеживаться — сказано скетч, пусть будет скетч. Еще я надеюсь что установка студии и заливка в нее сторонних библиотек проблем не вызывает, ну да на всякий случай

Полный размермэджик пипл

Полный размервуду пипл

Раннее воскресное утро ясно показало мне что я не успеваю. По идее паялово, суть все паяльные работы, должно было закончится еще вчера. Так же вчера должны были протестироваться все модули по отдельности, ну и учитывая «мегасложность» по сути сам гигрометр уже должен был работать. На сегодня по плану было отладить скетч на предмет ништячков всегда беру в запас пару дней просто вылизать прогу на всякие мелочи), обеспечить питание этому всему путем припаивания двух проводков от спаянного модуля заряда+бат отсека+стабилизатора, собрать все в корпус и торжественно вручить перевязав цветной лентой и положив на подушку словно кот, демонстрирующий усекновенную им мышь. Однако память услужливо подкинула воспоминания о дровишках и цейнтнот стал полным ибо надо было еще цеплять дисплей и продолжать тыкать горячим советским паяльником.

Дальнейшее напоминает хроники пикирующего кукурузнега. Быстренько спаял делитель прям на плате дисплея и подвесил на шлейфе к дуинке. Закинул любимую библиотеку, запустил тест — не работает. еж твою медь. поискал еще либ, запустил не работает. повторил несколько раз. сцуко делитель по любому. выпаял мегзгие два резистора, подпаял шлейф. не габотает. гррррррррр. жопиус со временем начал превращаться в нечто колоссальное. Где то к этому моменту я вспомнил что этот дисплей я уже ставил и с ним были проблемы. Снял с него фиксатор, почистил резиновую фигню которая отделяет дорожки на стекле дисплея от дорожек на печ плате, пустил скупую слезу по настоящему нокловскому дисплею где все намного продуманней и этой резинки как на китайских калькуляторах нет. Придавил все пальцем и пустил тест. Очень я вам скажу красивый тест у библиотеки Adafruit_PCD8544. Только где брал забыл. Далее не выключая питания аккуратно одеваем фиксатор прижимая дисплей меняя пальцы одеваем на место одеваем до щелчка фуууух. Фиксатор на месте и все работает. Сброс по питанию, все хорошо. Если шевельнуть неудачно то фиксатор может понадобится одевать повторно. Короче дисплей завелся, но крови подпортил. Сломается достану из закромов от нокии 3310 фирменный с медными ножками, тому то точно ничего не будет. По подключению дисплея можно почитать и

Дальше я начал лепить из двух примеров один но чего то мне лень стало. Уже очень давно гдето видел фразу — чего на ардуино не делай а все равно метеостанция получится. Датчик у меня распространенный, дисплей тоже, значит уже цепляли и я таки нашел свою конфигурацию. Собственно статья и годное видео в ней которое я смотрел без звука. Единственная проблема была в том что у автора был dht11 а у меня 22. Берем код из теста, немного адаптируем и все работает. Аккурат успел припаять питание и тестили мы уже все это вместе. После всего этого с питанием проблем не было от слова совсем. Единственно от степ-апа отпилил усб гнездо чтобы меньше места занимало. По хорошему надо бы поменять гнездо микро-усб на мини но у меня разъема в закромах не оказалось.

Полный размервыкинул за окно и оставил в покое минут на 10

Полный размердисплей подмерз и начал плыть. при комнатной все хорошо

Естественно я не успел сделать то что хотел. Например код адаптирован не до конца — показывает только целые значения температуры и влажности, без десятых и сотых. Кроме того dht11 не показывает отрицательную температуру а мой dht22 может показать до -40, что несомненно будет криво отображено на дисплее. Также имеет смысл собрать вольтметр для контроля и индикации заряда аккумулятора, благо вроде как собрать вольтметр на дуине не слишком сложно. Ну и сложить все это в коробочку тоже крайне надо. А там наверное можно перепаять шлейфы для красоты и добавить часы и пук для управления ими и дисплей поменять на e-ink и заняться энергопотреблением. Хотя наверное это уже перебор)))

з.ы. пук это преобразователь угол-код, еще этот прибор называют энкодер. Как по мне идеально для подстройки часов. Встречается в магнитолах — крутилка без ограничений и есть возможность нажатия. Еще встречается в мышах, но магнитольные круче.

з.з.ы. всем всего доброго, а тем кто это осилил приношу свои извинения.

Схема подключения

Подключите датчик влажности к аналоговому пину A0 на Arduino. Какая именно нога датчика подключена к пину A0 неважно.

Питание мы обеспечиваем с платы Arduino, с выхода 5 вольт. К этому пину датчик подключается второй ногой через резистор 10 кОм.

Второй выход с датчика мы подключаем к земле — выход GND на плате.

По сути этого уже достаточно для работы датчика влажности. Но хотелось бы как то это все оживить. Для этого используем светодиоды, которые позволят нам визуально отслеживать уровень влажности.

Для их подключения использованы пины 13 (красный), 12 (зеленый) и 11 (голубой). Именно эти пины забиты в скетче, предложенном ниже. Естественно, вы можете использовать другие пины.

Анод красного светодиода (длинная нога) подключен к 13 пину. Резистор на 220 Ом подключается между катодом (короткая нога) светодиода и землей (выход GND).

Анод зеленого светодиода (длинная нога) подключен к 12 пину. Резистор на 220 Ом подключается между катодом (короткая нога) светодиода и землей (выход GND).

Анод голубого светодиода (длинная нога) подключен к 11 пину. Резистор на 220 Ом подключается между катодом (короткая нога) светодиода и землей (выход GND).

Все. Теперь можем переходить к программированию Arduino.

Скетч для Arduino

Алгоритм программы несложный. Мы считываем значение с пина A0 и определяем, находится ли это значение в определенном ранее диапазоне (0 — 400 = сухо, 400 — 700 влажно и 700 + = повышенная влажность).

Кроме того, мы включаем соответствующий светодиод.

В программе также реализована передача сигнала по серийному протоколу.

В самом коде сложностей не должно возникнуть. Если вам что-то не до конца понятно, можете обратиться к статье, в которой рассмотрены основы работы с Arduino на примере мигающего светодиода.

Видео, приведенное выше, возможно, станет дополнительной мотивацией для реализации этого небольшого, но интересного проекта.

/*

Уровень влажности почвы

*/

void setup()

{

pinMode(13, OUTPUT);

pinMode(12, OUTPUT);

pinMode(11, OUTPUT);

Serial.begin(9600);

digitalWrite(11, HIGH);

digitalWrite(12, HIGH);

digitalWrite(13, HIGH);

delay(1000);

digitalWrite(11, LOW);

digitalWrite(12, LOW);

digitalWrite(13, LOW);

}

void loop()

{

int sensorValue = analogRead(A0);

String sensorType = «DRY»;

Serial.println(sensorValue);

Датчики температуры и влажности чрезвычайно полезны при построении систем контроля климата. В данном случае мы просто подключим данный датчик к плате Arduino UNO, и понаблюдаем за значениями.

Вместо DHT-22 можно взять DHT-11, но у используемого в данном случае датчика шире диапазон измерения температуры (от -40°C до +80°C) и влажности (от 0 до 100%). Также он имеет цифровой выход (Single-bus), что увеличивает точность считывания.

Распиновка датчика DHT22:

Схема подключения датчика DHT22 и вентилятора к Arduino:

Скетч

Для работы скетча понадобится установить библиотеку DHT, распаковать в папку library.

#include «DHT.h» #define DHTPIN 2 // вывод, к которому подключается датчик #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(250); // считывание температуры или влажности занимает примерно 250 мс! // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик) float h = dht.readHumidity(); // Считывание температуры в цельсиях float t = dht.readTemperature(); // проверяем, были ли ошибки при считывании и, если были, начинаем заново if (isnan(h) || isnan(t)) { Serial.println(«Failed to read from DHT sensor!»); return; } //выводим информацию в Монитор последовательного порта Serial.print(«Humidity: «); Serial.print(h); Serial.print(» %\t»); Serial.print(«Temperature: «); Serial.print(t); Serial.println(» *C «); }

DHT-22 (также называемый AM2302) представляет собой датчик влажности и температуры с цифровым выходом, для измерения используется емкостной датчик влажности и термистор, все показания передаются по цифровой информационной шине.

Подключение датчика DHT22 к Arduino

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Провод DuPont x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Датчика температуры и влажности DHT22 x 1 шт.
► Резистор 10 кОм x 1 шт.
► Макетная плата MB-102 (Breadboard) x 1 шт.

Подключение:
В примере все подключение буду осуществлять через макетную плату и провода DuPont, собираем все по схеме

Как ведите схема не сложная, информация будет отображаться в «Мониторинге порта». Далее для работы скетча необходима дополнительные библиотеки DHT.h и Adafruit_Sensor.h, скачиваем и установить их, а то программа выдаст ошибку. Запускаем среду разработки IDE Arduino и смотрим что получилось.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 /* Тестировалось на Arduino IDE 1.8 Дата тестирования 27.12.2016г. */ #include «DHT.h» // Подключаем библиотеку DHT #define DHTPIN 2 // Пин к которому подключен датчик #define DHTTYPE DHT22 // Используемый датчик DHT 22 (AM2302), AM2321 DHT dht(DHTPIN, DHTTYPE); // Инициализируем датчик void setup() { Serial.begin(9600); // Задаем скорость передачи данных Serial.println(«DHT22 TEST!»); // Выводим текст dht.begin(); } void loop() { delay(2000); // Задежка в 2 с float h = dht.readHumidity(); // Считывание влажности в процентах float t = dht.readTemperature(); // Считывание температуры в градусах цельсия if (isnan(h) || isnan(t)) // Проверяем, получилось считать данные { Serial.println(«Read error DHT22»); // Выводим текст return; } float hic = dht.computeHeatIndex(t, h, false);// Расчет типла по целсию Serial.print(«Humidity: «); // Выводим текст Serial.print(h); // Отображаем влажность Serial.print(» %\t»); // Выводим текст Serial.print(«Temperature: «); // Выводим текст Serial.print(t); // Отображаем температуру Serial.println(» *C «); // Выводим текст }

Вот и все, позже напишу статью о датчике DHT11 и расскажу о передачи данных через NRF24L01+

Ссылки
Скачать библиотеку DHT
Скачать библиотеку Adafruit_Sensor
Документация к AM2302
Документация к DHT22

Купить на Aliexpress
Контроллер Arduino UNO R3
Комплект проводов DuPont, 2,54 мм, 20 см
Датчик температуры и влажности DHT22
Модуль температуры и влажности DHT22

Купить в Самаре и области
Купить контроллер Arduino UNO R3
Купить провода DuPont, 2,54 мм, 20 см
Купить датчик температуры и влажности DHT22
Купить модуль температуры и влажности DHT22

Термометр на ATtiny2313 и DS18B20 (ATtiny2313, С)

В Интернете есть куча схем термометров на AVR, но как всегда хочется чего-то своего.. Да и мозги размять тоже следует. Этот термометр был одним из первых моих проектов.

Чего хотелось:

  • минимальные размеры (в разумных пределах)
  • минимальная стоимость
  • простота конструкции
  • высокая повторяемость
  • универсальность (об этом чуть позже)

Что получилось:

Посмотрев подобные конструкции и покурив описалово на тиньку, которая оказалась под рукой (ATtiny2313), пришёл к выводу, что можно несколько упростить существующие конструкции и немного улучшить их характеристики.

Схема.

На схеме показан второй вариант включения термодатчика, если он не захотеть работать по однопроводной шине (что встречается очень редко). Обратите внимание, что подтягивающий резистор на 11 выводе должен быть именно 4,7кОм. Уменьшение или увеличение может привести к нестабильной работе датчика в случае включения по однопроводной схеме.

Как видим эта схема отличается от подобных отсутствием транзисторов на управление сегментов. Таким образом схема упростилась на 4 транзистора и 4 резистора, по сравнению с аналогичными схемами. Тут некоторые скажут: «так нельзя — большая нагрузка на порты!!!». Читаемdatasheet на сей контроллер «DC Current per I/O Pin — 40.0 mA». У нас 8 сегментов в каждом символе, по 5 мА каждый — получается 40мА!!!.

Теперь посмотрим графики из того же описания:

Из графиков видно, что ток может достигать и 60 мА и даже 80 мА на пин. Ну не будем увлекаться — нам 5 мА на сегмент (40мА на символ) хватит с головой! Ограничительные резисторы подобраны для получения тока около 5 мА на сегмент. В моей схеме стоят 470 Ом. Яркость сегментов при этом отличная!!! Так, чё-то я увлёкся теорией.

Практика!!!

Печатную плату рисовал исходя их соображений «как можно меньше, но как можно проще». Поэтому она получилась с несколькими перемычками…

На рисунке есть место под кварц — это для небольшой универсальности — у меня было несколько штук AT90S2313, у которых нет внутреннего генератора. КРЕНка применена в корпусе SOT-89. Защитные стабилитроны BZX79-C5V1 в корпусе DO-35. Конденсаторы в фильтре питания — 10mkF * 16V танталовые (других не нашлось), размера 3528 (SMD-B). Я их обычно не ставлю, а вместо них — 1mkF * 50V размера 1206.Глюков связанных с питанием не замечено.

Ну и далее фотки платы:

пустая плата, изготовленная «лазерным утюгом»

собранная плата: вид со стороны проводников (не хватает стабилизатора)

вид со стороны элементов (не запаян индикатор)

Далее запаиваем индикатор и программируем:

Проект собран по кускам, что-то из готовых проектов из Интернета, что-то дописано мной… Оригинальной идеей стала динамическая индикация. Проблема заключалась в том, что во время общения с датчиком температуры DS18B20 возникали моменты, когда «сканирование» индикации останавливалось. Поэтому обновление индикатора сделано не по прерываниям, а в главном цикле программы, и ещё вставлено кой-где в процедуре общения с датчиком… Плюсом данного способа стала высокая частота обновления, что исключило проблему мерцания.

Чуть не забыл — фьюзы для нормальной работы термометра:

Итак, прошили, включили… Хм… работает!!!

Итак как видим получилось довольно простое (куда уж проще???) устройство, которое по размерам не превышает размер индикатора. Кроме всего ещё и точность высокая: по описанию датчика — «±0.5°C accuracy from –10°C to +85°C». Как показала практика точность гораздо выше — около ±0,1°C. Сверял 10 экземпляров с лабораторным термометром, прошедшим метрологический контроль…

Автор Юрий. Е-mail: hardlock (пёсик) bk Сайт автора.