Небольшая метеостанция своими руками
На нашем сайте публикуется текущая погода в Кременчуге (см. Своя погода в Кременчуге) Описание устройства и программного обеспечения в этой статье.
Из завалявшихся деталей решил сделать небольшую метеостанцию. На сборку и написание прошивки для контроллера ушло два дня выходных. Еще пара дней ушла на написание, тестирование и отладку остального программного обеспечения. Текущая версия метеостанции измеряет температуру, влажность, давление, имеется связь с компьютером через USB порт от него же и питается, резервное питание от батареи 9 В. Данные отображает на LCD. Еще есть часы. Поскольку, не нашлось подходящего кварца (а покупать принципиально не хотел), сделал синхронизацию времени с компьютером.
Этот проект абсолютно не коммерческий, поэтому схему метеостанции, прошивку контроллера и все необходимое программное обеспечение можно скачать здесь . Исходный код прошивки здесь.
Собираем метеостанцию
Станция собрана на макетной плате, поэтому чертеж печатной платы и не просите.
Использовались следующие основные компоненты:
- ATMega8 - контроллер
- MPX4115A - датчик давления
- HIH-4000 - датчик влажности
- DS18B20 - датчик температуры
- WH1602A - дисплей
Схема также в файле mscheme.gif
Я использовал LCD на PLED технологии, можно обыкновенные типа WH1602A. Датчики температуры и влажности вынесены на улицу в защитную коробочку.
Подключаем к компьютеру
Подключение к порту USB требует отдельного описания. В принципе, можно было подключить и к COM порту, так проще. Но у меня он занят. Выбора нет - USB. Поскольку станция собиралась с чего было, то в ход пошел завалявшийся огрызок кабеля CA-42 для подключения мобильного телефона к компьютеру. Разъем к мобильному телефону ушел в дело, а тот конец, который подключается к компьютеру остался. В самом этом разъеме уже имеется микросхема для USB порта, а на выходе - стандартный UART, тот, который используется в мобильных телефонах и самый раз для контроллера, поэтому провода запаиваем напрямую, без каких либо преобразователей сигнала. После установки драйверов для этого кабеля, появляется виртуальный COM порт. Далее можем любой программой подключиться к нашей метеостанции, например HyperTerminal. Распайку кабеля специально не привожу, поскольку кабеля разные, могут отличатся. Использовать нужно 3 провода TX, RX, GND. Запитать устройство от кабеля, скорее всего, не получится. Я взял не нужный USB разъем и запитал с другого USB порта.
Для того чтобы можно было из командной строки отправлять команды и принимать ответ от метеостанции, была написана программа getfromcom.exe.
Метеостанция понимает только две команды:
AGOV - Возвращает текущие показания датчиков.
SETTIME [время в секундах с начала суток] - команда устанавливает время в метеостанции
Для получения данных выполняем getfromcom.exe COM6 AGOV
Для установки времени выполняем getfromcom.exe COM6 "SETTIME 72565"
COM6 - порт. 72565 - количество секунд с начала суток.
Автоматизация процесса
Теперь можно любой программой считать, обработать данные, отправить куда надо, синхронизировать время метеостанции. Я это сделал с помощью скриптового языка PHP. Во первых это быстро и всегда можно оперативно подправить скрипт и не искать куда делся исходный код. Во вторых, я постоянно работаю с PHP. Но Вы можете написать свою программу на любом удобном для Вас языке. Разумеется, для работы PHP придется его скачать (http://www.php.net/downloads.php) и установить на компьютере. Под Windows это делается элементарно. Скрипт getfromcom.php запускается из файла get_data.bat опрашивает метеостанцию, обрабатывает данные и отправляет на HTTP-сервер скрипту get_data.php. О скриптах на сервере поговорим чуть позже.
Спящий режим рабочего компьютера
Мой компьютер стоит в спящем режиме. Просыпается каждые 3 часа, опрашивает метеостанцию, отправляет данные на сервер и снова засыпает (можно и не выключать - кому как удобнее.). Делается это так: В планировщике задач указывается пакетный файл get_data.bat для выполнения и устанавливается опция "разбудить компьютер для выполнения этого задания".
Компьютер отправляется в спячку командой fShutdown.exe /hibernate
Теперь по указанному времени компьютер проснется и выполнит get_data.bat
Особенности get_data.bat
Команды
devcon.exe enable PCIVEN_10EC
ping 127.0.0.1
RASPHONE -d Setilite
Запускают сетевое подключение и подымают VPN к моему провайдеру Интернет.
ping 127.0.0.1 - так я сделал необходимую паузу.
Соответственно, отключаем командами:
RASPHONE -h Setilite
devcon.exe disable PCIVEN_10EC
У Вас будет все по другому, поэтому в файле эти строки закомментированы.
После выхода из спячки компьютер начинал думать, что COM порт занят другой программой. Пришлось виртуальный COM порт перезагружать командой devcon.exe restart "USBVid_6547&PID_0232". У Вас будет другой ID устройства.
Серверные скрипты
Теперь о скриптах на сервере. Скрипт, который принимает данные: get_data.php
Скрипт сохраняет данные в файл pogoda.log. Вообще то, данные отправляются и в базу данных MySQL. Но для простоты, рассмотрим работу только с файлом. Принимая данные, скрипт проверяет подходит ли IP адрес отправителя. Разрешенные адреса перечислены в файле ip_allow.lst От "чужого" отправителя данные не принимаются.
За отображение текущих значений отвечает скрипт pogoda_kremenchug.php
Все, что касается графиков, находится в папке pchart
Пользуйтесь на здоровье. Будут вопросы - пишите [email protected]
Корягин Андрей, 2009 г.
P.S. Сергей Федоров повторил данную метеостанцию и прислал разработанную им печатную плату.
Датчики MPX4115A и HIH-4000 где заказывал ? Дорогие однако.
можно применить дешевые датчики DHT11, измеряют сразу температуру и влажность. http://www.avislab.com/blog/dht11/
Следует оговориться, что DHT11 не работают при температурах ниже нуля, а влажность измеряют в пределах 20-80%. Что для метеостанции не совсем подходит.
А можно вместо USB(RS-232) Ethernet использовать? Есть пример?
Ethernet можно: http://www.avislab.com/blog/enc28j60/ Сама метеостанция с Ethernet существует и работает. У меня не доходят руки все толком задокументировать и опубликовать....
схема работает. вэб интерфейс реализуется только через подключение к компьютеру на котором поднят вэб сервер а само общение станции и компьютера идет через COM порт.
Tags
web java-script bmp280 adc bldc stm32 rs-232 programmator 3d-printer flash pwm sms motor docker raspberry-pi meteo gps ngnix bme280 timer ssd1331 mpu-6050 bkp battery rfid st-link tim mpx4115a ssd1306 encoder atmega pmsm wifi options rtc examples nvic soldering mongodb esp8266 books lcd foc flask barometer bluetooth ethernet brushless uart watchdog servo gpio solar git remap dma usart eb-500 smd nodemcu sensors displays html python capture dht11 led i2c eeprom piezo exti websocket max1674 usb dc-dc avr hih-4000 css mpu-9250
Архіви



