Главная » Микроконтроллеры
Призовой фонд
на март 2017 г.
1. UNI-T UT-39C
Паяльник
2. Тестер компонентов LCR-T4
Паяльник
3. 100 руб.
От пользователей

Комнатная метеостанция

Представляю еще один проект на основе микроконтроллера AVR Atmega8. На этот раз будем конструировать комнатную метеостанцию. В устройстве применяется два датчика - DHT11 и BMP180. Первый мы будем использовать в качестве измерителя влажности воздуха, а второй в качестве измерителя атмосферного давления, а также, раз уж он имеет более точный термодатчик, то и в качестве термометра для измерения температуры в комнате. В итоге с помощью этой схемы можно отслеживать основные параметры погоды, так сказать. Если добавить датчики скорости и направления воздушных потоков, то данную схему можно будет переквалифицировать в наружнюю метеостанцию. Тем не менее сейчас рассмотрим только комнатный вариант. 

Схема устройства:

Схема комнатной метеостанции на AVR-микроконтроллере

Как можно было судить выше, сердцем схемы является микроконтроллер Atmega8. Данный контроллер можно использовать в любом корпусе - DIP-28 или TQFP-32, не имеет значения, только собственные предпочтения  или особенности изготавливаемой печатной платы. Резистор R3, подтягивающий плюс питания к выводу PC6, предотвращает самопроизвольный перезапуск микроконтроллера в случае каких-либо случайных наводок на схему. Далее в качестве индикатора измеряемых параметров используется жидко кристаллический экран на две строки по шестнадцать символов в каждой - SC1602. Данный ЖК экранчик изготовлен на базе контроллера HD44780, поэтому данную модель можно заменить на другую на этом же контроллере или может быть совместимую с ним. Подсветка в данном варианте схемы на ЖК дисплее организована через выводы "А" и "К" (то есть анод и катод подсветки - дисплей имеет дополнительные выводы для подключения подсветки). Однако, просто подключить питание к этим выводам будет не правильно, нужно подключать 5 вольт через резистор ограничивающий ток, чтобы не сжечь подсветку. По схеме это резистор R1, его номинал составляет 22 Ом, чем больше номинал, тем менее ярко будет подсвечиваться дисплей. Номинал менее 22 Ом не рекомендую использовать, так как может появиться риск вывода из строя подсветки экрана при длительном использовании.

Питается вся схема от простого модуля питания на силовом трансформаторе. Переменное напряжение выпрямляется четырьмя диодами VD1 - VD4 марки 1N4007, пульсации сглаживаются конденсаторами C1 и C2. Номинал конденсатора C2 можно увеличить до 1000 - 4700 мкФ. Четыре выпрямительных диода можно заменить одним диодным мостом. Трансформатор применен марки BV EI 382 1189 - преобразует 220 вольт переменного тока в 9 вольт переменного тока. Мощность трансформатора составляет 4,5 Вт, этого вполне достаточно и еще с запасом. Такой трансформатор можно заменить любым другим силовым трансформатором, подходящим для Вас. Либо данный питающий модуль схемы заменить на импульсный источник напряжения, можно собрать схему обратноходового преобразователя либо применить иже готовый блок питания от телефона, например - все это дело вкусов и потребностей. Выпрямленное напряжение с трансформатора стабилизируется на микросхеме линейного стабилизатора L7805, ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее). Далее 5 вольт стабилизируются другой микросхемой - AMS1117 в исполнении, дающей на выходе 3,3 вольта. Это напряжение используется для питания датчика атмосферного давления BMP180 в соответствии с документацией. Стабилизатор напряжения AMS1117 можно также заменить на исполнение ADJ (AMS1117ADJ) - то есть регулируемый вариант, задать необходимое напряжение при таком выборе необходимо будет при помощи двух резисторов, подключаемых к микросхеме в соответствии с даташитом на нее. Самым экономичным вариантом замены этой микросхемы стабилизатора будет замена ее на стабилитрон на нужное напряжение (параметрический стабилизатор на стабилитроне). Номиналы конденсаторов в обвязках микросхем стабилизаторов напряжения можно варьировать в широких пределах в области взятого порядка.

Как было указано выше, в качестве датчиков были использованы DHT11 и BMP180:

