Interaktiivne infoekraan “Ilmajaam”

  • 📟 LCD-ekraan (16×2 või 20×4)
  • 🌡️ Temperatuuriandur (nt TMP36 või DHT11)
  • 🌞 Valguse andur (fototakisti)
  • ⏰ Reaalaegne kell (nt RTC DS3231 või millis() loendus)
  • 🖼️ Vähemalt 5 lauset ja 5 pilti, mis vahelduvad ajaliselt või sõltuvalt anduritest
  • 💡 Ilmajaama nimi kuvatakse ekraanil
  • 💬 Soovi korral: reklaamtekst või naljakas sõnum aeg-ajalt

Töö kirjeldus:

Näita LCD ekraanil lause või seisukord väljas (temperatuur)

Komponendid:

Arduino Uno
Arendusplaat

Potentsioometr 1tk
LCD ekraan 1602
Temperatuuri andur TMP
Takisti 220 Om
Juhtmed 19 tk

#include <LiquidCrystal.h>
 
// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
const int tempPin = A1;
const int ldrPin = A0;
 
unsigned long previousMillis = 0;
const long interval = 5000;
 
byte sun[8] = {
  0b00100,
  0b10101,
  0b01110,
  0b11111,
  0b01110,
  0b10101,
  0b00100,
  0b00000
};
 
byte cloud[8] = {
  0b00000,
  0b01100,
  0b10110,
  0b11111,
  0b11111,
  0b01110,
  0b00000,
  0b00000
};
 
byte moon[8] = {
  0b00011,
  0b00110,
  0b01100,
  0b11000,
  0b11000,
  0b01100,
  0b00110,
  0b00011
};
 
void setup() {
  lcd.begin(16, 2);
  lcd.createChar(0, sun);
  lcd.createChar(1, cloud);
  lcd.createChar(2, moon);
 
  Serial.begin(9600);
 
  lcd.setCursor(0, 0);
  lcd.print("Ilmajaam alustab");
  lcd.setCursor(0, 1);
  lcd.print("Laen andmeid...");
  delay(3000);
  lcd.clear();
}
 
void loop() {
  unsigned long currentMillis = millis();
   
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
 
    int tempRaw = analogRead(tempPin);
    float voltage = tempRaw * (5.0 / 1023.0);
    float temperature = (voltage - 0.5) * 100.0;
 
    int ldrValue = analogRead(ldrPin);
 
    Serial.print("Temp: ");
    Serial.print(temperature);
    Serial.print(" C | Valgus: ");
    Serial.println(ldrValue);
 
    lcd.clear();
 
    lcd.setCursor(0, 0);
    if (ldrValue > 935) {
      lcd.print("Paikseline");
      lcd.setCursor(13, 0);
      lcd.write(byte(0)); // <img draggable="false" role="img" class="emoji" alt="☀️" src="https://s.w.org/images/core/emoji/15.1.0/svg/2600.svg">
    } else if (ldrValue > 925) {
      lcd.print("Pilvine");
      lcd.setCursor(13, 0);
      lcd.write(byte(1)); // <img draggable="false" role="img" class="emoji" alt="☁️" src="https://s.w.org/images/core/emoji/15.1.0/svg/2601.svg">
    } else {
      lcd.print("Oö / Kuu");
      lcd.setCursor(13, 0);
      lcd.write(byte(2)); // <img draggable="false" role="img" class="emoji" alt="🌙" src="https://s.w.org/images/core/emoji/15.1.0/svg/1f319.svg">
    }
 
    lcd.setCursor(0, 1);
    lcd.print("Temp: ");
    lcd.print(temperature, 1);
    lcd.print((char)223);
    lcd.print("C");
  }
}

ru_RUРусский