Teema 5 LCD ekraan

Katse 5.1 LCD ekraani kasutamine

Kasutatud komponendid:
1 x Arduino UNO plaat
1 x Arendusplaat
1 x 1602 LCD ekraan 
1 x potentsiomeeter 
16 x tavalised üksikud isane-isane juhtmed 
1 x 330 Ω takisti

// lisame LiquidCrystal library

#include <LiquidCrystal.h>

// määrame, milliste digitaalpesadega ekraan ühendatud on

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// loome erisümbolid

byte smiley[8] ={0b00000,0b00000,0b01010,0b00000,0b00000,0b10001,0b01110,0b00000};

byte armsDown[8] ={0b00100,0b01010,0b00100,0b00100,0b01110,0b10101,0b00100,0b01010};

byte armsUp[8] ={0b00100,0b01010,0b00100,0b10101,0b01110,0b00100,0b00100,0b01010};

byte kass[8] ={0b00000,0b00000,0b00000,0b10000,0b10011,0b11111,0b01110,0b01010};

byte tydruk[8] ={0b00100,0b01010,0b00100,0b11111,0b00100,0b00100,0b01110,0b11111};

byte v2ikesyda[8] ={0b00000,0b00000,0b00000,0b11011,0b11111,0b11111,0b01110,0b00100};

void setup() {

// algväärtustatakse LDC ekraani read ja veerud

lcd.begin(16, 2);

// defineerime erisümbolid

lcd.createChar(1, smiley);

lcd.createChar(3, armsDown);

lcd.createChar(4, armsUp);

lcd.createChar(5, kass);

lcd.createChar(6, tydruk);

lcd.createChar(7, v2ikesyda);

}

void loop() {

// koht kuhu hakkame joonistama - 3. veerg, esimene rida

lcd.setCursor(2, 0);

// joonistame kassi

lcd.write(5);

// ja tüdruku

lcd.write(6);

//muudame kursori asukohta: 2. rida 14. veerg

lcd.setCursor(13, 1);

// joonistame poisi

lcd.write(3);

delay(400);

//muudame kursori asukohta: 1. rida 5. veerg

lcd.setCursor(4, 0);

//joonistame for tsükli abil väikese pausiga 10 smaili

for (int koht = 0; koht < 10; koht++) {

lcd.write(1);

delay(400);

}

lcd.setCursor(13, 1);

lcd.write(4);

//loobime südameid

for (int koht = 13; koht >= 4; koht--) {

lcd.setCursor(koht, 0);

lcd.write(7);

delay(400);

  }

delay(400);

}

Kuidas kood töötab:
ee kood Arduino jaoks haldab LCD-ekraani LiquidCrystal raamatukogu abil. Ekraanil luuakse sümbolid, kus poiss saadab südameid tüdrukule, kes seisab kassi kõrval, ning tüdruk reageerib omakorda emotikonidega.
Uued funktsioonid:

1.lcd.begin(cols, rows) – initsialiseerib LCD-ekraani määratud veergude ja ridade arvuga.
2.lcd.createChar(num, data) – loob kohandatud sümboli, kus num on ID (0–7) ja data on baitide massiiv.
3.lcd.setCursor(col, row) – seab kursori asukoha LCD-ekraanil, kuhu järgnev tekst/sümbol kuvatakse.
4.lcd.write(value) – kuvab sümboli LCD-ekraanile, näiteks kohandatud sümboli ID.

Kuidas elus kasutada:
Seda saab kasutada koolides ja õppeasutustes kontrolltöödeks, kus pärast testi teeb tehisintellekt töö hindamise ja kuvab ekraanil testi tulemuse.

Ülesanne 5 Interaktiivne infoekraan “Ilmajaam”

Kasutatud komponendid

Breadboard ja juhtmed – ühendavad kõik komponendid omavahel.
Arduino Uno – mikrokontroller, mis juhib kogu süsteemi.
LCD-ekraan 16×2 – näitab temperatuuri, valgustugevust, ikooni ja tekstsõnumit.
TMP36 temperatuurisensor – mõõdab ümbritsevat temperatuuri (ühendatud A1 pin’ile).
Fotoresistor (valgussensor) – mõõdab valguse tugevust (ühendatud A0 pin’ile).
Takistid – piiravad voolu, et kaitsta sensoreid ja tagada täpsemad mõõtmised.

Kuidas süsteem töötab?

Tekstsõnumid:
Iga 5 sekundi järel kuvatakse LCD-ekraanil uus ilmaolusid kirjeldav sõnum.

