Katse 5

LCD ekraani kasutamine

Kasutatud komponendid:

1 x 1602 LCD ekraan 

1 x potentsiomeeter 

16 x tavalised üksikud isane-isane juhtmed 

1 x 330 Ω takisti

Skeem:

Kood:

// Подключаем библиотеку для работы с LCD экраном
#include <LiquidCrystal.h>
 
// Создаём объект lcd и указываем, к каким пинам Arduino подключён дисплей (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
// Определяем массивы байтов, представляющих пользовательские символы
 
// Смайлик
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() {
  // Инициализация LCD дисплея с 16 столбцами и 2 строками
  lcd.begin(16, 2);
 
  // Загружаем пользовательские символы в память дисплея
  lcd.createChar(1, smiley);      // символ с кодом 1
  lcd.createChar(3, armsDown);    // символ с кодом 3
  lcd.createChar(4, armsUp);      // символ с кодом 4
  lcd.createChar(5, kass);        // символ с кодом 5 (кот)
  lcd.createChar(6, tydruk);      // символ с кодом 6 (девочка)
  lcd.createChar(7, v2ikesyda);   // символ с кодом 7 (сердце)
}
 
void loop() {
  // Устанавливаем курсор на 3-й столбец (нумерация с 0), 1-ю строку
  lcd.setCursor(2, 0);
 
  // Отображаем кота
  lcd.write(5);
 
  // Отображаем девочку
  lcd.write(6);
 
  // Устанавливаем курсор на 14-й столбец, 2-ю строку
  lcd.setCursor(13, 1);
 
  // Отображаем мальчика с опущенными руками
  lcd.write(3);
 
  // Ждём 400 миллисекунд
  delay(400);
 
  // Перемещаем курсор на 5-й столбец, 1-ю строку
  lcd.setCursor(4, 0);
 
  // Рисуем 10 смайликов с задержкой
  for (int koht = 0; koht < 10; koht++) {
    lcd.write(1);     // рисуем смайлик
    delay(400);       // ждём 400 мс
  }
 
  // Перемещаем курсор обратно на позицию мальчика
  lcd.setCursor(13, 1);
 
  // Показываем мальчика с поднятыми руками
  lcd.write(4);
 
  // Анимация "полет сердца" от мальчика к девочке
  for (int koht = 13; koht >= 4; koht--) {
    lcd.setCursor(koht, 0);  // перемещаем курсор от мальчика к девочке
    lcd.write(7);            // рисуем сердце
    delay(400);              // задержка
  }
 
  delay(400); // финальная задержка перед повтором
}

Kasutamisvõimalused igapäevaelus:

1)Kellad või stopperid

2)Interaktiivsed mänguasjad või õppevahendid

3)Kodumasinad oma kätega (köögikellad, kaalud, kohvimasinad)

Töö kestus milles() abil

Kasutatud komponendid:

Arduino Uno

Skeem:

Tulemus:

Kood:

// Объявляем переменные для хранения времени начала и продолжительности
unsigned long algusAeg;
unsigned long kestus;
 
void setup() {
  Serial.begin(9600);          // Инициализируем последовательную связь на скорости 9600 бод
  algusAeg = millis();         // Сохраняем текущее время как время начала работы
  Serial.println("Töö algas!"); // Выводим сообщение: "Работа началась!"
}
 
void loop() {
  kestus = millis() - algusAeg; // Вычисляем, сколько времени прошло с начала (в миллисекундах)
 
  // Переводим миллисекунды в секунды
  unsigned long sekundid = kestus / 1000;
 
  // Вычисляем часы, минуты и секунды из общего количества секунд
  unsigned int tunnid = sekundid / 3600;               // часы = всего секунд / 3600
  unsigned int minutid = (sekundid % 3600) / 60;        // минуты = остаток от часов / 60
  unsigned int sek = sekundid % 60;                     // секунды = остаток от 60
 
  // Выводим время в формате ЧЧ:ММ:СС
  Serial.print("Töö kestus: ");                         // "Продолжительность работы: "
 
  if (tunnid < 10) Serial.print('0');                   // Добавляем ведущий 0 для часов, если меньше 10
  Serial.print(tunnid);
  Serial.print(':');
 
  if (minutid < 10) Serial.print('0');                  // Ведущий 0 для минут
  Serial.print(minutid);
  Serial.print(':');
 
  if (sek < 10) Serial.print('0');                      // Ведущий 0 для секунд
  Serial.println(sek);
 
  delay(1000); // Пауза 1 секунда перед следующим обновлением
}

Kasutamisvõimalused igapäevaelus:

1)Seadme taimer
2)Ajaarvestus
3)Aja jälgimine mängudes või treeningutes

Ülesanne 5 Interaktiivne infoekraan «Ilmajaam»

Kasutatud komponendid:

  •  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

Kasutatud komponeendid:

Arduino Uno

LCD Ekraan

Fotoristor

Arendusplaat

220Ω takisti

Juhtmed

Skeem:

Töö protsess:

Imporditakse LiquidCrystal-raamatukogu ja määratakse, milliste Arduino digitaalportidega LCD on ühendatud.

