| Ваш IP: 18.206.16.123 | Online(48) - гости: 15, боты: 33 | Загрузка сервера: 0.54 ::::::::::::


Домашняя метеостанция (Nokia 5110 LCD)(Arduino)

На основе недорогих модулей можно собрать простую домашнюю метеостанцию, в качестве индикатора будет использовать модуль Nokia 5110 LCD.

Метеостанция имеет несколько датчиков (модулей):

  • BMP180 — датчик давления (мм.рт.ст) и температуры (измерение температуры в помещении)
  • 18B20 — цифровой датчик температуры (измерение температуры на улице)
  • DS3231 — часы реального времени
  • DHT11 — датчик влажности

BMP180

DHT11 DS3231 18B20

Подключение модулей к Arduino Nano или Uno:

  • Nokia 5110 LCD  — RST,CE,DC,DIN,CLK  (цифровые выходы Arduino 3,4,5,6,7). На вход VCC необходимо подавать питание 3,3 В, а на выход BL (подсветка) можно подавать питание 5 В через сопротивление 330 Ом или 3,3 В через сопротивление 200 Ом.
  • BMP-180 — напряжение питания (VIN) датчика 3,3 В, выходы SCL и SDA подключаются на цифровые выходы A5 (SCL) и A4 (SDA) платы Arduino.
  • 18B20 — на датчике имеется маркировка выводов: + — out, на вывод + подается питание 5 В, на — GND и out соответственно выход, который подключается к аналоговому входу Arduino A0.
  • DHT11 — напряжение питания датчика 5 В (VCC), выход DATA подключается к цифровому выходу 2 Arduino.
  • DS3231 — напряжение питания датчика 5 В (VCC),выходы SCL и SDA подключаются на цифровые выходы A5 (SCL) и A4 (SDA) платы Arduino.

Для успешной загрузки скетча Вам понадобятся следующие библиотеки:

  • DHT
  • DallasTemperature
  • OneWire
  • DS3231
  • pcd8544 — в библиотеке изменена нумерация подключения выводов, поэтому необходимо использовать именно эту библиотеку.
  • bmp085

После сборки уст-во практически не нуждается в настройке, единственное что придется сделать, это установить контрастность индикатора:

lcd.setContrast(60); // контрастность 0-127

#include <Wire.h> 
#include <SPI.h>
#include <DHT.h>
#include <BMP085.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <PCD8544.h>
 PCD8544 lcd; // RST,CE,DC,DIN,CLK   VCC,BL,GND (3,4,5,6,7   +3.3V,200 OM +3.3V, GND)
 DHT dht(2, DHT11); // выход DATA подключен к цыфровому входу 2
 DS3231 clock;RTCDateTime DateTime;
 OneWire oneWire(A0);// вход датчика 18b20
 DallasTemperature temp(&oneWire);
 BMP085 dps = BMP085(); 
 static const byte gradus[] = { B00000110,B00001001,B00001001,B00000110,B00000000 };// градус
 
 
