Термометр на Raspberry pi с беспроводным датчиком на rf 433 и МК...

Термометр на Raspberry pi с беспроводным датчиком на rf 433 и МК attiny85

1122
ПОДЕЛИТЬСЯ

Данная статья обрисовывает мой опыт сотворения беспроводного датчика температуры на базе МК Attiny85 + ds18b20 + rf 433 TX , работающего от батареек. Прием данных и программирование Attiny85 изготовлено на базе Raspberry pi B+.

Предисловие
Выбор пал лишь в силу достаточно широкой документации и множества разных примеров внедрения данного мини-компа. Прошу не критиковать выбор конкретно данной платформы. На Хабре и не лишь есть много любопытно про мини-комп Raspberry Pi. Я решил обзавестись в собственном доме таковой игрушкой.

В итоге можно было зайти на локальную страницу и поглядеть на текущую температуру на улице, в квартире, а так же динамику конфигурации температуры за крайние n дней. Богатство статей по подключению этих датчиков не потребовало много времени, для того что б их присоединить и получить значения температуры. На малине был поднят lighttpd + php + mysql. Данные с датчиков сейчас с некой периодичностью записывались в БД. Под рукою оказалось пару датчиков (ds18b20, ds1822). Пришлось приобрести датчик DHT22, который дозволял фиксировать не лишь температуру, но и влажность. Не владея особенными способностями программера, пришлось издержать пару вольных вечеров. Из статьи «Интернет указатель температуры либо телеметрия пригородного дома» была взята мысль построения графиков в Highcharts. Решено было начать с датчиков температуры.

Показания температуры этих датчиков отличались традиционно на несколько 10-х. Целью не ставилось делать измерения с чрезвычайно большой точностью и такие отличия в показаниях меня полностью устраивали. Некое время за окном висело два датчика DHT22 и ds18b20.

Таковым образом, данные c датчика температуры и давления (DHT22) начал отправлять в эти два сервиса. Все в той же статье было подсмотрены ссылки на проекты openweathermap.com и narodmon.ru.

Народный мониторинг мне приглянулся больше. На карте можно наглядно сопоставить свои показания с данными остальных датчиков в твоем же городке. Есть приложения для телефонов на Android и iOS. Я не сильно сообразил сервис Openweathermap.
Когда на улице минусовая температура, датчики на солнечной стороне могли демонстрировать до +10. При этом датчики не находятся под прямыми солнечными лучами (спрятаны за блок кондюка). И датчики нередко оказываются на солнце. Потому было принято решение осваивать беспроводные технологии. Окна моей квартиры глядят на юг. Тянуть провода через коридор на северную сторону не сильно хотелось. Всё, естественно, замечательно, но трудности как постоянно кроются в деталях.

Постановка задачки
Стоимость приемника + передатчик составляет около 3$. Для приема и передачи был избран RF 433. Снова же, так как являюсь новичком в мире электроники и программирования, решил не растрачивать много средств и бросить собственный выбор на более экономном варианте.

Схема работы: МК — rf 433 (передатчик) -> rf 433 (приемник) — Raspberry pi.

Перевода данной статьи либо чего же-то схожего на Хабре не встречал. Необходимо было выбрать микроконтроллер. Так что раз будет проявлен энтузиазм, можно будет сделать перевод. На Instructables есть хорошая статья о том, как программировать микроконтроллер Attiny85 при помощи raspberry pi.

Была приобретена опытнейшая пара на рынке по стоимости 2-3$ за штуку. Для простоты начать решил с ds18b20. Выбор микроконтроллера был изготовлен.

Метод работы последующий: МК считывает значение температуры с датчика, считывается напряжение (питать будем от батареек), рассчитывается контрольная сумма, отправляются эти данные несколько раз, опосля чего же отправляем всю эту систему в сон на несколько минут, чтоб экономить питание.

rf 433 (приемник) + Raspberry pi слушает эфир в ожидании данных.

Выполнение задачки
Сборка и подключение
На макетной плате собираем схему для программирования МК:

Там же на макетной плате подключаем датчик и передатчик к аттини так, как показано на схеме: Резисторы можно взять незначительно остальные 1-5КОм, какие есть под рукою. Больше чем 4,7 КОм я лично не пробовал. Схема подключения взята с веб-сайта Instructables.

Осталось подключить приемник к rasspbery pi. Моя схема подключения: Таковым образом, мы получили присоединенный МК для программирования при помощи Raspberry Pi и присоединенные датчик и RF433 передатчик.

Raspi RF433 RX
GPIO 27 (13) -> DATA
GND (14) -> GND
5В, Vcc (4) -> Vcc

Пины на схемах подключения к raspberry pi согласно их нумерации в библиотеке WiringPI для работы с GPIO, их физическое размещение на плате в скобках.

