Добрый день.
Вашему вниманию представляю метеостанцию состоящую из датчиков температуры и влажности 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)