Defineeritakse erinevad erisümbolid (nägu, kass, tüdruk, poiss käed alla/üles, väike süda) 8-baiti pikkuste massiividena.

Setup-osas häälestatakse LCD (16×2 märki) ja luuakse need kohandatud sümbolid lcd.createChar() abil.

Loop-tsüklis paigutatakse kursori abil ekraanile esmalt kass ja tüdruk, seejärel poisi kätega alla/üles vaheldumisi (animatsioon delay()-ga).

Järgneb for-tsükkel, mis joonistab ritta 10 smile’it, ning teine tsükkel, mis liigutab südameid paremalt vasakule, tekitades lihtsa animatsiooni.

millis()

millis() on Arduino sisemine taimer, mis loeb aega alates seadme käivitumisest millisekundites.

Sellega saad luua lihtsa “peamurdmiseta” kella, mis näitab tööaja kulgu.

Kuvab aega formaadis HH:MM:SS:

Ülesanne

Kasutatud komponendid:

  • Arduino Uno
  • TMP36 temperatuuriandur
  • Fototakisti
  • 10 kΩ takisti
  • 2 x 220 Ω takisti
  • 16×2 LCD-ekraan
  • Ühenduskaablid
  • Arendusplaat

Töö protsess:

Setup-osas initsialiseeritakse LCD-ekraan ja laaditakse mällu kohandatud ikoonid; seejärel käivitub põhitsükkel, mis iga 2 sekundi järel loeb andurite mõõdetud pinged, teisendab need loetavateks väärtusteks (temperatuur, valgus), põhineb künnistel määrab, millist ikooni ning eelmääratud teksti kuvatakse. Kuvamine toimub kahe reaga – ülemisel real tekst koos ikooniga, alumisel real temperatuur ja kellaaeg – ning iga viiendal läbikäigul asendub tavaline vaade reklaamilausendi.

Skeem:

Kood:

#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
char* weatherTexts[] = {
  "Paistab paike!", 
  "Pilves ilm!",
  "Ilm on soe!", 
  "Ilm on ilus!", 
  "Ilm on kulm!", 
};
 
byte sun[] = { 0b00100, 0b10101, 0b01110, 0b11111, 0b01110, 0b10101, 0b00100, 0b00000 };
byte cloud[] = { 0b01110, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000, 0b00000 };
byte rain[] = { 0b01000, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000, 0b00000, 0b00000 };
byte snow[] = { 0b00100, 0b01010, 0b00100, 0b00000, 0b00000, 0b01110, 0b01010, 0b00100 };
byte smile[] = { 0b00000, 0b00000, 0b00000, 0b01010, 0b00000, 0b10001, 0b01010, 0b00000 };
 
const int PHOTO_PIN = A1;
const int TEMP_PIN = A0;
int lightLevel; 
float temp; 
bool isTemp = false;
unsigned long changeTime = 0;
int lastNum = 0;
 
void setup() 
{
    lcd.begin(16, 2);
    lcd.createChar(1, sun);
    lcd.createChar(2, cloud);
    lcd.createChar(3, sun);
    lcd.createChar(4, rain);
    lcd.createChar(5, snow);
    lcd.createChar(6, smile);
    Serial.begin(9600);  
     
    delay(500);
    lcd.setCursor(0, 0);
    lcd.print("Ilmajaam: Shrek");
    for(int i = 0; i < 16; i++)
    {
        lcd.setCursor(i, 1);
        lcd.write(6);
        delay(150);
    }
     
    lcd.clear();
}
 
float readTemp() 
{
  int sensorValue = analogRead(TEMP_PIN);
  float voltage = (sensorValue * 5.0) / 1023.0;
  float temperatureC = (voltage - 0.500) * 100.0;
  return temperatureC;
}
 
int readLight() 
{
    return analogRead(PHOTO_PIN);
}
 
void setCurTopText(int num)
{
    lcd.setCursor(0, 0);
    lcd.print(weatherTexts[num]);
    lcd.write(num+1);
}
 
void loop() 
{
    unsigned long seconds = millis() / 1000;
    temp = readTemp();
    lightLevel = readLight();
    Serial.println("C: "+(String)temp+", Brightness: "+(String)lightLevel);
     
    lcd.setCursor(0, 1);
    lcd.print("C ");
    lcd.print(temp, 1);
    lcd.print(" Kell ");
    lcd.print(seconds);
     
    int num = 0;
    if (isTemp)
    {
        num = (lightLevel > 700) ? 0 : 1;
    }
    else
    {
        num = (temp > 26) ? 2 : 
                (temp > 20) ? 3 : 4;
    }
     
    if (lastNum != num)
    {
        lastNum = num;
        lcd.setCursor(0, 0);
        lcd.clear();        
        lcd.setCursor(0, 1);
        lcd.clear();
    }
     
    setCurTopText(num);
     
    if (changeTime < seconds)
    {
        isTemp = !isTemp;
        changeTime = seconds + 8;
        lcd.setCursor(0, 0);
        lcd.clear();        
        lcd.setCursor(0, 1);
        lcd.clear();
    }
   
    delay(300);
}

Video:

Leave a Reply

Your email address will not be published.