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