Напомним, что набор "Метеостанция" вы можете приобрести в нашем магазине, здесь

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

Для удобства, мы собрали все необходимые библиотеки для работы метеостанции здесь.


Необходимые компоненты
• плата для прототипирования;
• Arduino Nano;
• RGB светодиод;
• LCD экран;
• модуль часов DS1302;
• датчик влажности DHT11;
• провода;
• резистор 220 Ом.


Схема подключения


Рис. П5.1. Схема подключения компонентов метеостанции

 

 

Порядок подключения

  1. Выводы LCD экрана GND, VCC, SDA, SCL подключаем к GND, 5V, А4, А5 Arduino, соответственно.
  2. Выводы часов DS1302 VCC, CLK, DAT, RST подключаем к GND, D2, D3, D4 Arduino, соответственно.
  3. Выводы датчика DHT11 VCC, DATA, GND, подключаем к 5V, D10, GND Arduino соответственно.
  4. Подключите самую длинную ножку светодиода (анод) к 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 мм в шарике для пин-понга, крест на крест, для того, чтобы вставить в него светодиод. И в конце проденьте светодиод через круглое отверстие в крышке, установите крышку, наденьте шарик на светодиод и закрепите шарик в отверстии.