Napsal uživatel Milan Holcr dne So, 06/15/2024 - 10:43

Zde naleznete návod na sestavení jednoduchého počítadla kol pomocí mikrokontroléru ARDUINO UNO.
Sestavení a naprogramování vyžaduje alespoň minimální znalosti elektroniky a programování Arduina.

Použitý hardware:
Arduino UNO R3, ATmega328P, Klon
LYONZG S-20-5 modulový napájecí 230V AC-DC zdroj 5V/4A 20W
P10 - Maticový 32x16 LED displej modul červený (venkovní)
Dvě tlačítka se spínacím kontaktem
Napájecí kabel 230 V.

Kód pro mikrokontroler Arduino naprogramoval Milan Holcr mladší pomocí Arduino IDE.

Kód pro Arduino:
#include "DMD3.h" // Knihovna pro řízení LED matrix displeje
#include "bmz10x16.h" // Font pro zobrazování čísel

DMD3 display(1, 1); // Inicializace objektu pro řízení displeje

char dmdBuff1[10]; // Buffer pro ukládání formátovaného textu
int Up = A0;       // Pin pro tlačítko "Up"
int Down = A1;     // Pin pro tlačítko "Down"
int Reset = A2;    // Pin pro tlačítko "Reset"

int counter = 0; // Proměnná pro uchování aktuální hodnoty

void scan()
{
    display.refresh(); // Obnovení obsahu displeje
}

void setup()
{
    Timer1.initialize(2000);        // Inicializace časovače s periodou 2000 mikrosekund
    Timer1.attachInterrupt(scan);    // Přiřazení funkce scan() jako přerušení pro časovač
    Timer1.pwm(9, 100);              // Nastavení PWM na pinu 9 s délkou pulzu 100

    pinMode(Up, INPUT_PULLUP);       // Nastavení pinu "Up" jako vstup
    pinMode(Down, INPUT_PULLUP);     // Nastavení pinu "Down" jako vstup
    pinMode(Reset, INPUT_PULLUP);    // Nastavení pinu "Reset" jako vstup
    Serial.begin(9600);              // Inicializace sériové komunikace s baudovou rychlostí 9600
}

void loop()
{
    sprintf(dmdBuff1, "%.2d", counter); // Formátování čísla do textové podoby s dvěma číslicemi
    display.setFont(bmz10x16);          // Nastavení velkého fontu pro displej

    // Vypočítání pozice pro zarovnání ve středu
    int xPos = (display.width() - display.textWidth(dmdBuff1)) / 2;

    display.drawText(xPos, 0, dmdBuff1); // Zobrazení textu na displeji na vypočítané pozici

    if (counter >= 99)
    {
        counter = 0; // Ošetření přetečení - nastavení na nulu, pokud hodnota přesáhne 99
    }

    if (digitalRead(Up) == LOW)
    {
        delay(200);
        counter++; // Zvýšení hodnoty při stisku tlačítka "Up"
    }

    if (digitalRead(Down) == LOW && counter > 0) // Přidána podmínka, aby se hodnota nemohla dostat pod 0
    {
        delay(200);
        counter--; // Snížení hodnoty při stisku tlačítka "Down"
    }

    if (digitalRead(Reset) == LOW)
    {
        delay(200);
        counter = 0; // Resetování hodnoty při stisku tlačítka "Reset"
    }
}

 

Kód pamatuje i na možnost přidání resetovacího tlačítka, které počítadlo vynuluje. Je to opět tlačítko s jedním spínacím kontaktem. Toto ale není nutné, počítadlo funguje i bez tohoto tlačítka.

 

Zapojení:

Schema zapojení

 

Vlastní zpracování nechávám na každém z vás. 

 

Milan Holcr bezec@volny.cz