Skip to content
Home » Ilmajaam ülesanne konspekt

Ilmajaam ülesanne konspekt


Tehtud näidisülesanded

5.1 Katse LCD ekraani kasutamine

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);

}

Uuritud funktsioonid

#include <LiquidCrystal.h>

  • Lisab LiquidCrystal teegi, mis võimaldab suhelda LCD-ekraaniga (nt 16×2 märgiga ekraan).

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

  • Loob lcd-nimelise objekti, mis määrab, millised Arduino pinnid on ühendatud LCD-ekraani vastavate juhtmetega:
    • (RS, E, D4, D5, D6, D7)

lcd.begin(16, 2);

  • Algväärtustab LCD-ekraani, öeldes, et sellel on 16 veergu ja 2 rida.

lcd.createChar(positsioon, sümbol)

  • Loob kasutaja sümboli:
    • positsioon – koht, kuhu sümbol salvestatakse (vahemikus 0–7)
    • sümbol – 8-bitine massiiv, mis kirjeldab sümboli kuju (5×8 pikslit)

Näited:

lcd.createChar(1, smiley);     // loob naerunäo
lcd.createChar(5, kass); // loob kassi

lcd.setCursor(veerg, rida);

  • Määrab kursori asukoha LCD-ekraanil:
    • veerg – 0 kuni 15
    • rida – 0 või 1 (vastavalt esimene või teine rida)

lcd.write(nr);

  • Kirjutab kasutaja loodud sümboli ekraanile, viidates selle positsioonile (createChar kaudu loodud sümbol).
    • Näide: lcd.write(5); kuvab ekraanile sümboli kass.

Serial.begin(9600);

  • Käivitab Serial Monitori suhtluse kiirusel 9600 bit/s.
  • Võimaldab kuvada andmeid arvutiekraanile, nt temperatuuri ja valguse väärtusi.

Temperatuuri ja pinge arvutus:

float voltage = (sensorTempVal / 1024.0) * 5.0;
float temperature = (voltage - 0.5) * 100;
  • Arvutab anduri toitepinge põhjal tegeliku temperatuuri kraadides (Celsius).
  • See kehtib LM35 tüüpi anduri puhul:
    • 10 mV / kraadi kohta, 0.5 V offset.

Serial.print() ja Serial.println()

  • Kuvavad teksti või muutuja väärtuse Serial Monitoris.
  • println() lisab rea lõppu uue rea, print() mitte.

Näited:

Serial.println("Temperatuur");
Serial.println(temperature);

lcd.clear();

  • Kustutab kogu ekraanilt näidatava info.

millis();

  • Tagastab aja millisekundites, mis on möödunud alates Arduino käivitamisest.
  • Selles koodis kasutatakse seda, aga tulemus pole salvestatud ega kasutuses (mittevajalik rida):
int aeg = millis();

Töö kirjeldus

Selle ülesande eesmärk on luua oma kujundatud mini-ilmajaam, mis kuvab andmete põhjal teavet LCD-ekraanil. Kasutades erinevaid andureid (nt temperatuurisensor, valgustundlik andur, kella moodul jne), kuvatakse reaalajas ilmastikutingimused, asjakohased laused ja vastavad pildid, mis võivad muutuda sõltuvalt ajast või mõõdetud andmetest.

Kasutatud komponeendid

  • LCD-ekraan (16×2)
  • Temperatuuriandur (TMP36)
  • Valguse andur (fototakisti)
  • Reaalaegne kell (millis() loendus)
  • Juhtmed (23 tk)
  • Takisti (2tk: 1tk 220 ohm, 1tk 10k ohm)
  • Potentsiomeeter (250 kOhm)
  • Arduino Uno plaat

Ühendamise skeem

Programm

#include<LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
int reply;
int sensorPinTemp=A0;
const int sensorPinValgus=A1;
const float baselineTemp=20.0;
int sensorValgusVal=0;
int ValgusVal=0;

void setup() {
  Serial.begin(9600);               // alustab serial suhtlust
  lcd.begin(16,2);                  // algväärtustab lcd ekraani suurusega 16x2
  lcd.setCursor(0,0);
  lcd.print("blessed");
  lcd.setCursor(0,1);
  lcd.print("Ilmajaam");
  delay(2000);                     // paus ekraani sõnumi lugemiseks
}

void loop() {
  int sensorTempVal=analogRead(sensorPinTemp);    // loeb temperatuurianduri väärtuse
  sensorValgusVal=analogRead(sensorPinValgus);   // loeb valgusanduri väärtuse
  float voltage=(sensorTempVal/1024.0)*5.0;       // teisendab analoogväärtuse pingeks
  float temperature=(voltage-.5)*100;             // arvutab temperatuuri vastavalt anduri valemile
  Serial.println("Temperatuur");
  Serial.println(temperature);
  Serial.print("Valgus pin: ");
  Serial.println(sensorValgusVal);
  ValgusVal=sensorValgusVal/4;                     // skaleerib valgusanduri väärtuse väiksemaks
  Serial.print("Uus valgus pin: ");
  Serial.println(ValgusVal);
  
  lcd.clear();                                    // tühjendab ekraani
  lcd.setCursor(0,0);
  lcd.print("Temp: ");
  lcd.setCursor(6,0);
  lcd.print(temperature);
  lcd.setCursor(0,1);
  lcd.print("Nahtavus: ");
  lcd.setCursor(10,1);
  int aeg = millis();                             // aeg alates seadme käivitamisest (praegu kasutamata)
  
  if(ValgusVal<100)                              // kuvab ilmaolusid vastavalt valguse tasemele
  {
    lcd.print("Pilves");
  }
  else if (ValgusVal>=100 && ValgusVal <=220)
  {
    lcd.print("Osaline");
  }
  else
  {
    lcd.print("Selge");
  }
  
  delay(5000);                                   // paus enne järgmise lugemise algust
}

Video

Kasutamisvõimalused tavaelus

1. Kodune ilmajaam

Eesmärk: Jälgida temperatuuri ja valguse taset toas, rõdul või kasvuhoones.
Kasu:

  • Aitab teada, millal on liiga külm või palav.
  • Näitab, kui palju valgust on (nt hommikul kuvatakse: „Pilves“ → „Selge“).

2. Automaatne kardinate või valgustuse juhtimine

Eesmärk: Juhtida kardinaid või lampe vastavalt valgustasemele.
Kuidas:

  • Kui „Pilves“ – lülita tuli automaatselt sisse.
  • Kui „Selge“ – lülita tuli välja.

3. Näidik ettevõtte fuajees või kontoris

Eesmärk: Näidata külalistele või töötajatele ruumi ilmaolusid.
Kasu:

  • Interaktiivne ja visuaalne info nurk.
  • Saab lisada näiteks ka kellaaja või õhuniiskuse andurid.