Добрый день.
Вашему вниманию представляю метеостанцию состоящую из датчиков температуры и влажности DHT-11, давления BMP085, часов реального времени RTC1307, и работающая от USB зарядника мобильного телефона.
Вывод данных осуществляется на переделанный модуль TM1637, был заменен штатный маленький индикатор 0,36" красного свечения, на 0,56" Green
штатный индикатор имел только разделительное : , на новом же имеется 4 разделительные точки
Все подключения понятны из текста скетча, библиотеки можно легко найти в сети.
Фото
Скетч
#include "TM1637.h"
// знак градус B01100011 = 0x63 hex
// буква H. B11110110 = 0xF6 hex
// точка 0b10000000 = 0x80 hex
// dp-G-F-E-D-C-B-A BIN
// A
// F B
// G
// E C
// D
#define CLK 11 // Пины подключения TM1637
#define DIO 12
TM1637 tm1637(CLK,DIO);
int8_t DigTime[] = {8, 8, 8, 8}; // проверка сегментов LED индикатора
#include <DHT.h>
#define DHTTYPE DHT11 // тип датчика влажности DHT22 (AM2302)/DHT11
#define DHTPIN A2 // пин подключения датчика влажности DHT22
DHT dht(DHTPIN, DHTTYPE);
#include <DS1307.h>
DS1307 rtc(SDA, SCL); // пины RTC для UNO A4, A5
Time t;
#include <Wire.h>
#include <BMP085.h>
BMP085 bmp = BMP085();
long Temperature = 0, Pressure = 0;
// Подключение Датчика давления
// Arduino Uno - BMP180
// Any Arduino pins labeled: SDA SCL
// Uno, Redboard, Pro: A4 A5
#define Pause 10000 // 10 сек
void setup(){
// Инициализация датчика BMP180
Wire.begin();
delay(1000);
bmp.init();
tm1637.init();
tm1637.set(BRIGHTEST);
//BRIGHT_TYPICAL = 2, BRIGHT_DARKEST = 0, BRIGHTEST = 7
tm1637.clearDisplay();
tm1637.display(DigTime);
delay(1500);
dht.begin(); // Подключаем сенсор DHT
delay(1000);
// Initialize the rtc object
rtc.begin();
// Set the clock to run-mode
rtc.halt(false);
}
void loop(){
t = rtc.getTime(); // зависает без команды rtc.begin();
int hour = t.hour;
int minute = t.min;
DigTime[3] = minute %10 ;
tm1637.display(3,DigTime[3]);
DigTime[2] = (minute % 100) / 10 ;
tm1637.display(2,DigTime[2]);
DigTime[1] = hour % 10 ;
tm1637.point(POINT_ON); // включаем точку
tm1637.display(1,DigTime[1]);
DigTime[0] = (hour % 100) / 10 ;
tm1637.point(POINT_OFF); // выключаем точку
tm1637.display(0,DigTime[0]);
// tm1637.display(DigTime);
delay(Pause);
int humidity = dht.readHumidity();
int temp = dht.readTemperature();
int digitT1 = temp / 10;
int digitT2 = temp % 10;
int digitH1 = humidity / 10;
int digitH2 = humidity % 10;
tm1637.display(0,17); // " "
tm1637.display(1,digitT1);
tm1637.display(2,digitT2);
tm1637.display(3,12); // 12 код буквы C, меняем на знак градуса 0x63 в файле TM1637.cpp см. выше шапку
delay (Pause);
tm1637.display(0,17); // " "
tm1637.display(1,digitH1);
tm1637.display(2,digitH2);
tm1637.display(3,15); // 15 код буквы F, меняем на H.
delay(Pause);
bmp.getPressure(&Pressure);
tm1637.display(Pressure/133.3); //Выводим давление в мм.рт ст
tm1637.display(3,17); // " "
delay(Pause);
bmp.getTemperature(&Temperature);
tm1637.display(Temperature*0.1); // Температуру в градусах Цельсия
tm1637.display(2,12); // значок градус
tm1637.display(3,17); // " "
delay(Pause);
}
Отредактировано Technik (2018-10-12 13:00:51)





