Небольшая метеостанция своими руками
На нашем сайте публикуется текущая погода в Кременчуге (см. Своя погода в Кременчуге) Описание устройства и программного обеспечения в этой статье.
Из завалявшихся деталей решил сделать небольшую метеостанцию. На сборку и написание прошивки для контроллера ушло два дня выходных. Еще пара дней ушла на написание, тестирование и отладку остального программного обеспечения. Текущая версия метеостанции измеряет температуру, влажность, давление, имеется связь с компьютером через 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
bme280 bmp280 gps mpu-6050 options stm32 ssd1331 ssd1306 eb-500 3d-printer soldering tim mpu-9250 dma watchdog piezo exti web raspberry-pi docker ngnix solar bluetooth foc html css brushless flask dc-dc capture gpio avr rs-232 mpx4115a atmega mongodb st-link barometer pwm nvic git java-script programmator dht11 hih-4000 pmsm encoder max1674 smd sensors rtc adc lcd motor timer meteo examples i2c usb flash sms rfid python esp8266 servo books bldc remap eeprom bkp battery ethernet uart usart displays led websocket nodemcu wifi
Архіви