long Temperature,Pressure;
int i;float t1,t2,p,h;
char * mes[12]{"Jan","Feb","Mar","Apr","May","June","July","Aug","Sep","Oct","Nov","Dec"};
char * den[7]{"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
 
void setup(void) { 
  Serial.begin(9600);Wire.begin();
  dht.begin();
  temp.begin(); temp.setResolution(10);//10 бит   
  clock.begin();
  dps.init(); 
  lcd.begin(84, 48); 
  lcd.createChar(0, gradus);
  lcd.setContrast(60);//  контрастность 0-127
  //  clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча 
}          
 
void loop(void) { 
  DateTime=clock.getDateTime();   // Считываем c часов текущие значения даты и времени в сущность DateTime
  dps.getPressure(&Pressure); 
  dps.getTemperature(&Temperature);
  temp.requestTemperatures();
 
  lcd.setCursor(0,0);
  lcd.print(clock.dateFormat("H:i:s",DateTime));// выводим часы, минуты 
  lcd.print("  ");for(i=0;i<7;i++){if(DateTime.dayOfWeek==i){lcd.print(den[i-1]);}}lcd.print(" ");// день недели
  lcd.setCursor(5,1);
  lcd.print(DateTime.day);lcd.print(" "); // дата
  for(i=0;i<12;i++){if(DateTime.month==i){lcd.print(mes[i-1]);}}lcd.print(" "); // месяц
  lcd.print(DateTime.year);lcd.print(" "); // год
 
  if((DateTime.second/10)%2==0){ // каждые 2 секунды опрос температуры, давления и влажности
  t1=Temperature*0.1;
  t2=temp.getTempCByIndex(0);
  p=Pressure/133.3;}
 
  lcd.setCursor(0,2);
  lcd.print("Temp 1:");if(t1>=0){lcd.print(" ");}if(t1>0&&t1<10||t1<0&&t1>-10){lcd.print(" ");}lcd.print(t1,1); lcd.write(0);lcd.print("C");
  lcd.setCursor(0,3);
 
  lcd.print("Temp 2:");if(t2>=0){lcd.print(" ");}if(t2>0&&t2<10||t2<0&&t2>-10){lcd.print(" ");}lcd.print(t2,1); lcd.write(0);lcd.print("C");
  lcd.setCursor(0,4);
  lcd.print("P ");lcd.print(p,1); // давление
  lcd.print(" H "); lcd.print(dht.readHumidity(),0);lcd.print(" %");// влажность
  lcd.setCursor(0,5); 
  lcd.print(" RCL-RADIO.RU ");
}

 


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

Коды английский букв и символы находятся в файле charset.cpp, который находится в папке библиотеки.

Скачайте и распакуйте архив charset.cpp.zip который содержит charset.cpp, и поместите его в папку библиотеки pcd8544.

Далее залейте в плату Arduino следующий скетч:

#include <Wire.h> 
#include <SPI.h>
#include <DHT.h>
#include <BMP085.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <PCD8544.h>
 PCD8544 lcd; // RST,CE,DC,DIN,CLK   VCC,BL,GND (3,4,5,6,7   +3.3V,200 OM +3.3V, GND)
 DHT dht(2, DHT11); // выход DATA подключен к цыфровому входу 2
 DS3231 clock;RTCDateTime DateTime;
 OneWire oneWire(A0);// вход датчика 18b20
 DallasTemperature temp(&oneWire);
 BMP085 dps = BMP085(); 
 static const byte gradus[] = { B00000110,B00001001,B00001001,B00000110,B00000000 };// градус
 
 
long Temperature,Pressure;
int i;float t1,t2,p,h;
char * mes[12]{"/)&",",e&","Map$","A;p","Ma]","^_)`","^_{`","A&}","Ce)","Ok$","Ho*","#ek"};
char * den[7]{"!o)","B$p","Cp(","'$&","!*$","C@[","Bck"};
 
void setup(void) { 
  Serial.begin(9600);Wire.begin();
  dht.begin();
  temp.begin(); temp.setResolution(10);//10 бит   
  clock.begin();
  dps.init(); 
  lcd.begin(84, 48); 
  lcd.createChar(0, gradus);
  lcd.setContrast(60);//  контрастность 0-127
  //  clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча 
}          
 
void loop(void) { 
  DateTime=clock.getDateTime();   // Считываем c часов текущие значения даты и времени в сущность DateTime
  dps.getPressure(&Pressure); 
  dps.getTemperature(&Temperature);
  temp.requestTemperatures();
 
  lcd.setCursor(0,0);
  lcd.print(clock.dateFormat("H:i:s",DateTime));// выводим часы, минуты 
  lcd.print("  ");for(i=0;i<7;i++){if(DateTime.dayOfWeek==i){lcd.print(den[i-1]);}}lcd.print(" ");// день недели
  lcd.setCursor(5,1);
  lcd.print(DateTime.day);lcd.print(" "); // дата
  for(i=0;i<12;i++){if(DateTime.month==i){lcd.print(mes[i-1]);}}lcd.print(" "); // месяц
  lcd.print(DateTime.year);lcd.print(" "); // год
 
  if((DateTime.second/10)%2==0){ // каждые 2 секунды опрос температуры, давления и влажности
  t1=Temperature*0.1;
  t2=temp.getTempCByIndex(0);
  p=Pressure/133.3;}
 
  lcd.setCursor(0,2);
  lcd.print("Te~;.;.");if(t1>=0){lcd.print(" ");}if(t1>0&&t1<10||t1<0&&t1>-10){lcd.print(" ");}lcd.print(t1,1); lcd.write(0);lcd.print("C");
  lcd.setCursor(0,3);
 
  lcd.print("Te~;.@.");if(t2>=0){lcd.print(" ");}if(t2>0&&t2<10||t2<0&&t2>-10){lcd.print(" ");}lcd.print(t2,1); lcd.write(0);lcd.print("C");
  lcd.setCursor(0,4);
  lcd.print("P ");lcd.print(p,1); // давление
  lcd.print(" H "); lcd.print(dht.readHumidity(),0);lcd.print(" %");// влажность
  lcd.setCursor(0,5); 
  lcd.print(" RCL-RADIO.RU ");
}

meteo_5110_1.ino.zip


meteo_5110_2.ino.zip

Комментарии

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Схемы включения биполярных транзисторов

    Транзистор трех электродный прибор, его электроды: эмиттер, коллектор и база. При использовании транзистора в качестве усилителя напряжения, тока или мощности входной сигнал надо подавать на два других электрода и с двух электродов снимать сигнал (усиленный сигнал), при этом один из электродов будет обязательно общим. Это обстоятельство (общий электрод) и определяет …Подробнее...
  • Преобразователь частота-напряжение

    Преобразователь частота-напряжение преобразует импульсы с частотой от 0 до 9кГц в постоянное напряжение от 0 до 9В. Основа преобразователя микросхема ТС9401. Входной сигнал амплитуда которого не должна превышать напряжение питания (10…15В) подается на разъем CON1. Напряжение питания подается на разъем CON3. D2 препятствует протеканию тока в случае перепутывания полярности. Установка …Подробнее...
  • Ультралинейный усилитель мощности на 100Вт

    Ультралинейный усилитель мощности на 100Вт

    На рисунке представлена схема усилителя мощности НЧ в полосе частот от 10 до 600000Гц на 100Вт. Схема: Т1 Т2 и Т3 Т4 — входной усилитель выполненный по дифференциальной схеме, Т5 — каскад предварительного усиления, Т6 Т7 и Т8 Т9 — оконечный каскад с бестрансформаторым выходом по схеме с дополнительной симметрией …Подробнее...
  • Простой УМЗЧ (3)

    Простой УМЗЧ (3)

    Особенность данного УМЗЧ то, что в нем работают 3 составных транзистора. Это привело к минимуму используемых элементов. Такое построение пред оконечного каскада на VT2 обеспечило его высокое входное сопротивление и значительный коэффициент усиления и низкий уровень искажений при отсутствии ООС. Дополнительно увеличить коэффициент усиления позволила цепь R6 C5, что позволило …Подробнее...
  • Шестнадцатеричный дешифратор на одной микросхеме

    Широкодоступных микросхем дешифраторов способных отображать на цифровом табло числа от 0 до 15 соответственно поступающим на входы кодам от 0000 до 1111 практически нет. Для того что бы построить данное устройство необходимо несколько микросхем для индикации на семисегментном табло, но используя дешёвую микросхему ПЗУ К155РЕ3 и запрограммировать ее, можно получить …Подробнее...