Sensorite andmete lugemine:

  • TMP36 temperatuuriandur saadab analoogsignaali, mis muutub vastavalt ümbritsevale temperatuurile. Arduino loeb seda A1 pordi kaudu ja teisendab väärtuse Celsiuse kraadideks.
  • Fotoresistor mõõdab valguse intensiivsust, muutes takistust vastavalt valguse hulgale. Selle väärtust loetakse A0 pordi kaudu.

Andmete analüüs:
Arduino arvutab hetketemperatuuri ja valgustaseme. Nende väärtuste põhjal valitakse vastav sümbol: päike, pilv, vihm, lumi või kell.

Ekraani sisu uuendamine:
LCD-ekraanil kuvatakse korraga:

  • Temperatuur kraadides Celsiuse järgi
  • Sümbol vastavalt ilmastikuoludele
  • Aeg (sekundites ja minutites alates süsteemi käivitamisest)
  • Tekstsõnum, mis kirjeldab ilma
#include <LiquidCrystal.h>
 
// LCD pin connections: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
// Sensor pins
#define TMP36_PIN A1
#define LIGHT_SENSOR_PIN A0
 
// Custom icons
byte sunIcon[8] = {
  0b00000,
  0b10101,
  0b01110,
  0b11011,
  0b01110,
  0b10101,
  0b00000,
  0b00000
};
 
byte cloudIcon[8] = {
  0b00000,
  0b00000,
  0b01110,
  0b11111,
  0b11111,
  0b00000,
  0b00000,
  0b00000
};
 
byte rainIcon[8] = {
  0b00000,
  0b00100,
  0b01110,
  0b11111,
  0b00100,
  0b01100,
  0b11000,
  0b10000
};
 
byte snowIcon[8] = {
  0b00000,
  0b00100,
  0b01010,
  0b10001,
  0b01010,
  0b00100,
  0b00000,
  0b00000
};
 
byte clockIcon[8] = {
  0b00000,
  0b01110,
  0b10001,
  0b10101,
  0b10111,
  0b10001,
  0b01110,
  0b00000
};
 
// Messages
const char* messages[] = {
  "Paikeseline ilm!",
  "Pilvine",
  "Voimalik vihm",
  "Kulm",
  "Hea ilm",
  "Ilma Jaam"
};
 
unsigned long lastUpdate = 0;
int messageIndex = 0;
unsigned long startTime = 0;
 
void setup() {
  lcd.begin(16, 2);
 
  lcd.createChar(0, sunIcon);
  lcd.createChar(1, cloudIcon);
  lcd.createChar(2, rainIcon);
  lcd.createChar(3, snowIcon);
  lcd.createChar(4, clockIcon);
 
  lcd.print("Ilma jaam");
  lcd.setCursor(0, 1);
  lcd.print("Laadimine");
  delay(2000);
  lcd.clear();
 
  startTime = millis();
}
 
float getTemperature() {
  int reading = analogRead(TMP36_PIN);
  float voltage = reading * 5.0 / 1024.0;
  return (voltage - 0.5) * 100.0;
}
 
void updateDisplay(float temp, int light, unsigned long elapsed) {
  lcd.clear();
 
  // Top line: temperature + icon
  lcd.setCursor(0, 0);
  lcd.print("T:");
  lcd.print(temp, 1);
  lcd.write(223); // degree symbol
  lcd.print("C:");
 
  if (temp > 25 && light > 500) lcd.write(byte(0)); // sun
  else if (temp < 5) lcd.write(byte(3));            // snow
  else if (light < 300) lcd.write(byte(1));         // cloud
  else if (temp > 18 && light < 500) lcd.write(byte(2)); // rain
  else lcd.write(byte(4));                          // clock
 
  lcd.setCursor(9, 0);
  lcd.print("Aeg:");
  int mins = (elapsed / 60) % 60;
  int secs = elapsed % 60;
  if (mins < 10) lcd.print("0");
  lcd.print(mins);
  lcd.print(":");
  if (secs < 10) lcd.print("0");
  lcd.print(secs);
 
  // Bottom line: weather message
  lcd.setCursor(0, 1);
  lcd.print(messages[messageIndex]);
}
 
void loop() {
  unsigned long now = millis();
  float temp = getTemperature();
  int light = analogRead(LIGHT_SENSOR_PIN);
  unsigned long elapsed = (now - startTime) / 1000;
 
  if (now - lastUpdate >= 5000) {
    lastUpdate = now;
    messageIndex = (messageIndex + 1) % 6;
  }
 
  updateDisplay(temp, light, elapsed);
  delay(1000);
}

Video:
https://drive.google.com/file/d/1QWRUIpIZbi3IfBfMIdGhX0W_My97gPTV/view?usp=sharing