DHT11 используется в схеме только как датчик влажности воздуха, данные датчик передает контроллеру через второй вывод, подтянутый резистором R8, к плюсу питания. Номинал этого резистора можно варьировать до 10 кОм. На фото использованы два резистора по 2,7 кОм, соединенных последовательно. Вывод 3 датчика не используется вовсе, выводы 1 и 4 используются для подключения питания. Датчик DHT11 выбран в соответствии с оптимальным соотношением цена / функционал - для комнатных условий самый лучший вариант, для применения на улице лучше подойдет DHT21 в корпусе более предназначенном для применения на улице. 

Датчик BMP180 используется как термометр и как датчик атмосферного давления. Он выбран для измерения температуры, потому что в отличие от DHT11, он измеряет температуру окружающей среды с точностью до 0,1 градуса. BMP180 требует питания в 3,3 вольта, а микроконтроллер питается от 5 вольт. Именно для питания этого датчика и используется дополнительный стабилизатор VR2 на AMS1117. Также для надежной передачи данных от датчика к контроллеру нужно согласовать уровни I2C протокола передачи, который используется. Для этой цели применена микросхема согласования уровней PCA9517 компании NXP. Резисторы R4 - R7 необходимы для работы I2C интерфейсов микросхем. С их помощью на выводах микросхем образуются сигналы логического нуля и единицы.

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

На картинке выше представлена диаграмма работы I2C интерфейса датчика атмосферного давления BMP180.

Номиналы можно варьировать от 2,2 кОм до 10 кОм. При сборке схемы был использован китайский модуль на базе датчика BMP180. Такой модуль содержит все необходимое для работы с датчиком - стабилизатор напряжения на 3,3 вольта, конденсаторы необходимые в обвязке датчика и стабилизатора, а также pull-up резисторы (подтягивающие к плюсу питания), необходимые для работы по I2C.

Также в схеме предусмотрена кнопка сброса микроконтроллера, подключенная к выводу PC6 - reset, замыкающая этот вывод на землю при необходимости сброса. Все резисторы постоянного сопротивления по схеме используются мощностью 0,25 Вт или можно использовать в варианте SMD типоразмера 1206. Также конденсаторы емкостью 100 нФ можно использовать в SMD типоразмера 0805 или 1206.

Устройство, собранное по традиции на макетной печатной плате для микроконтроллера Atmega8 на фото ниже:

Для программирования микроконтроллера Atmega8 для данного устройства необходимо знать конфигурацию фьюз битов:

Микроконтроллер работает от внутреннего генератора на 8 МГц. Для программирования использовался программатор USBasp перепрошитый в AVR doper (STK500).

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

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
IC1 МК AVR 8-бит
ATmega8
1 Поиск в FivelВ блокнот
IC2 ИС I2C интерфейса
PCA9517
1 Поиск в FivelВ блокнот
IC3 Датчик атмосферного давленияBMP1801 Поиск в FivelВ блокнот
IC4 Датчик температуры
DHT11
1 Поиск в FivelВ блокнот
VR1 Линейный регулятор
L7805AB
1 Поиск в FivelВ блокнот
VR2 Линейный регулятор
AMS1117-3.3
1 Поиск в FivelВ блокнот
VD1-VD4 Выпрямительный диод
1N4007
4 Поиск в FivelВ блокнот
C1, C3-C5, C7, C8 Конденсатор100 нФ6 Поиск в FivelВ блокнот
C2, C6, C9 Электролитический конденсатор220 мкФ3 Поиск в FivelВ блокнот
R1 Резистор
22 Ом
1 Поиск в FivelВ блокнот
R3-R7 Резистор
10 кОм
5 Поиск в FivelВ блокнот
R2 Подстроечный резистор10 кОм1 3296W-1-103LFПоиск в FivelВ блокнот
R8 Резистор
4.7 кОм
1 Поиск в FivelВ блокнот
HG1 LCD-дисплейSC16021 На базе HD44780Поиск в FivelВ блокнот
Tr1 ТрансформаторBV EI 382 11891 220В - 9В ACПоиск в FivelВ блокнот
S1 Тактовая кнопкаTC-A1091 Поиск в FivelВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 2
Я собрал 1 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (103) | Я собрал (0) | Подписаться

0
Nick #
А возможно ли добавить связь с ПК для ведения лога и статистики?
Ответить
0

[Автор]
Gauss #
В принципе флэша хватит, это возможно
Ответить
0
Nick #
Будет модернизация?
Ответить
0

