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í:
Vlastní zpracování nechávám na každém z vás.
Milan Holcr bezec@volny.cz