Сейчас на Arduino продается множество разнообразных датчиков, и хотя точность их измерений желает желать лучшего, но для домашнего использования они вполне годятся.
В исключительном случае, если вы увлекаетесь метеорологией, вам может понадобиться более сложная и дорогостоящее оборудование.
Готовое устройство, такое как Weather Meters, напичканное анемометром, флюгером, измерителем количества осадков, которое остается лишь подключить через RJ11 интерфейс к Arduino для работы, в полной мере оценят только метеорологи, диспетчеры или агрономы.
Возможности самодельной метеостанции:
- Измерение текущей температуры в доме, на улице.
- Показания влажности воздуха.
- Отслеживание атмосферного давления.
- Вывод всех данных на экран телефона в реальном времени.
Перечень необходимых компонентов:
- Плата Arduino Uno, mini, nano с процессором ATmega 168, ATmega 328.
- Bluetooth модуль HC-05.
- Датчик давления BMP180 — более экономное и точное устройство своей устаревшей версии BMP085.
- Датчик влажности DHT22 — отличается от DHT11 большей точностью и расширенным диапазоном измерений. Температуру он меряет также неточно, с чувствительностью 0.5 °С, хотя уже от –40 до + 125 °С, а не от 0 до +50 °С.
- Датчик температуры DS18B20, две штуки — один замеряет температуру в комнате, другой на улице. Использовать отдельные датчики температуры понадобилось, поскольку встроенный в модуль DHT22 имеет низкую точность до 0.5 °С.
- Резисторы по 0,125 Вт: 4.7 кОм, 10 кОм.
- Монтажная плата, паечная или беспаечная.
- Сетевой адаптер 220/5 В для питания платы Arduino.
Дополнительно можно приобрести:
- Плата коммутационная Sensor Shield для быстрого подключения всех датчиков, сервомоторов, интерфейсов Serial и I2C, незаменима тем, кто ни разу не держал в руках паяльник.
- Импульсный преобразователь DC-DC, вход 7…24 В, выход 5 В, 2.5 А.
Подключение датчиков и Bluetooth модуля
Подключать датчики температуры DS18B20 следует с одним резистором 4.7 кОм между их выводами DQ и VDD.
Два датчика температуры подсоединены к плате Arduino по одной трехпроводной шине. Каждый датчик DS18B20 имеет свой уникальный 64-битный адрес, и работает с Arduino по однолинейному протоколу 1 Wire передачи данных.
- Все два датчика будут передавать данные по одной шине на 4 цифровой вход платы Arduino.
- Подключаем датчик давления BMP180 к плате Arduino четырьмя проводами:
- VCC — 5V (питание +5В);
- GND — GND (земля);
- SDA — A4 аналоговый вход на Arduino;
- SCL — A5 аналоговый вход на Arduino;
Подключаем датчик влажности с pul-up (подтягивающим) резистором 10 кОм между его выводами VCC и DAT. Если расстояние от датчика до контроллера более 20 метров, то рекомендуется ставить подтягивающий резистор на 5.1 кОм. При необходимости улучшить работу датчика, следует добавить конденсатор емкостью 100 нФ между его питанием VCC и землей GND.
- Наш датчик влажности будет передавать данные на 8 цифровой вход платы Arduino.
- Остается лишь подключить Bluetooth модуль HC-05 к плате Arduino:
- VCC — 5V (питание +5 В);
- GND — GND (земля);
- RX — TX на Arduino;
- TX — RX на Arduino;
- KEY — не используется;
- STATE — не используется.
- Программное обеспечение
- Загружаем в Arduino эскиз программы для домашней миниметеостанции.
- Скетч WSAB
Проверяем работоспособность собранного устройства. В Монитор порта компьютерной программы Arduino IDE отправляем 1, затем поочередно 2, 3, 4.
- При отправке 1 — показания температуры на улице.
- При отправке 2 — показания температуры в доме.
- При отправке 3 — данные о давлении.
- При отправке 4 — данные о влажности.
- Загружаем на Android телефон приложение Wether station Android Arduino Bluetooth.
- Показания температуры на улице в градусах Цельсия
- Показания температуры внутри дома в градусах Цельсия
Данные об атмосферном давлении на улице в мм.рт.ст.
- Данные о влажности на улице в процентах
- Собрать готовое устройство можно в любом корпусе: футляр от аудиокассеты, распределительная коробка.
- Напоследок следует упомянуть, что собранная даже на Arduino Uno домашняя метеостанция потребляет совсем мизерный ток, до 30 мА, поэтому её вполне можно сделать переносной, запитав от солнечной панельки и аккумулятора.
Виталий Петрович. Украина Лисичанск.
Источник: https://volt-index.ru/high-tech/minimeteostantsiya-na-arduino-v-telefone.html
Метеостанция из ARDUINO | Мастер Винтик. Всё своими руками!
Давайте в этой статье постараемся собрать интересное устройство на основе набора Arduino — метеорологическую станцию, которая может показать: температуру окружающей среды, влажность, давление, качество воздуха и другие данные, которые могут быть использованы для прогнозирования погоды не выходя из дома.
Предлагаемая схема метеостанции строится на Arduino, который является мозгом метеорологической станции. Она собирает данные от различных датчиков, обрабатывает их и отображает на ЖК-дисплее 16 х 2.
- Вы можете выбрать любой ардуино для этого проекта.
- Цепь состоит из трех датчиков типа MQ-135, BMP180 и в dht11.
- Давайте посмотрим работу каждого датчика подробнее.
Датчик MQ-135
Датчик MQ-135 показывает качество воздуха. Измерительный датчик может обнаружить углекислый газ, спирт, бензин, дым, бутан, пропан и т. д. Если химическая концентрация этих газов присутствует в воздухе, то можно сказать, что воздух загрязнен.
Датчик может обнаружить изменения концентрации загрязняющих веществ в воздухе и выдает необходимый уровень напряжения. Выходное напряжение датчика прямо пропорционально уровню концентрации химических веществ в воздухе.
Изменения напряжения от датчика поступает к Arduino. Мы устанавливаем пороговые уровни в программе. Когда напряжение превышает порог уровня, микроконтроллер сообщает загрязнён ли воздух или нет.
На рисунке выше показана схема подключения. Этому датчику необходимо внешнее 5V питание, поскольку он имеет нагревательный элемент внутри датчика, который потребляет около 1 ватта.
Питание от Arduino не может обеспечить больший ток.
Нагрев датчика занимает около пары минут для достижения оптимальной температуры.
Датчик dht11
Датчик dht11 является известный как датчик температуры и влажности.
Это 4-контактный устройство, но используется только 3 из них. Он может показаться очень простой, но внутри он имеет микроконтроллер, который передает данные в цифровом виде для Arduino.
Схема подключения датчика к Arduino очень проста. Выход датчика подключается к контакту А1 ардуино. На vcc питания и GND подключены к выводам питания поставка ардуино.
Примечание: пожалуйста, убедитесь, что ваш датчик имеет встроенный резистор. Если его нет, подключите 4,7 ком резистор с выхода датчика dht11.
Датчик BMP180
Датчик BMP180 является барометрический датчик. Он может измерять атмосферное давление, высоту и температуру. Измерение температуры с этого датчика можно пренебречь, так как у нас есть специальный датчик для измерения температуры окружающей среды.
Датчик измеряет высоту установки над уровнем моря. Он использует протокол связи I2C, SDA pin идет на А4 ардуино и SCL идет на А5 ардуино. Vcc и GND подключены к выводам питания питания ардуино.
LCD дисплей
ЖК-дисплей показывает все данные от датчиков. Связь между ЖК-дисплеем и ардуино является стандартным. Отрегулируйте потенциометром 10К для оптимальной яркости ЖК-дисплея.
Внешний вид подключений
Вот схема подключения всех датчиков станции к плате Arduino.
Программа:
#include
#include
#include
#include
#define DHTxxPIN A1
LiquidCrystal lcd(12,11,5,4,3,2);
dht DHT;
Adafruit_BMP085 bmp;
int ack;
int input = A0;
unsigned long A = 1000L;
unsigned long B = A * 60;
unsigned long C = B * 2;
int low = 300;
int med = 500;
int high = 700;
int x = 4000;
void setup()
{
Serial.begin(9600);
lcd.
begin(16,2);
lcd.setCursor(0,0);
lcd.print(«Sensors are»);
lcd.setCursor(0,1);
lcd.print(«getting ready»);
delay(C);
}
void loop()
{
ack=0;
int chk = DHT.read11(DHTxxPIN);
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack=1;
break;
}
if(ack==0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«Temp(*C)= «);
lcd.print(DHT.temperature);
lcd.
setCursor(0,1);
lcd.print(«Humidity(%) = «);
lcd.print(DHT.humidity);
delay(x);
}
if(ack==1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«NO DATA»);
lcd.setCursor(0,1);
lcd.print(«Check Sensor»);
delay(x);
}
if (!bmp.begin())
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«BMP180 sensor»);
lcd.setCursor(0,1);
lcd.
print(«not found»);
while (1) {}
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«—-Pressure—- «);
lcd.setCursor(0,1);
lcd.print(bmp.readPressure());
lcd.print(» Pascal»);
delay(x);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«—-Altitude—-«);
lcd.setCursor(0,1);
lcd.print(bmp.readAltitude(101500));
lcd.
print(» meter»);
delay(x);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(» Air Quality:»);
if(analogRead(input)==0)
{
lcd.setCursor(0,1);
lcd.print(» Sensor Error»);
delay(x);
}
if(analogRead(input)0)
{
lcd.setCursor(0,1);
lcd.
print(» GOOD»);
delay(x);
}
if(analogRead(input)>low && analogRead(input)=med && analogRead(input)=high)
{
lcd.setCursor(0,1);
lcd.print(» WORST»);
delay(x);
}
- }
- Здесь можно бесплатно скачать библиотеку с кодами для работы датчиков
- By Girish Radhakrishnan
- Световой меч своими руками
- Необычные Двоичные Часы
- Компактный генератор сигналов на CS2000
- Генераторы (осцилляторы) составляют ключевую роль во многих радиолюбительских и других конструкциях.
- В любительском радио генератор переменной частоты (VFO) часто используется для генерации рабочей частоты приемника, передатчика или приемопередатчика.
- При поиске микросхемы для генератора я наткнулся на Cirrus Logic CS2000 и после дальнейшего детального изучения он выглядел довольно многообещающим компонентом…
- Подробнее…
Светово́й меч (англ. Lightsaber) — это фантастическое оружие многим известно по фантастической саге «Звёздные войны». Его можно встретить в научно-фантастических фильмах и рассказах.
В интернете много статей о том, как собрать световой меч. Они в основном на одном принципе: размещение в длинной трубе разноцветных светодиодов. Тем самым имитируют лазерный луч. Но нигде не встречается имитация звука этого луча.
Подробнее…
Четырехточечные бинарные часы с ультра-простым дисплеем
Предложенные часы не тикают, не имеют ярких ЖК-дисплеев или светодиодов и нет никакой тревоги (будильника).
Показ времени только четырьмя разноцветными точками света. Я не думаю, что эти часы намного сложны, чем обычные. Подробнее…
Простой ВЧ генератор от 1,5 до 165 МГц
Популярность: 5 153 просм.
Источник: http://www.MasterVintik.ru/meteostantsiya-iz-arduino/
Домашняя метеостанция на базе Ардуино
Давненько хотелось сделать мини метеостанцию-надоело выглядывать в окно чтобы посмотреть на градусник за стеклом. Этот приборчик заменит гигрометр, барометр и термометр а также покажет текущее время. В данном посту я расскажу как быстро и просто собрать небольшую метеостанцию на базе Ардуино. Основой будет плата Arduino Nano можно применить другие платы- Arduino Uno, Arduino Pro mini). Данные атмосферного давления и температуры в помещении будем получать с датчика BMP180, а влажность и температуру на улице с датчика DHT11. Часы реального времени DS1302 будут указывать текущее время. Всю информацию выводим на двухстрочный дисплей LCD1602.
Датчик DHT11 передает информацию по одному проводу на ардуино. Питается напряжением 5 В. Он измеряет влажность в пределах от 20 до 80%. Температура измеряет в диапазоне от 0 до 50оС.
Датчик BMP180 измеряет атмосферное давление диапазоне 300-1100 hPa, температуру в диапазоне -40 +85оС. Напряжение питания составляет 3.3 В. Подключается по протоколу связи I2C. Часы реального времени DS1302 питаются напряжением 5 В и подключается по протоколу связи I2C. При установке в соответствующее гнездо батарейки CR2032 поддерживают ход часов при отключении основного питания. Дисплей LCD1602 питается напряжением 5 Вольт и также подключается по протоколу связи I2C. Эта самоделка сделана на базе готовых плат и датчиков, поэтому ее можно повторить любому начинающему любителю поработать с паяльником. Заодно можно получить азы программирования Ардуино. Я программировал эту метеостанцию в программе визуального программирования FLPROG за 15 минут. Не нужно вручную часами писать скетчи, данная программа помогает начинающим (и не только) быстро освоить азы программирования устройств на основании платформы Ардуино. Кому лень повозиться с программой — скетч ( только выставлять текущее время часов надо будет):#include
#include «DHT_NEW.h»
#include
#include
#include
BMP085 _bmp085 = BMP085();
long _bmp085P = 0;
long _bmp085T = 0;
long _bmp085A = 0;
LiquidCrystal_I2C _lcd1(0x3f, 16, 2);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;
DHT _dht1;
iarduino_RTC _RTC1(RTC_DS1302, 7, 5, 6);
unsigned long _dht1LRT = 0UL;
unsigned long _dht1Tti = 0UL;
int _disp1oldLength = 0;
unsigned long _bmp0852Tti = 0UL;
String _RTC1_GetTime2_StrOut;
int _disp2oldLength = 0;
void setup()
{
Wire.begin();
delay(10);
_bmp085.init(MODE_ULTRA_HIGHRES,116, true);
_RTC1.begin();
_RTC1.period(1);
_lcd1.init();
_lcd1.backlight();
_dht1.setup(4);
_dht1LRT = millis();
_dht1Tti = millis();
}
void loop()
{if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}
if(_isTimer(_bmp0852Tti, 1000)) {
_bmp0852Tti = millis();
_bmp085.getAltitude(&_bmp085A);
_bmp085.getPressure(&_bmp085P);
_bmp085.getTemperature(&_bmp085T);
}
//Плата:1
if (1) {
_dispTempLength1 = ((((((String(«T:»)) + (( _floatToStringWitRaz((_bmp085T)/(10.00),1))) + (String(«*»)))) + (((String(«P:»)) + (( _floatToStringWitRaz((_bmp085P)/(133.3),0))) + (String(«*»)))) + (((String(«»)) + (( _floatToStringWitRaz(_dht1.humidity,0))) + (String(«%»))))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 — _dispTempLength1)/2), 0);
_lcd1.print((((((String(«T:»)) + (( _floatToStringWitRaz((_bmp085T)/(10.00),1))) + (String(«*»)))) + (((String(«P:»)) + (( _floatToStringWitRaz((_bmp085P)/(133.3),0))) + (String(«*»)))) + (((String(«»)) + (( _floatToStringWitRaz(_dht1.humidity,0))) + (String(«%»)))));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
if(_isTimer(_dht1Tti, 2000)) {
if(_isTimer(_dht1LRT, ( _dht1.getMinimumSamplingPeriod()))) {
_dht1.readSensor();
_dht1LRT = millis();
_dht1Tti = millis();
}
}
if (1) {
_dispTempLength1 = ((((((String(«t:»)) + (( _floatToStringWitRaz(_dht1.temperature,0))) + (String(«*»)))) + (_RTC1_GetTime2_StrOut)))).length();
if (_disp2oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 — _dispTempLength1)/2), 1);
_lcd1.print((((((String(«t:»)) + (( _floatToStringWitRaz(_dht1.temperature,0))) + (String(«*»)))) + (_RTC1_GetTime2_StrOut))));
} else {
if (_disp2oldLength > 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
_RTC1_GetTime2_StrOut = _RTC1.gettime(«H:i:sD»);
}
String _floatToStringWitRaz(float value, int raz)
{
return String(value, raz);
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}Применять такой прибор можно где угодно или дома, на природе или поместить в автомобиль. Есть возможность запитать схему от аккумуляторов, применив плату заряда, в итоге будет переносная модель метеостанции. Всю информацию можно получить посмотрев в видео:
Перечень материалов и инструментов -плата Arduino Nano -двухстрочный дисплей LCD1602; -часы реального времени DS1302; -датчик атмосферное давления и температуры BMP180; -датчик температуры и влажности DHT11; -блок зарядки от телефона; -любой подходящий корпус -пинцет; ножницы; -паяльник; -кембрик; -тестер; -соединительные провода;-провод четырехжильный для выносного датчика.
Шаг первый. Делаем корпус для метеостанции
Подобрал пластмассовую коробочку из магазина Fix Price (всего то 17р). Предварительно вырезал в крышке окно для дисплея.
Затем вырезал частично перегородки в коробке, сделал отверстия для USB разъема платы Arduino проем для датчика BMP180 Датчика BMP180 будет находится на наружной стороне корпуса, чтобы исключить лишний нагрев от электронной начинки находящейся внутри.
После я покрасил корпус самоделки изнутри потому что пластик прозрачный. Коробка закрывается на защелку и в ней все элементы неплохо поместились.
Шаг второй. Сборка схемы прибора.
Фото схемы
Далее надо скоммутировать по схеме все платы и датчики метеостанции. Делаем это с помощью монтажных проводов с соответствующими разъемами. Я не делал соединения на пайке ,так в перспективе при выходе какого то модуля из строя (или по другим причинам) можно легко его заменить. На винтовом разъеме подключается кабель датчика DHT11 идущий на улицу. Питание можно осуществить с разъема USB платы Ардуино на компьютер, или подав напряжение 7-12В на контакт VIN и GND. Сначала я собрал схему вне корпуса и запрограммировал и отладил ее в программе FLPROG. Фото блок схемы в программе FLPROG. Когда первый раз запрограммировал и включил схема метеостанции заработала. Сейчас стало возможным иметь данные о погоде за бортом и в комнате. В общем получилась интересная домашняя метеостанция с множеством различных функций. Фото в сбореНеплохая получилась самодельная конструкция собранная в выходные. Было увлекательно самому сделать интересный и полезный приборчик. Сделать самостоятельно такой девайс, я думаю по плечу даже начинающему.Это не требует больших затрат времени и денег. Применить можно его где хочешь в доме на загородной даче. На всю работу пошло два выходных вечера всю электронику брал на Алиэкспресс. Остальные материалы нашлись у меня по сусекам. На базе платформы Ардуино можно собирать множество разнообразных полезных устройств.
Всем спасибо за внимание, вам успехов и удачи и в вашей жизни и в творчестве!
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Источник: https://USamodelkina.ru/9703-domashnyaya-meteostanciya-na-baze-arduino.html
Метеостанция на Arduino – Радиодед
Для того, чтобы узнать температуру и влажность воздуха на улице, а также атмосферное давление, можно посмотреть прогноз в Интернете. Но, как известно, гидрометеоцентры частенько ошибается.
Получить фактические точные данные можно с помощью домашней метеостанции. Домашнюю метеостанцию можно купить, а можно сделать самостоятельно. Рассмотрим создание домашней метеостанции на контроллере Arduino.
Наша домашняя метеостанция будет измерять температуру и влажность воздуха, атмосферное давление и выводить параметры на ЖК-дисплей. Список комплектующих, которые понадобятся для данного проекта:
- контроллер Arduino;
- плата прототипирования (без пайки)
- модуль датчика BMP085 или BMP180
- модуль с датчиком влажности DHT11
- датчик температуры DS18B20
- резистор 4,7 кОм;
- дисплей Nokia 5110
- провода и корпус
В качестве платы Arduino в принципе можно использовать любую из модельного ряда Arduino, но я рекомендую Arduino Uno или Arduino Duemilanove, так как в будущем собираюсь установить на нее Ethernet shield, чтобы сделать домашнюю метеостанцию устройством IoT (“Интернета вещей”). Я буду использовать плату Arduino Duemilanove (рисунок 1).
Рис. 1. Плата Arduino Duemilanove
Теперь рассмотрим датчики, которые будем использовать в проекте.
Датчик давления BMP085 (рисунок 2) – высокоточный датчик атмосферного давления с низким энергопотреблением. используется для измерения атмосферного давления. Точность достигает минимального значения измерения давления 0.03hPa.
Также выводит и данные о температуре. Напряжение питания 1.62V – 3.6V. Интерфейс подключения I2C. В продаже встречаются готовые платы как с стабилизатором, так и без него.
Датчик давления BMP085 мы будем использовать только для измерения атмосферного давления, для измерения температуры будем использовать более точный датчик DS18B20.
Рис.2. Модуль датчика BMP085
Датчик температуры DS18B20 (рисунок 3) – это цифровой измеритель температуры с разрешением преобразования 9 – 12 разрядов и функцией тревожного сигнала контроля за температурой.
Обменивается данными с микроконтроллером по однопроводной линии связи, используя протокол интерфейса 1-Wire. Диапазон измерения температуры составляет от -55 до +125 °C. Для диапазона от -10 до +85 °C погрешность не превышает 0,5 °C.
У каждой микросхемы DS18B20 есть уникальный серийный код длиной 64 разряда, который позволяет нескольким датчикам подключаться на одну общую линию связи.
Рис. 3. Датчик температуры DS18B20
Датчик DHT11 (рисунок 4) не обладают высоким быстродействием и точностью, но зато имеет низкую стоимость. Датчик состоит из емкостного датчика влажности и термистора.
Содержит аналого-цифровой преобразователь для преобразования аналоговых значений влажности и температуры в цифровые. Диапазон измерения влажности – 20-80%, частота опроса 1 раз в секунду.
Мы будем использовать в проекте датчик DHT11 в виде готового модуля.
Рис.4. Модуль DHT11
Для отображения информации с датчиков будем использовать ЖК-дисплей Nokia 5110 (рисунок 5). Это графический монохромный дисплей с разрешением 84×48 точек. Дисплей Nokia 5110 поставляется на плате в паре с контроллером PCD8544 и штыревым разъемом. Электропотребление дисплея позволяет питать его от выхода +3.3 В платы Arduino.
Рис. 5. Дисплей Nokia 5110
Собираем схему согласно рисунка 6.
Рис. 6. Схема подключения к Arduino
Для удобства я спаял датчики на плате прототипирования, сделал контакты для подключения проводов от дисплея и оформил это в виде шилда – припаял штырьки для подключения к контактам платы Arduino (рисунок 7).
Рис. 7. Как получилось у меня. Проект метеостанции на Arduino
Теперь приступим к написанию скетча. При написании скетча нам понадоьятся следующие Arduino-библиотеки:
• OneWire – для работы с устройствами 1-Wire (датчик DS18B20);
• BMP085 и Wire – для работы с датчиком BMP085 (или BMP180);
• DHT – для работы с датчиком DHT11;
• Adafruit_GFX и Adafruit_PCD8544 – для работы с дисплеем Nokia 5110.
С периодичностью 5 секунд получаем данные с датчиков DS18B20, DHT11, BMP085 и выводим в монитор последовательного порта и на дисплей Nokia 5110.
Процедура получения данных с датчика DS18B20 – get_temp() выполняет поиск устройств 1-Wire, подключенных к выводу Adruino D7 (у нас один датчик), и выдает его данные.
Запустим Arduino IDE.
Создадим новый скетч и внесем в него содержимое листинга 1.
// подключение библиотек
#include
#include
#include
#include “DHT.
h”
#include
#include
// тип DHT сенсора
#define DHTTYPE DHT11 // DHT 11
// создание экземпляров объектов
BMP085 dps = BMP085();
DHT dht(8, DHTTYPE); // dht11 на pin 8
OneWire ds(9); // ds18b20 на pin 9
// Nokia 5110
// pin 3 – Serial clock out (SCLK)
// pin 4 – Serial data out (DIN)
// pin 5 – Data/Command select (D/C)
// pin 6 – LCD chip select (CS)
// pin 7 – LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
// переменные
int Temp1;
long Temperature085 = 0, Pressure085 = 0, Altitude085 = 0;
void setup() {
// запуск последовательного порта
Serial.begin(9600);
Serial.println(“start”);
// запуск I2C
Wire.begin();
// запуск bmp
dps.init();
// инициализация дисплея
display.begin();
// установить контраст фона экрана
display.
setContrast(60);
display.clearDisplay(); // очистить экран
display.setTextSize(1); // размер шрифта
display.setTextColor(BLACK); // цвет
// заставка
display.setCursor(15,15);
display.print(“Home Meteo”);
display.
display();
delay(2000);
}
void loop () {
display.clearDisplay();
display.setCursor(15,5);
display.print(“Home Meteo”);
// ds18b20
int Temp=get_temp();
if(Temp==999) {
display.setCursor(15,15);
display.print(“t=”);
display.print(Temp1/16);
display.print(“.”);
display.print(((Temp1%16)*100)/16);
display.print(” C”);
}
else if(Temp==998) {
Serial.println(“Temp=ERROR”);
display.setCursor(15,15);
display.
print(“t=ERROR”);
}
else {
Serial.print(“Temp=”);
Serial.print(Temp/16);
Serial.print(“.”);
Serial.print(((Temp%16)*100)/16);
Serial.println(” *C”);
display.setCursor(15,15);
display.print(“t=”);
display.print(Temp/16);
display.print(“.”);
display.print(((Temp%16)*100)/16);
display.print(” C”);
Temp1=Temp;
}
// dht11
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.
print(“humidity=”);
Serial.print(h);
Serial.println(” %”);
Serial.print(“temperatura=”);
Serial.print(t);
Serial.println(” *C”);
display.setCursor(15,25);
display.print(“h=”);
display.print(h);
display.print(” %”);
// bmp085
dps.getTemperature(&Temperature085);
dps.getPressure(&Pressure085);
dps.getAltitude(&Altitude085);
Serial.print(“pressure5=”);
Serial.print(Pressure085/133.
3);
Serial.println(” mm Hg”);
Serial.print(“temp5=”);
Serial.print(Temperature085*0.1);
Serial.println(” *C”);
Serial.println();
display.setCursor(5,35);
display.print(“p=”);
display.print(Pressure085/133.3);
display.print(“mmHg”);
// обновить
display.
display();
// пауза
delay(5000);
}
// получение температуры датчика ds18b20
int get_temp() {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
int Temp;
if ( !ds.search(addr)) {
Serial.print(“No more addresses.n”);
ds.reset_search();
return 999;
}
Serial.print(“R=”); // печать уникального 1-wire идентификатора
for( i = 0; i < 8; i++) { Serial.
print(addr[i], HEX);
Serial.print(” “);
}
Serial.println();
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.print(“CRC is not valid!n”);
return 999;
}
if ( addr[0] != 0x28) {
Serial.
print(“Device is not a DS18S20 family device.n”);
return 999;
}
ds.reset();
ds.select(addr);
// начинаем преобразование, используя ds.write(0x44,1)
ds.write(0x44,1);
// пауза с запасом (750 мс)
delay(1000);
ds.reset();
ds.select(addr);
ds.write(0xBE);
for ( i = 0; i < 9; i++) { data[i] = ds.read(); } Temp=(data[1]
Источник: https://radioded.ru/meteostantsiya-na-arduino/
Метеостанция на Arduino с беспроводным датчиком температуры
Как-то прогуливаясь по городу увидел новый открывшийся магазин радиоэлектроники. Зайдя в него обнаружил большое количество шилдов для Ардуины т.к. у меня дома была Arduino Uno и Arduino Nano сразу пришла мысль поиграться с передатчиками сигнала на расстоянии. Решил купить самый дешевый передатчик и приемник на 433 МГц:
- Передатчик сигнала.
- Приемник сигнала.
- Записав простейший скетч передачи данных (пример взят от сюда), выяснилось, что передающие устройства могут вполне подойти для передачи простейших данных, таких как температура, влажность.
Передатчик имеет следующие характеристики:1. Модель: MX -FS — 03V2. Радиус действия (зависит от наличия преграждающих предметов): 20-200 метров3. Рабочее напряжение: 3.5 -12В4.
Размеры модуля : 19 * 19 мм 5. Модуляция сигнала : AM6. Мощность передатчика: 10 мВт7. Частота: 433 МГц8. Необходимая длина внешней антенны : 25см9.
Простота подключения (всего три провода): DATA ; VCC ; земля.
Характеристики приемного модуля:1. Рабочее напряжение: DC 5В2. Ток: 4мA3. Рабочая частота: 433,92 МГц4. Чувствительность : — 105дБ5. Размеры модуля : 30 * 14 * 7 мм6. Небходима внешняя антенна: 32 см.
В просторах интернета сказано, что дальность передачи информации на 2Кб/сек может доходить до 150м. Сам не проверял, но в двухкомнатной квартире принимает везде.
- Аппаратная часть домашней метеостанции
- После нескольких экспериментов решил подключить к Arduino Nano датчик температуры, влажности и передатчик.
- Подключение датчика температуры, влажности и передатчика
- Датчик температуры DS18D20 подключается к ардуино следующим образом:
1) GND к минусу микроконтроллера.2) DQ через подтягивающий резистор к земле и к выводу D2 Ардуины3) Vdd к +5В.
- Более детально почитать о работе датчика можно здесь.
- Модуль передатчика MX -FS — 03V питается от 5 Вольт, вывод данных (ADATA) подключен к выводу D13.
- К Ардуино Уно подключил LCD дисплей и барометр BMP085.
- Схема подключение к ардуино уно
- Приемник сигнала подключен к выводу D10.
Модуль BMP085 — цифровой датчик атмосферного давления. Датчик позволяет измерять температуру,давление и высоту над уровнем моря. Интерфейс подключения: I2C. Напряжение питания датчика 1.8-3.6 В
Подключается модуль к Arduino также, как и другие I2C устройства:
- VCC — VCC (3,3 В);
- GND — GND;
- SCL — к аналоговому выводу 5;
- SDA — к аналоговому выводу 4.
DHT11:
- Очень низкая стоимость
- Питание и I/O 3-5 В
- Определение влажности 20-80% с 5% точностью
- Определение температуры 0-50 град. с 2% точностью
- Частота опроса не более 1 Гц (не более раза в 1 сек.)
- Размеры 15.5мм x 12мм x 5.5мм
- 4 вывода с расстоянием между ножками 0.1″
DHT имеет 4 вывода:
- Vcc (3-5V питание)
- Data out — Вывод данных
- Не используется
- Общий
Подключается к D8 Ардуины.
- Программная часть домашней метеостанции
- Передающий модуль измеряет и передает температуру раз в 10 минут.
- Ниже привожу программу:
/*
Версия скетча 1.0
Отсылаем температуру каждые 10мин.
*/
#include
#include
#include
#define ONE_WIRE_BUS 2 //Пин подключения датчика Даллас
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
void setup(void)
{
//Serial.begin(9600);
vw_set_ptt_inverted(true); // Необходимо для DR3100
vw_setup(2000); // Устанавливаем скорость передачи (бит/с)
sensors.begin();
if (!sensors.getAddress(insideThermometer, 0));
printAddress(insideThermometer);
sensors.setResolution(insideThermometer, 9);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
//Serial.print(«Temp C: «);
//Serial.println(tempC);
//Формирование данных для для отправки
int number = tempC;
char symbol = 'c'; //Служебный символ определения что это датчик
String strMsg = «z «;
strMsg += symbol;
strMsg += » «;
strMsg += number;
strMsg += » «;
char msg[255];
strMsg.toCharArray(msg, 255);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Ждем пока передача будет окончена
delay(200);
}
void loop(void)
{
for (int j=0; j
Источник: https://cxem.net/arduino/arduino115.php
Как сделать погодную станцию на Arduino
Предлагается методика изготовления погодной станции для дома или дачи. За основу возьмём плату Ардуино и набор сенсоров: температуры, влажности, давления и датчик углекислого газа. Данные будут выводиться на LCD дисплей, а питание осуществляться от блока питания для мобильного телефона или батареек.
Нам понадобятся:
Инструкция по созданию домашней метеостанции на Arduino
1Подбор корпусадля будущей метеостанции
Для начала нужно подобрать подходящий корпус. Туда должны вместиться все комплектующие будущей комнатной метеостанции. Такие корпуса продаются во многих магазинах радиоэлектроники. Или воспользуйтесь любым другим корпусом, который сможете найти.
Прикиньте, как все компоненты будут размещаться внутри. Прорежьте окно для закрепления LCD дисплея, если его нет. Если будете размещать внутри датчик углекислого газа, который достаточно сильно греется, то разместите его в противоположной от других датчиков стороне или сделайте его выносным. Предусмотрите отверстие для разъёма питания.
Корпус для самодельной домашней метеостанции
2Используемые компоненты
- LCD-дисплей 1602 использует 6 пинов Arduino + 4 на питание (подсветка и знакосинтезатор).
- Датчик температуры и влажности DHT11 подключается к любому цифровому пину. Для чтения значений будем использовать библиотеку DHT11.
- Датчик давления BMP085 подключается по интерфейсу I2C к двум пинам Arduino: SDA – к аналоговому пину A4 и SCL – к аналоговому пину A5. Обратим внимание, что для питания на датчик подаётся напряжение +3,3 В.
- Датчик углекислого газа MQ135 подключается к одному из аналоговых пинов.
Компоненты домашней метеостанции
- В принципе, для оценки метеообстановки достаточно иметь данные о температуре, влажности и атмосферном давлении, а датчик углекислого газа необязателен.
- Используя же все 3 датчика, у нас будут задействованы 7 цифровых и 3 аналоговых пина Ардуино, не считая питания, естественно.
- 3Схема соединениякомпонентов метеостанции
Схема метеостанции показана на рисунке. Тут всё ясно.
Схема домашней метеостанции
4Скетч метеостанции
Напишем скетч для Ардуино. Код по возможности снабжён подробными ми.
Скетч для метеостанции на Arduino (разворачивается) /* СОЕДИНЕНИЯ Подключение датчика температуры-влажности DHT11 — — OUT > цифровой пин 9 — «+» > +3V (+5V) — «-» > GND Подключение датчика давления-температуры BMP085 — — VCC > 3.3V; (поддерживается 1.8 — 3.6 В) — GND > GND — SDA > аналоговый пин A4 — SCL > аналоговый пин A5 Детектор газа ————————————— — A0 — VCC — GND ЖКИ ———————————————— — LCD RS > к цифровым выводам 12 — 8 — LCD Enable > к выводам 11 — 9 — LCD D4 > к выводам 5 — 4 — LCD D5 > к выводам 4 — 5 — LCD D6 > к выводам 3 — 6 — LCD D7 > к выводам 2 — 7 — LCD R/W > GND — 10K резистор между +5V и землёй — сброс > к LCD VO (пин 3) */ // Подключение библиотек: #include // датчика температуры-влажности #include // LCD #include // датчика BMP085 #include // газовый детектор MQ135 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); /* соединение LCD-шилда x## — для вывода кириллических символов, где ## — номера символов в таблице */ dht11 sensorTempHumid; // датчик температуры и влажности MQ135 gasSensor = MQ135(A0); // датчик газа #define RZERO 76.63 float rzero; // показания с датчика газа float ppm; int del = 5000; // задержка, мс /* Oversampling Setting (OSS) — настройки разрешения для датчика давления BMP085, см. https://www.sparkfun.com/tutorials/253 OSS может быть 0, 1, 2 или 3: 0 — ультранизкое потребление, низкое разрешение; 1 — стандартное потребление; 2 — высокое разрешение; 3 — ультравысокое разрешение и максимальное потребление. */ const unsigned char OSS = 0; // Калибровочные переменные для BMP085: int ac1; int ac2; int ac3; unsigned int ac4; unsigned int ac5; unsigned int ac6; int b1; int b2; int mb; int mc; int md; long b5; float temperature; // температура long pressure; // давление // Для прогноза: const float p0 = 101325; // давление на уровне моря, Па. const float currentAltitude = 179.5; // высота погодной станции над уровнем моря, м; const float ePressure = p0 * pow((1 — currentAltitude/44330), 5.255); // нормальное давление на данной высоте, Па. float weatherDiff; #define DHT11PIN 9 // пин 9 датчика DHT11. #define BMP085_ADDRESS 0x77 /* I2C адрес датчика BMP085; см. https://www.sparkfun.com/tutorials/253 */ void setup() { lcd.begin(16, 2); // инициализация ЖК Wire.begin(); // инициализация I2C bmp085Calibration(); // калибровка датчика BMP085 } void loop() { // Проверка датчика давления-влажности: int chk = sensorTempHumid.read(DHT11PIN); switch (chk) { case DHTLIB_OK: lcd.clear(); break; case DHTLIB_ERROR_CHECKSUM: lcd.clear(); lcd.print(«Checksum error»); delay(del); return; case DHTLIB_ERROR_TIMEOUT: lcd.clear(); lcd.print(«Time out error»); delay(del); return; default: lcd.clear(); lcd.print(«Unknown error»); delay(del); return; } // Считываем с датчика BMP085: temperature = bmp085GetTemperature(bmp085ReadUT()); temperature *= 0.1; pressure = bmp085GetPressure(bmp085ReadUP()); pressure *= 0.01; // Разница давлений для вычисления простого прогноза weatherDiff = pressure — ePressure; rzero = gasSensor.getRZero(); ppm = gasSensor.getPPM(); // ЖК: lcd.setCursor(0, 0); // курсор на строку 1, поз. 1; //lcd.print(«p = «); lcd.print(pressure*3/4); // Па -> мм рт.ст. lcd.print(«mmHg «); // мм рт.ст. // «Прогноз»: if(weatherDiff > 250) lcd.print(«Sun»); else if ((weatherDiff = -250)) lcd.print(«Cloudy»); else if (weatherDiff > -250) lcd.print(«Rain»); lcd.setCursor(0, 1); // переход на строку 2 //lcd.print(«t=»); lcd.print(temperature, 1); lcd.print(«C «); //lcd.print(«f=»); lcd.print(sensorTempHumid.humidity); lcd.print(«% «); lcd.print(ppm); //lcd.print(«t=»); //lcd.print(sensorTempHumid.temperature); //lcd.print(«C «); delay(del); lcd.clear(); } // ВЫЧИСЛЕНИЕ ДАВЛЕНИЯ // Функция получает калибровочные значения для BMP085 // и должна быть запущена в начале. void bmp085Calibration() { ac1 = bmp085ReadInt(0xAA); ac2 = bmp085ReadInt(0xAC); ac3 = bmp085ReadInt(0xAE); ac4 = bmp085ReadInt(0xB0); ac5 = bmp085ReadInt(0xB2); ac6 = bmp085ReadInt(0xB4); b1 = bmp085ReadInt(0xB6); b2 = bmp085ReadInt(0xB8); mb = bmp085ReadInt(0xBA); mc = bmp085ReadInt(0xBC); md = bmp085ReadInt(0xBE); } // Вычисление нескомпенсированной температуры. // Возврашает значение в десятых долях градуса Цельсия. short bmp085GetTemperature(unsigned int ut) { long x1, x2; x1 = (((long)ut — (long)ac6)*(long)ac5) >> 15; x2 = ((long)mc >4); } /* Вычисление нескомпенсированного давления. Калибровочные значения должны быть уже известны. b5 также необходимо, поэтому сначала нужно вызвать bmp085GetTemperature(). Возвращает значение в Паскалях. */ long bmp085GetPressure(unsigned long up) { long x1, x2, x3, b3, b6, p; unsigned long b4, b7; b6 = b5 — 4000; // вычисление b3: x1 = (b2 * (b6 * b6)>>12)>>11; x2 = (ac2 * b6)>>11; x3 = x1 + x2; b3 = (((((long)ac1)*4 + x3)2; // вычисление b4: x1 = (ac3 * b6)>>13; x2 = (b1 * ((b6 * b6)>>12))>>16; x3 = ((x1 + x2) + 2)>>2; b4 = (ac4 * (unsigned long)(x3 + 32768))>>15; b7 = ((unsigned long)(up — b3) * (50000>>OSS)); if (b7 < 0x80000000) p = (b78); x1 = (x1 * 3038)>>16; x2 = (-7357 * p)>>16; p += (x1 + x2 + 3791)>>4; return p; } // Чтение нескомпенсированного значения температуры. unsigned int bmp085ReadUT() { unsigned int ut; // Записывает 0x2E в регистр 0xF4 // для запроса показаний температуры: Wire.beginTransmission(BMP085_ADDRESS); Wire.write(0xF4); Wire.write(0x2E); Wire.endTransmission(); delay(5); // Читает 2 байта из регистров 0xF6 и 0xF7 ut = bmp085ReadInt(0xF6); return ut; } // Чтение давления (нескомпенсированного). unsigned long bmp085ReadUP() { unsigned char msb, lsb, xlsb; unsigned long up = 0; // Записывает 0x34+(OSS
Источник: https://soltau.ru/index.php/themes/diy/item/436-kak-sdelat-pogodnuyu-stantsiyu-na-arduino
AlexGyver/MeteoClock
Описание проекта
Крутая домашняя метеостанция на Arduino с кучей датчиков, часами и большим дисплеем
Страница проекта на сайте: https://alexgyver.ru/MeteoClock/
Особенности:
- Большой дешёвый LCD дисплей
- Вывод на дисплей:
- Большие часы
- Дата
- Температура воздуха
- Влажность воздуха
- Атмосферное давление (в мм.рт.ст.)
- Углекислый газ (в ppm)
- Прогноз осадков на основе изменения давления
- Построение графиков показаний с датчиков за час и сутки
- Индикация уровня CO2 трёхцветным светодиодом (общий анод/общий катод, настраивается в прошивке)
- Переключение режимов сенсорной кнопкой
- В версиях выше 1.5 сделано автоматическое регулирование яркости дисплея и светодиода. Смотрите новую схему
Папки
ВНИМАНИЕ! Если это твой первый опыт работы с Arduino, читай инструкцию
- libraries — библиотеки проекта. Заменить имеющиеся версии
- firmware — прошивки для Arduino
- schemes — схемы подключения компонентов
Схемы
Материалы и компоненты
Ссылки оставлены на магазины, с которых я закупаюсь уже не один год
Первые ссылки — в основном магазин Great Wall, вторые — WAVGAT. Покупая в одном магазине, вы экономите на доставке!
Дополнительно:
Вам скорее всего пригодится
Как скачать и прошить
- Первые шаги с Arduino — ультра подробная статья по началу работы с Ардуино, ознакомиться первым делом!
- Скачать архив с проектом
На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP
- Установить библиотеки в
C:Program Files (x86)Arduinolibraries (Windows x64)
C:Program FilesArduinolibraries (Windows x86) - Подключить внешнее питание 5 Вольт
- Подключить Ардуино к компьютеру
- Запустить файл прошивки (который имеет расширение .ino)
- Настроить IDE (COM порт, модель Arduino, как в статье выше)
- Настроить что нужно по проекту
- Нажать загрузить
- Пользоваться
Настройки в коде
RESET_CLOCK 0 // сброс часов на время загрузки прошивки (для модуля с несъёмной батарейкой).
Не забудь поставить 0 и прошить ещё раз!
SENS_TIME 30000 // время обновления показаний сенсоров на экране, миллисекунд
LED_MODE 0 // тип RGB светодиода: 0 — главный катод, 1 — главный анод
// управление яркостью
BRIGHT_CONTROL 1 // 0/1 — запретить/разрешить управление яркостью (при отключении яркость всегда будет макс.
)
BRIGHT_THRESHOLD 350 // величина сигнала, ниже которой яркость переключится на минимум (0-1023)
LED_BRIGHT_MAX 255 // макс яркость светодиода СО2 (0 — 255)
LED_BRIGHT_MIN 10 // мин яркость светодиода СО2 (0 — 255)
LCD_BRIGHT_MAX 255 // макс яркость подсветки дисплея (0 — 255)
LCD_BRIGHT_MIN 10 // мин яркость подсветки дисплея (0 — 255)
BLUE_YELLOW 1 // жёлтый цвет вместо синего (1 да, 0 нет) но из за особенностей подключения жёлтый не такой яркий
DISP_MODE 1 // в правом верхнем углу отображать: 0 — год, 1 — день недели, 2 — секунды
WEEK_LANG 1 // язык дня недели: 0 — английский, 1 — русский (транслит)
DEBUG 0 // вывод на дисплей лог инициализации датчиков при запуске. Для дисплея 1602 не работает! Но дублируется через порт!
PRESSURE 1 // 0 — график давления, 1 — график прогноза дождя (вместо давления). Не забудь поправить пределы гроафика
CO2_SENSOR 1 // включить или выключить поддержку/вывод с датчика СО2 (1 вкл, 0 выкл)
DISPLAY_TYPE 1 // тип дисплея: 1 — 2004 (большой), 0 — 1602 (маленький)
DISPLAY_ADDR 0x27 // адрес платы дисплея: 0x27 или 0x3f. Если дисплей не работает — смени адрес! На самом дисплее адрес не указан
// пределы отображения для графиков
TEMP_MIN 15
TEMP_MAX 35
HUM_MIN 0
HUM_MAX 100
PRESS_MIN -100
PRESS_MAX 100
CO2_MIN 300
CO2_MAX 2000
FAQ
Основные вопросы
В: Как скачать с этого грёбаного сайта?
О: На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP
В: Скачался какой то файл .zip, куда его теперь?
О: Это архив. Можно открыть стандартными средствами Windows, но думаю у всех на компьютере установлен WinRAR, архив нужно правой кнопкой и извлечь.
В: Я совсем новичок! Что мне делать с Ардуиной, где взять все программы?
О: Читай и смотри видос http://alexgyver.ru/arduino-first/
В: Вылетает ошибка загрузки / компиляции!
О: Читай тут: https://alexgyver.ru/arduino-first/#step-5
В: Сколько стоит?
О: Ничего не продаю.
Вопросы по этому проекту
Полезная информация
Источник: https://github.com/AlexGyver/MeteoClock