[Автор]
Gauss #
Пока не планируется
Ответить
0
Сергей #
Можно заменить DHT11 на DHT22 (точность повыше да и диапазон измерения)?
Ответить
0

[Автор]
Gauss #
Можно, конечно, если это нужно
Ответить
0
Сергей #
Нужно!
Ответить
0

[Автор]
Gauss #
Пожалуйста.
А вообще сам что-то тут переделывать не планировал (да и нет DHT22 для отладки)
Ответить
0
Юрий #
Повторил эту схему. Возникла проблема - с двумя разными датчиками влажности ДНТ11 показаний нет. Может проблема в прошивке?
Ответить
0

[Автор]
Gauss #
Или дело в руках, косяки на плате ищи
Ответить
0
Юрий #
Спасибо за подсказку - отсутствовал контакт между ногой МК и панелькой. Подогнул - и всё заработало!
Ответить
0

[Автор]
Gauss #
Незачто, очень часто дело в контакте - или его нет или лишний
Ответить
0
Владимир #
Повторил схему. Вопрос такой, можно ли подключить ещё часы на DS3231 с дисплеем 2004А на этот же контроллер?
Ответить
0

[Автор]
Gauss #
Вроде там памяти хватало, можно, но нужно прошивку дорабатывать
Ответить
0
Nick #
Как будет вести себя устройство, если один из датчиков не подключен?
Ответить
0

[Автор]
Gauss #
Не будет показывать данные и все, по идеи постоянно будет или по 0, или 85 показывать (возможно какую-то другую цифру) постоянно
Ответить
0
Дмитрий #
Скажите пожалуйста прошивка рабочая?
pca9517 обязателен или его можно заменить, если возможно так чем именно?
Ответить
0

[Автор]
Gauss #
Естественно рабочая. Самый простой вариант замены - два полевых транзистора.
Ответить
0
Вячеслав #
В чем может быть причина, если выводит значение влажности "I5", даже при отключенном датчике (Dht11)?
Ответить
0

[Автор]
Gauss #
Может быть соединение некачественное - сопли, флюс, грязь на дорожках, проверить правильность соединений, не забыть про фьюзы при прошивке и так далее
Ответить
0
Dima0867 #
Показания температуры после включения показывает нормально, а через 10 мин плавно возрастают на 2 градуса. Блок питания внешний, внутри ничего не греется. Что может быть причиной?
Ответить
0

[Автор]
Gauss #
Все что угодно - некачественные датчики, некачественное изготовление пп, несмытый флюс и т.д.
Ответить
0
shallun #
Датчики нужно убрать подальше от платы походу нагрев деталей влияит
Ответить
0
Сергей #
У меня аналогичная ситуация как у Вячеслава. Выводит значение влажности "I5" при подключенном и отключенном датчике. Собирал я на макетке, прошивал PonyProg, фьюзы по картинке ставил. Может датчик дохлый? У кого такое было, как победил это?
Ответить
0
Сергей #
Разобрался, виноваты фьюзы (были заводские 1МГц)
Выставил 8МГц внутренний и всё заработало, влагу показывает 65% и остальное вроде похоже на правду.
Ответить
0

