Напомним, что набор "Метеостанция" вы можете приобрести в нашем магазине, здесь.
Это заключительный проект, мы воспользуемся опытом предыдущих проектов и соберем метеостанцию с ночником.
Для удобства, мы собрали все необходимые библиотеки для работы метеостанции здесь.
Необходимые компоненты
• плата для прототипирования;
• Arduino Nano;
• RGB светодиод;
• LCD экран;
• модуль часов DS1302;
• датчик влажности DHT11;
• провода;
• резистор 220 Ом.
Схема подключения
Рис. П5.1. Схема подключения компонентов метеостанции
Порядок подключения
- Выводы LCD экрана GND, VCC, SDA, SCL подключаем к GND, 5V, А4, А5 Arduino, соответственно.
- Выводы часов DS1302 VCC, CLK, DAT, RST подключаем к GND, D2, D3, D4 Arduino, соответственно.
- Выводы датчика DHT11 VCC, DATA, GND, подключаем к 5V, D10, GND Arduino соответственно.
- Подключите самую длинную ножку светодиода (анод) к 5V, ножки, зажигающие красный, синий и зеленый свет к D6, D9 и D11 Arduino соответственно
Программное обеспечение
Листинг П5.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS1302.h>
#include "DHT.h"
#define DHTPIN 10 // pin of DHT11
DHT dht(DHTPIN, DHT11);
int kCePin = 4; // Chip Enable (Reset)
int kIoPin = 3; // Input/Output (I/O)
int kSclkPin = 2; // Serial Clock (SCKL)
int REDpin = 9;
int GREENpin = 6;
int BLUEpin = 11;
DS1302 rtc(kCePin, kIoPin, kSclkPin);
LiquidCrystal_I2C lcd(0x27,16,2); // 0x20..0x27 Adress
unsigned long memTime;
int bzzPin = 9;
void rtcsettime(int _h, int _m, int _s){
rtc.halt(true);
rtc.writeProtect(false);
rtc.hour(_h);
rtc.minutes(_m);
rtc.seconds(_s);
rtc.halt(false);
}
void HumTempRead(){
float hum = dht.readHumidity();
float temp = dht.readTemperature();
if (isnan(hum) || isnan(temp)) {
Serial.println("Failed to read from DHT sensor!");
lcd.setCursor(0, 1);
lcd.print("H=--% T=---");
lcd.setCursor(11, 1);
lcd.print((char)223);
lcd.setCursor(12, 1);
lcd.print("C ");
}else {
lcd.setCursor(0, 1);
lcd.print("H=");
lcd.setCursor(2, 1);
lcd.print(hum);
lcd.setCursor(4, 1);
lcd.print("% T=+");
lcd.setCursor(9, 1);
lcd.print(temp);
lcd.setCursor(11, 1);
lcd.print((char)223);
lcd.setCursor(12, 1);
lcd.print("C ");
}
}
void setup_bzz(){
pinMode(bzzPin,OUTPUT);
}
void bzz(int _bzzTime){
tone(bzzPin, 2093, _bzzTime);
}
void setup(){
Serial.begin(9600);
dht.begin();
setup_bzz();
bzz(100);
// rtcsettime(0,50,0);
lcd.init();
lcd.backlight();
lcd.home();
lcd.setCursor(0, 0);
}
void loop(){
if (rtc.hour() < 10){
lcd.setCursor(8, 0);
lcd.print("0");
lcd.setCursor(9, 0);}
else {
lcd.setCursor(8, 0);
}
lcd.print(rtc.hour());
lcd.setCursor(10, 0);
lcd.print(":");
if (rtc.minutes() < 10){
lcd.setCursor(11, 0);
lcd.print("0");
lcd.setCursor(12, 0);}
else {
lcd.setCursor(11, 0);
}
lcd.print(rtc.minutes());
lcd.setCursor(13, 0);
lcd.print(":");
if (rtc.seconds() < 10){
lcd.setCursor(14, 0);
lcd.print("0");
lcd.setCursor(15, 0);}
else {
lcd.setCursor(14, 0);
}
lcd.print(rtc.seconds());
if ((millis() - memTime > 2000)or(millis() < memTime)){ //DHT11 1 time each 2 seconds
HumTempRead();
memTime = millis();
}
delay(100);
{
for(int value = 0 ; value <= 255; value +=1) {
analogWrite(REDpin, value);
analogWrite(GREENpin, 255-value);
analogWrite(BLUEpin, 255);
delay(30);
}
for(int value = 0 ; value <= 255; value +=1) {
analogWrite(REDpin, 255);
analogWrite(GREENpin, value);
analogWrite(BLUEpin, 255-value);
delay(30);
}
for(int value = 0 ; value <= 255; value +=1) {
analogWrite(REDpin, 255-value);
analogWrite(GREENpin, 255);
analogWrite(BLUEpin, value);
delay(30);
}
}
}
Внимание!
Данный скетч предполагает что ваш модуль часов DS1302 был ранее настроен на актуальную дату/время, в случае если часы не настроены, то воспользуйтесь уроком «Часы» для того чтобы их настроить.
После того, как вы собрали метеостанцию на плате прототипирования и она заработала, перенесите её в пластиковый корпус. Сперва отклейте с платы прототипирования защитный слой и приклейте её к нижней крышке корпуса, затем вставьте экран в лицевую панель, и соберите стенки, вставив их в отверстия в основании. Затем, канцелярским ножом, аккуратно сделайте два надреза по 4-5 мм в шарике для пин-понга, крест на крест, для того, чтобы вставить в него светодиод. И в конце проденьте светодиод через круглое отверстие в крышке, установите крышку, наденьте шарик на светодиод и закрепите шарик в отверстии.