| Ваш IP: 3.234.245.125 | Online(33) - гости: 20, боты: 13 | Загрузка сервера: 2.06 ::::::::::::


Домашняя метеостанция (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

Комментарии

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

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

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

  • Цветовая маркировка отечественных транзисторов

    КТ203 КТ502 КТ3102 КТ339 КТ342 КТ503 КТ326 КТ632 КТ313КТ368 КП364 КТ309 КТ345 КТ349 КТ352 КТ337 КТ350КТ326 КТ645 КТ354 КТ3107 КТ363 Из-за многообразия радиокомпонентов и их малых размеров сложно определить по корпусу даже тип транзистора. В одинаковых корпусах выпускают самые разные транзисторы, отличить их друг от друга помогает цветовая маркировка. Так, …Подробнее...
  • Простой дверной звонок

    Простой дверной звонок

    На рис.1 показана очень простая схема, на не дефицитных деталях, дверного звонка, исполняющего мелодию из 8-ми звуков. Основа автомата являются генератор (DD1.1, DD1.2) и транзистор VT1. Генератор вырабатывает импульсы, частота которых зависит от параметров R1 и C1. Импульсы от генератора поступают на счетчик (DD2.1.DD3.2). К прямым выходам триггеров подключена цепочка …Подробнее...
  • Пятиполосный эквалайзер на КА22234

    Пятиполосный эквалайзер на КА22234

    На рисунке показана схема двухканального пятиполосного эквалайзера на микросхеме КА22234 (аналог BA3822L). Частоты регулирования: 100, 300, 1000, 3000, 10000 Гц. Основные характеристики эквалайзера: Минимальное напряжение питания 3,5 В. Максимальное напряжение питания 14В Ток покоя 7 мА Частотный диапазон от 20 Гц до 20 кГц Входное сопротивление 16К КНИ не более 0,1% Максимальное …Подробнее...
  • Система пространственного звучания

    Система пространственного звучания очень проста и позволяет получить псевдо-квадро эффект из стереофонического сигнала. Суть схемы состоит во временнной задержки тылового сигнала относительно фронтального. Система не имеет активных элементов и подключается напрямую к выходу УМЗЧ. Глубину задержки сигнала, а значит и объем звучания можно регулировать при помощи сопротивления R1.Подробнее...
  • Высококачественный предварительный усилитель

    Высококачественный предварительный усилитель

    Характеристики: Коэффициент гармоник в диапазоне частот от 20 до 20000Гц не более 0,02% Отношение сигнал/шум -90дБ Диапазон регулировки громкости и тембра(60…16000Гц) соответственно 60 и +/-10дБ Переходное затухание между каналами в диапазоне частот 100…10000Гц не менее 50 дБ Входное и выходное сопротивление соответственно 220 и 3кОм Напряжение питания +/-5…16,5В Мостовой регулятор …Подробнее...