[Автор]
Gauss #
Как по рекомендациям для Вячеслава...
Поздравляю с удачным запуском!
Ответить
0
Сергей #
И можно не использовать IC2 PCA9517. Для согласования уровней (см по схеме) убираем IC2,R5,R4, между ножками 6 (ic3) и 27 (ic1) ставим сопротивление 100 ом и параллельно R7 ставим диод катодом к 3,3в ,анодом к 6(ic3). Аналогично делаем по шине SCL между 5 ногой(ic3) и 28(ic1). Датчик давления у меня BMP180 4х контактный.
Ответить
0
сергей #
Скажите, после того как убрали IC2 R5 R4 напряжение 3.3вольта подается в точку соединения R6 и R7
Ответить
0
Василий #
Gauss здравствуйте, собираю данное устройство и еще хочу собрать часы по схеме: часы на DS3231 и AVR-микроконтроллере, буду признателен если Вы сможете сделать общую прошивку. Получился бы многофункциональный и полезный прибор. Заранее спасибо.
Ответить
0
Demo65 #
А если туда ещё и кучу приборов измерительных. Вообще цены бы не было! И кондиционер для кайфа.
Ответить
0
Viktor_JL #
Хочу собрать данную схему метеостанции. Буду признателен если кто поделится печатной платой в формате lay6.
Ответить
0
Demo65 #
Печатка кому нужна.
Прикрепленный файл: плата 2.lay6
Ответить
0
Viktor_JL #
Большое спасибо за печатку.
Ответить
0
Сегей #
Спасибо, все работает, использовал китайский модуль GY-68, со стабилизатором напряжения, подтягивающими резисторами, внешний стабилизатор 3,3В не потребовался, как и согласование уровней, уровня для лог.1 достаточно, только пару резисторов по 300 Ом поставил на шину, на всякий случай. Вышло очень просто. Но немного напрягают постоянные скачки десятков Паскалей, ведь это на уровне шумов, было бы замечательно, если предусмотреть усреднение значения, скажем среднее между мин. и макс. за 10 секунд, или просто индикацию в гектаПаскалях. Или добавить часы на это место на дисплее.
Ответить
0
Сегей #
Кстати, может ЖК модули бывают разные, но в моем случае на плате модуля уже стоит резистор 100 Ом для белого светодиода (дисплей голубой, негативный), что дает ток до 20 мА при 5В питании.
Ответить
0
Сергей #
Благодаря хорошим комментариям в программе мне все же удалось чуть-чуть модернизировать программу, строго не судите это мое первое творчество на Си.

В начале файла, рядом с другими, определил глобальную переменную:

int16_t pressurePREV = 0;

, а далее, в основном цикле, перед выводом на дисплей, добавил:

if (pressure2 > pressurePREV)
{
if (pressure2 - pressurePREV < 15)
{
pressure2=pressurePREV;
}
}
if (pressure2 < pressurePREV)
{
if (pressurePREV - pressure2 < 15)
{
pressure2=pressurePREV;
}
}
pressurePREV=pressure2;

Число 10-20. Тогда происходит проверка текущего результата измерения (только тысяч Паскалей) с предыдущим, если разница менее 15, то значение на дисплее не меняется.
Результат получился отличным, показания теперь не скачут, а чувствительность сохранена - разница на столе и под потолком четко регистрируется.
Сравниваю давление с местной метеостанцией уже два дня - точность поразительная, до 1 мм.рт.ст.
Прикрепленный файл: 32.c
Прикрепленный файл: 32.hex
Ответить
0
Сергей #
Как говорится, первый блин комом. Скачков то нет, но и реакция на реальное плавное изменение давления заторможено.