И вот так это все смотрится на макетной плате:

С железом разобрались, перейдем к софтовой части.

Устанавливаем нужный софт и программируем Attiny85
В raspi-config включаем SPI. Как устанавливать Raspbian не будем разглядывать.

Сейчас нам нужно скачать и установить AVRDude (AVR Downloader-Uploader) — кросплатформенная вольная консольная программа, предназначенная для прошивки микроконтроллеров компании Atmel серии AVR.

sudo apt-get install bison automake autoconf flex git gcc
sudo apt-get install gcc-avr binutils-avr avr-libc
git clone https://github.com/kcuzner/avrdude
cd avrdude/avrdude
./bootstrap && ./configure && sudo make install
Для работы с GPIO нужно скачать и установить WiringPi:

cd ~
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
Проверяем все ли мы верно сделали:

sudo gpio -g mode 22 out
sudo gpio -g write 22 0
sudo avrdude -p t85 -P /dev/spidev0.0 -c linuxspi -b 10000
sudo gpio -g write 22 1
Раз мы все верно сделали, должны получить вот таковой итог:

На этом шаге предварительные работы закончились.

Пришлось собирать по кускам из разных репозиториев (и не лишь). Отыскать рабочий код на Си, который бы выполнял все поставленные задачки, мне не удалось.

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

То, что у меня вышло выложил на гитхаб. Подходящий нам код находится blinky.c, 1wire.c, 1wire.h, manchester.c, manchester.h.

Осталось все собрать и запрограммировать нашу Аттиньку 85.

Создаем либо копируем Makefile там же, где находятся файлы нашего проекта.

Исполняем:

make
И раз все отлично и не будет никаких ошибок в коде программы, исполняем:

make install
Расслабились и смотрим запись нашей программы на микроконтроллер:

Раз все отлично и ничего нам не воспрепядствовало, на этом шаг программирования нашего МК завершено.

Это мой 1-ый проект и я не сильно напрягался с разводкой на плате. Вот что у меня в итоге вышло: У меня в наличии был корпус для 3-х батареек АА. По схеме выше собираем все на отдельной макетной плате уже без Rasspberry Pi и питание от батареек.

Сейчас пришло время принимать данные температуры с передатчика.

Программа посиживает и ожидает сигнал определенной продолжительности, а поточнее, несколько поочередных сигналов, так именуемый lock. Опосля чего же начинается прием нужного количества бит. Есть отменная статья о расшифровке Х10 RF протокола. Для приемника за базу был взят код из данной статьи, а конкретно X10RFSnifferBit.cpp. Там есть примеры программ для приема сигнала по RF433.

Изменяем под свои значения lock, добавляем проверку контрольной суммы и пишем приобретенные значения в файл. Полученную информацию записываем в файл в виде id датчика, заряда батареек, температуры и контрольной суммы.
Так смотрится мой rf433recieve.cpp, а так смотрится пример файла, в который записываем приобретенные данные.

При подключении к другому пину нужно поменять номер GPIO в строке: В моем случае RF 433 RX подключил к GPIO 2 (13).

wiringPiISR(2, INT_EDGE_BOTH, &handleInterrupt);
Запускать нужно с правами root: Собираем и запускаем нашу программку (Makefile).

make
sudo ./rf433recieve
Сейчас на raspberry pi мы принимаем нашу температуру и записываем в приобретенные данные в файл.

Заключение
Так смотрится итог: Позже строится график за крайние несколько дней. По крону дергаю файл, куда мы пишем наши данные температуры, заряда батареек и отправляю данные на хостинг в БД. Пока все это собиралось и программировалось, данные из локальной БД перенес на хостинг.

Когда все было в сборе, нужно было проверить дальность передачи данных в домашних критериях с разными антеннами.
По дальности у меня вышло пробить три кирпичных стенки и дистанцию около 10 м. На приемнике антенной выступает кусочек от витой пары длинноватой около 17 см. Повышение перегородок и дистанции приводили к тому, что приемник совершенно не воспринимал сигнал либо пробовал выловить один два сигнала из lock-a. Ужаснее всего в моих опытах оказалась медная жила в виде спирали, другие антенны дали приблизительно однообразный вариант, потому я решил бросить кусочек витой пары 17 см. Для передатчика пробовал несколько вариантов: витая пара 17 и 34 см; медная жила около 1 мм в поперечнике и длинноватой 34 см в виде прямой и в виде спирали.

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

Что далее? Далее желал испытать связку МК Attiny85 + RF 433 TX + DHT22, но это уже совершенно иная история… habrahabr.ru

НЕТ КОММЕНТАРИЕВ

ОСТАВЬТЕ ОТВЕТ

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.