Arduino – prosty woltomierz z wyświetlaczem LCD
Płytki Arduino słyną ze swojej wszechstronności. Podłączając różne podzespoły zewnętrzne, możemy stworzyć wiele ciekawych i praktycznych urządzeń. Tym razem wykorzystamy Arduino do pomiaru napięcia, a co więcej – podłączymy do Arduino LCD – wyświetlacz ciekłokrystaliczny do obrazowania wyniku pomiaru napięcia z dodatkowym smaczkiem wizualnym!
Pomiar napięcia z Arduino
Niniejszy artykuł przedstawia projekt prostego woltomierza zbudowanego w oparciu o płytkę Arduino MEGA 2560 z wykorzystaniem wyświetlacza LCD w układzie 16×2.
Koncepcja pomiaru napięcia za pomocą Arduino
Płytka Arduino MEGA 2560 jest oparta na 8-bitowym mikrokontrolerze ATMEGA 2560. Architektura tego mikrokontrolera zawiera w sobie 10-bitowy przetwornik analogowo-cyfrowy, tj. taki, który może operować na liczbach od 0 do 1023. Ten komponent odpowiada za wykonywanie pomiarów napięcia na wejściu (sygnał analogowy) i przetwarzanie wartości tego napięcia na postać cyfrową. Odczyt napięcia na poziomie programowym odbywa się za pomocą funkcji analogRead(). To, z jaką dokładnością (rozdzielczością napięciową) będzie pracował przetwornik ADC, zależeć będzie od wartości napięcia referencyjnego. W naszym przypadku to napięcie będzie wynosiło 5V, co przy 10-bitowej rozdzielczości, umożliwia pomiar napięcia z rozdzielczością na poziomie 4,89mV. Wynik pomiaru będzie wyświetlany na wyświetlaczu Arduino LCD w układzie 16×2 (Maksymalnie 16 znaków w wierszu, 2 wiersze).
Pomiar napięcia do wartości 5V – zestawienie podzespołów
W celu wykonania woltomierza umożliwiającego pomiar napięcia w przedziale 0V – 5V niezbędne będą następujące podzespoły:
- płytka Arduino MEGA 2560
- przewód USB-A na USB-B
- wyświetlacz LCD 16×2 niebieski
- potencjometr obrotowy 5kΩ liniowy
- płytka stykowa 830-polowa
- przewody połączeniowe do płytek stykowych
Pomiar napięcia do wartości 5V – podłączenie układu
Użyty w naszym projekcie wyświetlacz LCD, ma łącznie szesnaście wyprowadzeń. Patrząc na wyświetlacz LCD, opis wyprowadzeń od prawej strony do lewej strony i ich sposób podłączenia do płytki Arduino MEGA 2560, jest następujący:
1 – GND -> GND (sekcja “POWER”)
2 – VCC -> 5V (sekcja “POWER”)
3 – VEE -> wyprowadzenie nr 2 (środkowe) potencjometru obrotowego
4 – RS -> D8 (sekcja “DIGITAL/PWM”)
5 – R/W -> niepodłączony
6 – EN -> D9 (sekcja “DIGITAL/PWM”)
7 – DB0 -> niepodłączony
8 – DB1 -> niepodłączony
9 – DB2 > niepodłączony
10 – DB3 -> niepodłączony
11 – DB4 -> D4 (sekcja “DIGITAL/PWM”)
12 – DB5 -> D5 (sekcja “DIGITAL/PWM”)
13 – DB6 -> D6 (sekcja “DIGITAL/PWM”)
14 – DB7 -> D7 (sekcja “DIGITAL/PWM”)
15 – LED+ -> 5V (sekcja “POWER”)
16 – LED- -> GND (sekcja “POWER”)
Natomiast podłączenie wyprowadzeń potencjometru obrotowego jest następujące:
1 -> GND (sekcja “POWER”)
2 -> A0 (sekcja “ANALOG IN”)
3 -> 5V (sekcja “POWER”)
Pomiar napięcia z Arduino – kod programu
Nasz prosty woltomierz mierzy napięcie, którego wartość będzie się zmieniać w zależności od ustawienia potencjometru. Ponieważ środkowe wyprowadzenie potencjometru jest połączone jednocześnie z wejściem wyświetlacza do regulacji jasności oraz z wejściem przetwornika ADC w płytce Arduino MEGA 2560, wyświetlany wynik pomiaru będzie odpowiednio mniej lub bardziej podświetlony. Program bazuje na bibliotece “LiquidCrystal.h”, której inicjalizacja znacząco upraszcza kod docelowy.
#include „LiquidCrystal.h” // Inicjalizacja biblioteki do obslugi wyswietlacza LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
float napiecie = 0.0;
float temp=0.0;
void setup()
{
Serial.begin(9600); // uruchomienie transmisji szeregowej
lcd.begin(16, 2); // liczba znakow w jednym wierszu i liczba wierszy wyswietlacza LCD:
lcd.print(„POMIAR NAPIECIA”); // wyswietla komunikat “POMIAR NAPIECIA”
}
void loop()
{
// Wzor ogolny do obliczenia napiecia z przetwornika ADC
int analog_value = analogRead(A0);
input_voltage = (analog_value * 5.0) / 1024.0;
// Wyswietlanie wyniku pomiaru
if (napiecie < 0.1)
{
napiecie=0.0;
}
Serial.print(„v= „);
Serial.println(napiecie);
lcd.setCursor(0, 1);
lcd.print(„NAPIECIE= „);
lcd.print(napiecie);
delay(250); // nastepny cykl pomiarowy za 250ms
}