Решил, что нужно сравнивать разницу нового замера не с предыдущим замером, а с текущим значением на дисплее, и приравнивать их при разнице больше +- 9, вроде на моем датчике этого достаточно для защиты от шумов.
Тестирую на практике новый вариант, вроде все получается, как задумал.
Прикрепленный файл: 32.hex
Прикрепленный файл: 32.c
Ответить
0
Mokotoya #
Пока жду датчики, решил помучать исходники в CVAVR и VMLab. Увы, но и там и там выдаёт ошибки =(
с кодвизиона
Error: C:\WinAVR\avr\include\util\delay_basic.h(66): missing '{'
ну а вмлабу не нравится команды "LCD_" и "BCD_", а так же
* 32.c, line 262: undefined reference to `dht11_gethumidity'
ну и примеры ошибок с ЛСД и БСД
* 32.c, line 228: undefined reference to `LCD_Init'
* 32.c, line 250: undefined reference to `BCD_2Lcd'
Кто сталкивался, подскажите новичку. Только не надо протеус советовать - дойду и до него как-нибудь.
Ответить
0
Сергей #
Выше я использовал Atmel Studio 6,0, сперва тоже были ошибки при компиляции, потом установил пакет для русификации и понял, это сообщения о том, что программа не знает куда ведут эти ссылки, просто после создания нового проекта и вставки туда содержимого 32.с, надо еще подключить к проекту все файлы *.c, *.h, находящиеся рядом в архиве. Прилагаю Вам целиком проект для Atmel Studio, я там еще добавил, кроме поста выше, символ градуса на дисплей и гашение не значащего нуля в Паскалях, на мой вкус так лучше выглядит.
Прикрепленный файл: 32.rar
Ответить
0

[Автор]
Gauss #
Со студией у меня не было проблем ни разу. А вот подключать библиотеки нужно всегда, если они используются
Ответить
0
Сергей #
Конечно, просто, по привычке от Протеуса, думал, что программа сама будет искать в текущей папке проекта все ресурсы.

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

Mokotoya, вот проект с исправлением, лучше бы предыдущие файлы удалить отсюда. Там есть и функции для вычисления альтитуды, правда для такого расчета вроде нужно корректировать давление на уровне моря.
Прикрепленный файл: 32.rar
Ответить
0

[Автор]
Gauss #
Как вариант любое решение, дающее результат имеет право на существование, (если все же частое изменение единиц Па напрягает, а строго говоря это абсолютно нормальное явление - передвижение неравномерных воздушных масс это как раз и обуславливает) но проще наверно обновлять чуть реже экран и все, а еще чуть лучше сделать пачку измерений и среднеарифметическое выводить раз в минуту на экран
Ответить
0

[Автор]
Gauss #
Расчет высоты над уровнем моря рассматривается в предыдущей статье про датчик давления
Давление над уровнем моря берется среднестатистическая, поэтому результат всегда ориентировочный (если только не подставлять постоянно реальное текущее значение)
Ответить
0
Сергей #
Спасибо, в этом проекте уже есть функция для альтитуды, просто имел ввиду, что магазинные высотомеры требуют ввода кнопками точного давления Р0 для рассчета. Но это не важно, дома мерить постоянно высоту не нужно.
А насчет Паскалей, это не ветер (показания заметно меняются при изменении высоты от одного метра, однако в кухне реакции на вытяжку не заметно), ведь производитель ясно заявляет параметр low noise в 30 Па RMS (0,25м) в режиме повышенного разрешения, так что это именно случайный шум, абсолютная погрешность измерения заявлена чуть больше +-100 Па.
Так что, так или иначе, сглаживать десятки Паскалей нужно, они все равно ничего не значат, просто для красоты.
Ответить
0

[Автор]
Gauss #
Я имел ввиду, что меняться единицы и десятки не будут только при полном штиле, а обычно в нашем климате то ветер, то тучи, то еще что и это в такой степени может менять значение, так как погода динамична и четко постоянной она не может быть. Ну и погрешность само собой
Ответить
0

[Автор]
Gauss #
Может быть библиотеки не подключены? Или подключены не правильно?
Ответить
0
artem21 #
Кто сделал плату можете скинуть печатку в формате lay!
Ответить
0

[Автор]
Gauss #
Спасибо за разрешение!
Ответить
0
edgi #
Собрал маленькую станцию на esp8266 с двумя датчиками dht22 и bmp180 показания разные. Пробовали ли Вы сравнивать показания с обычным ртутным градусником. Не пойму кто врет или оба они. Знаю что их как то надо корректировать программным методом.
Ответить
0

[Автор]
Gauss #
У барометра коэффициенты внутри, ртутник инерционный
Ответить
0
Сергей #
В датчике давления более точный термометр, но все равно абсолютная погрешность + - 0,5 градуса в середине диапазона. У меня BMP-180 показывает точно, отличия от других приборов, на DS18B20, на полградуса.
Ответить
0
sergang #
Повторил схему, но датчик dht11 мне не понравился по своим характеристикам после использования. Прикупил DHT22 (175р), пришлось изменить прошивку. В архиве исходник опроса dht22, проект для студии, прошика. От датчика DHT22 используется только показания влажности.
Прикрепленный файл: Archive.zip
Ответить
0
Сергей #
А у Вас нет случайно модели DHT-22 для Протеуса?
Сам то пока обхожусь дешевым DHT-11, вроде дома нормально работает, но в покупных часах года через два-три такой датчик стал сильно занижать показания, хотя может это исключение.
Ответить
0
sergang #
У меня Proteus7.2 там нет ни 11 ни DHT 22 .
У меня всю зиму показывал 36-38 (DHT11) .
Ответить
0
Сергей #
DHT11 берите, может пригодится. Файл dll надо скопировать в папку моделей, Протеус перезапустить, и, открывая файлы платы и схемы просто добавить элемент в библиотеку, сначала плату, потом схему, выбрав уже сохраненный корпус.
Прикрепленный файл: DHT11.zip
Ответить
0
johnnych #
Сергей, добрый день.
У вас случайно нет проекта в Proteus-е? Буду очень благодарен, если скините. Бьюсь уже не первые сутки над схемой, показание температуры и давления выводит правильные, а вот показания влажности постоянно I5 (не 15). Танцы с бубном вокруг файла проекта dch11.c не помогли ... Хотелось бы попробовать модель
Ответить
0
sergang #
Скачал библиотеку для DHT22 в протеусе, пользуйтесь.
Прикрепленный файл: Библиотка DHT22 для протеуса.zip
Ответить
0
Сергей #
Спасибо, обе модели работают, просто сам никак не мог настроить под 22 датчик.
А по метеостанции, решил добавить еще стрелочку, вверх и вниз, для обозначения направления изменения давления, получается немного информативнее и красивше.
Ответить
0
sergang #
Согласен , в какую сторону идент изменение давления вожно, тоже хотел такое сделать. У меня станция постоянно выключена и включаю на время. Стрелок изменения давления лучше поставить несколько с добавлением каждый день ,чтобы видеть тенденцию, это как пример.
Ответить
0
Сергей #
Прикручивал наружный термодатчик и задумался, а зачем использовать столь высокую тактовую частоту?! Проверил, внутреннего генератора на 1 МГц для всего вполне достаточно. К тому же в этом случае автоматически происходит калибровка генератора через OSCALL, фьюзы заводские, да и потребляемый ток снизился с 34 до 25 мА, а это экономия почти 0,5 кВТ*ч в год :)
Ответить
0

[Автор]
Gauss #
0,4
Ответить
0
Сергей #
А КПД источника питания?
А серьезно, то после сборки выяснил, что на максимуме подсветка слишком яркая, ночью мешает, так что так и добавил резистор для ограничения тока до подсветки до 5 мА, на глаз разница не большая.
Ответить
0

[Автор]
Gauss #
Можно подстроечник поставить дополнительно и под настроение регулировать подсветку
Ответить
0
Сергей #
Это ясно, но в этом проекте не хотел добавлять никаких регуляторов или кнопок, а то бы памяти и на часы хватило. А в будущем, при использовании LCD дисплея в других устройствах с меню, просто нужно будет выделять лишний вывод для ШИМ регулировки яркости.
Ответить
0

[Автор]
Gauss #
Какие кнопки, резистор переменный регулировать ток подсветки, все
Ответить
0
Сергей #
Ясно, что можно резистор, да сейчас корпус не рассчитывал на торчащие элементы. Резисторы не люблю, если захочется вертелку, то лучше энкодер поставить, это когда нужно и меню, а не просто подсветку крутить.
Ответить
0

[Автор]
Gauss #
Есть еще электронные потенциометры - типа микросхема, управляется мк
Ответить
0
Сергей #
Gauss, вчера нашел ошибку в Ваших исходниках, в функции вычисления альтитуды (и здесь и в выше упоминаемой статье). Ошибка при вычислении отрицательной альтитуды. Решить можно так:

uint8_t alt_minus = 0; // Флаг знака, 0=положительная или нулевая, 1 = отрицательная;

void bmp180CalcAltitude(int32_t pressure){
float temp;
temp = (float) pressure/101325;

temp = pow(temp, 0.19029);
if (temp > 1) alt_minus = 1; else alt_minus = 0; // Флаг знака альтитуды, 1 = минус;

temp = 1 > temp ? 1 - temp : temp - 1;

altitude = 44330*temp*100; // Результат в см;

А при выводе на дисплей добавлять в нужное место знак :

if (alt_minus) LCD_SendStr("-");
Ответить
0

[Автор]
Gauss #
Это не ошибка, я просто не закладывал этого, это скорее дополнение. Просто я бы этого и не проверил и даже не подумал, что это нужно
Ответить
0
Сергей #
Я тоже сперва не замечал, просто использовал для интереса эту функцию, пока память есть свободная, а на днях атмосферное давление было необычайно высоким, смотрю, а вместо высоты получаются закорючки (реальная высота моей местности 125 м). А по ходу проверки в Протеусе можно просто вручную подставлять разное давление, перед вызовом функции рассчета альтитуды. Еще заметил, что чаще всего отличия давления в мм от местной станции на -1мм, похоже это результат отсутствия округления результата вычисления при переводе из Па (так понимаю, что десятые просто отбрасываются). Хотя это мелочь.
Ответить
0

[Автор]
Gauss #
Честно говоря, я уже не сильно помню как именно обрабатывал значения, давновато было.
Погода сейчас переменчивая очень, поэтому расчет высоты с константным значением давления над уровнем моря тоже нестабилен - если только не подставлять постоянно значение текущего давления над уровнем моря
Ответить
0
Сергей #
Проверил точно, по давлению, да, учитываются только целые мм. рт. ст.. Если вычисление дает результат 750,9..., то на дисплей выводится 750. Поэтому, если хочется традиционного округления, чтобы при 0,5-0,9 округлять в большую сторону (пример, до 751 мм), то нужно сделать поправку.
Думаю, что такой косвенный вариант выходит самым экономичным по размеру кода:


// Прибавление 0,5 мм рт ст (66 Па) приводит к округлению результата перевода 0,0-0,4 = 0; 0,5-0,9 = +1;
int pressure3 = (pressure + 66)/133.322; // перевод из Па в мм.рт.ст;
Ответить
0

[Автор]
Gauss #
Скоро приедут BMP280, интересно будет сравнить показания датчиков
Ответить
0
Михаил #
Здравствуйте, выбрал эту схему для курсового проекта в институте. Может есть кто уже собирал эту схему и готов ответить в случае чего на возникшие вопросы? И еще я пытался собрать схему в протеусе, но не нашел там микросхемы bmp180, есть у кого-нибудь собранная модель?
Ответить
0

[Автор]
Gauss #
Этой модели в протеусе нет...
Ответить
0
Сергей #
Моделей датчиков давления нет, но при необходимости проверки работы шины I2C можно использовать встроенный отладчик-анализатор шины или просто осциллограф.
Ответить
0
artem21 #
Кто - нибудь сделал отображение отрицательной температуры? Cкиньте исходники
Ответить
0
Сергей #
В смысле? Этот сенсор давления не предназначен для работы при отрицательной температуре. К слову, сам, после сборки в корпус, выяснил, что мерить комнатную температуру через BMP-180 бесполезно, даже при отсутствии в корпусе стабилизатора и наличии отверстий показания завышаются на 1-2 градуса. Поэтому применил имеющийся датчик температуры DS18B20, воткнув его сбоку в разъем, удобно, при случае можно и датчик с кабелем подключать, для технических замеров. Да и DHT-11 тоже на улице не пригоден, нужен 22.
Если Вам требуется подключить датчик уличной температуры, то можно соединить кабелем или через простые трансиверы NRF24L01, только на днях их испытывал, работают не плохо.
Если заинтересует, то могу дать вариант с DS18B20, с правильным расчетом отрицательных показаний, в том числе и десятых долей градуса, что редкость, сколько проектов для примера не искал, везде отрицательные десятые без коррекции.
Ответить
0
artem21 #
Выложите исходники для ds18b20 c расчетом отрицательной температуры.
Ответить
0
Сергей #
Вот библиотека для одного проводного датчика, с контрольной суммой, без передачи адреса. Подключение к порту PB0, обязателен внешний резистор 4,7к к плюсу. Только частоту поставьте правильную, я использовал везде 1 МГц. Подробный пример в h файле, можно было конечно возвращать и 16 битное значение, но мне так было проще применять в разных проектах. В библиотеке для трансиверов я только добавил перевод справочного файла на русский.
Если нужно подключение через трансиверы, то надо разделить функцию в передатчике на два этапа, запуск преобразования и чтение-передача данных, чтобы МК во время замера спал. Если потребуется помощь, то мой ник на сайте журнала Радио Sergey7.
Прикрепленный файл: NRF24L01+.zip
Прикрепленный файл: DS18B20.rar
Прикрепленный файл: NRF24L01+.zip
Ответить
0
Сергей #
Вложение случайно продублировалось.
PS, при необходимости, в функцию настройки термодатчика, можно добавить команду копирования настроек из ОЗУ в EEPROM
therm_write_byte(THERM_CMD_CPYSCRATCHPAD);
Ответить
0
artem21 #
Можете помочь дополнить программу прописав в ней датчик ds18b20 подключенный к порту PB1 и вывод данных вместо давления в Паскалях. Ссылка на программу ниже.
Прикрепленный файл: Humi_002.zip
Ответить
0
Олег #
Скажите пожалуйста какой программой автор прошивает микроконтроллер?
Ответить
0

[Автор]
Gauss #
avr-doper или аналог stk500
Ответить
0
Сергей #
Это зависит только от того, какой у Вас есть программатор. Сам пользуюсь простейшим самодельным для СОМ порта и программой Pony Prog v 2.08c, более ранние с этим контроллером у меня не работают. А фирменные программаторы работают и через саму Atmel Studio.
Ответить
0

[Автор]
Gauss #
doper тоже работает в студии, но в 6й не поддерживается вроде, там mkii нужен
Ответить
0
Олег #
Какие фюзы выставить в CodeVisionAVR? Если можно скриншот.
Ответить
0
Михаил #
Здравствуйте, подскажите пожалуйста, видел в комментариях видел несколько вариантов по изъятию микросхемы PCA9517. Если кто то собирал устройство без нее, не могли бы вы скинуть принципиальную схему, а то в чип и дипе ждать от 3 до 5 недель, да и цена в 400 - 600 рублей не очень радует.
Ответить
0
Сергей #
Лично проверял, можно резисторы подтяжки просто подключить к +3В, уровня единицы для контроллера достаточно, главное, чтобы прошивка была без ошибок, чтобы порт на выход(1) не включился. Также, разрабатывая радиомодуль, выяснил, что ATMega8-16PU сохраняет работоспособность при снижении напряжения вплоть до 2,5В, проверил на трех экземплярах, главное детектор не включать. Не все знают, но дисплей тоже можно питать пониженным напряжением, но для этого на вход регулировки контрастности надо подавать отрицательное напряжение, что не удобно.
Ну а если хочется по правильному согласовать уровни, вдруг надо еще чего к шине подцепить, то вот схема, слева МК, справа датчик, если изловчиться, то 3В можно взять прямо с платы модуля, если она со стабилизатором, или поставить внешний.
Прикрепленный файл: 1.jpg
Ответить
0
Олег #
Хочу собрать данную схему, но достать микросхему PCA9517 где я живу тяжело, и дорого. Подскажите как запитать вход регулировки контрастности отрицательным напряжение?
Ответить
0
Олег #
Доброго времени суток, подскажите пожалуйста, 10к. резисторы можно заменить 11к.?
Ответить
0

[Автор]
Gauss #
Можно
Ответить
0
Sergeev_RT2 #
Здравствуйте собрал схему, но не получилось купить микросхему pca9517, вместо нее внедрил схему из комментариев выше, прикреплю картинку ниже. Однако с этой схемой ничего не заработало. Данный приходят только с dht11. сам датчик я проверял на arduino, он полностью рабочий, схему прозванивал, даже транзисторы на всякий случай перепаял. Если у кого работало без микросхемы скиньте пожалуйста схему подключения на резисторах. Заранее спасибо!
Прикрепленный файл: 49494_1.jpg
Ответить
0

[Автор]
Gauss #
Схема рабочая, где-то косяк на плате
Ответить
0
Sergeev_RT2 #
Я правильно понимаю, что резисторы R6 и R7 на схеме остаются? А резисторы R5 и R4 меняются номиналами на 3.3 кОм? Я просто пробовал и так и так, но не заработало)
Ответить
0

[Автор]
Gauss #
По аналогии как в этой статье
Ответить
0
Sergey73 #
Можно в данной схеме заменить Atmega8 на 8535?
Ответить
0

[Автор]
Gauss #
нельзя
Ответить
0
wowa7z #
На схеме ошибка, неверно указана разпиновка дисплея.1-й пин не VDD, а VSS(GND земля)... второй соответственно +5V(VDD), спалил 2 дисплея пока понял. Схема заработала, спасибо автору
Ответить
0

[Автор]
Gauss #
Все верно, это дисплеи разные
Ответить
+2
александр #
Спасибо автору, незаменимая вещь для рыбака. Собрал пока на макетке, заработал почти сразу. Но это моя вина, сначала был косяк в подключении экрана (не много отличаются), после косяк в прошивке, ну и это простительно "шью" впервые. Спасибо ещё раз 5+ за схему.
Прикрепленный файл: IMG_20170221_142840.jpg
Прикрепленный файл: IMG_20170221_142850.jpg
Прикрепленный файл: IMG_20170221_142907.jpg
Ответить
0

[Автор]
Gauss #
Приятно читать такие отзывы!
Ответить
0
Андрей #
Я тоже присоединяюсь, спасибо автору! Для дома хотелось бы на 5 светодиодных индикаторах, давление и влажность. Может кто сможет переделать прошивку?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Конструктор для сборки: предусилитель на лампе 6N3 Лазерный модуль 650нм 5мВт
вверх