Katse 1

Projekti jaoks on vaja:
- 1 x 1602 LCD ekraan
- 1 x potentsiomeeter
- 16 x isane-isane juhtmed
- 1 x 330 Ω takisti
Ühenda LCD ekraan Arduino külge ja kasuta näidisprogrammi File → Examples → LiquidCrystal → HelloWorld. Muuda koodis rida lcd.print("hello, world!");, asendades «world» oma nimega. Lae kood plaadile – ekraanil peaks ülal olema tekst “hello, [sinu nimi]” ja all sekundiloendur.
Kui ekraanil ei ilmu midagi, keera potentsiomeeter vasakule maksimaalse kontrastsuse saavutamiseks ja kontrolli ühendusi, eriti A ja K pingejuhtmeid.
Pärast seda saad proovida liikuvat pilti näite kaudu CustomCharacter. LCD koosneb 32 lahtrist (5×8 pikslit igaüks), kus pilt kuvatakse 8-baidiliste jada kaudu. Näites on kujutatud poiss ja tüdruk, kes saadavad südameid ja naerunägusid.
Для проекта нужны:
- 1 x LCD экран 1602
- 1 x потенциометр
- 16 x проводов (папа-папа)
- 1 x резистор 330 Ом
Подключите LCD экран к Arduino и откройте пример File → Examples → LiquidCrystal → HelloWorld. Замените в коде строку lcd.print("hello, world!");, вставив вместо «world» своё имя. После загрузки на экране появится “hello, [ваше имя]” и счётчик секунд.
Если экран ничего не показывает — поверните потенциометр влево для контраста и проверьте подключения, особенно контакты A и K (подсветка).
Далее можно попробовать создать движущееся изображение, используя пример CustomCharacter. Экран состоит из 32 ячеек (по 5×8 пикселей), картинка формируется байтовыми шаблонами. В примере мальчик и девочка обмениваются сердцами и смайликами.
kood
// 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);
}
Katse 2
Kasutuskomponendid:
- Arduino Uno
- millis() funktsioon sisemise taimerina
Mis on millis()?
See on Arduino funktsioon, mis tagastab aja millisekundites alates plaadi käivitamisest. 1000 ms = 1 sekund. Seda saab kasutada lihtsa tööaja jälgimiseks ilma välist kellamoodulit kasutamata.
Mida see kood teeb?
- Salvestab aja, mil töö algas (
algusAeg) - Arvutab pidevalt, kui kaua Arduino on töötanud (kestus)
- Kuvab töö kestuse Serial Monitoris formaadis HH:MM:SS
- Uuendab aega iga sekund (kasutab
delay(1000))
Piirangud:
- Ei kuva tegelikku kellaaega ega kuupäeva
- Aeg nullitakse, kui Arduino taaskäivitub
Ülesanne 5 Interaktiivne infoekraan «Ilmajaam»
Kasutatud komponendid
- 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.
- Breadboard ja juhtmed – ühendavad kõik komponendid omavahel.
Kuidas see töötab?
tekstsõnum, mis vaheldub iga 5 sekundi järel.
Sensorite lugemine:
TMP36 annab analoogsignaali vastavalt temperatuurile. Arduino loeb selle pordi A1 kaudu ja teisendab kraadideks Celsiuse järgi.
Fotoresistor muudab takistust vastavalt valguse hulgale. Arduino loeb pordi A0 kaudu valgustugevuse väärtuse.
Andmete töötlemine:
Koodis arvutatakse temperatuur ja valgustugevus.
Vastavalt nendele väärtustele valitakse sobiv ikoon (päike, pilv, vihm, lumi või kell).
Ekraani uuendamine:
LCD-ekraanil kuvatakse:
temperatuur °C-s,
kellaaeg (ajast, mil süsteem käivitus),
ikoon vastavalt ilmaoludele,
skeem

Kood
#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[] = {
"Sunny day!",
"Cloudy",
"Maybe rain",
"Cold outside",
"Nice weather",
"Weather Station"
};
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(" Weather Station");
lcd.setCursor(0, 1);
lcd.print(" Loading...");
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("Time:");
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:
