Podczas kolejnych zajęć w Laboratorium Nowych Technologii, spotkałem się z problemem mierzenia rezystacji. Sprawa jest trywialna, o ile macie pod ręką multimetr albo mega-pamięć do tych kolorowych pasków. A co jeżeli na stole leży jedynie Arduino i kilka rezystorów? Nie ma problemu: wystarczy zrozumieć, jak działa dzielnik napięciowy:)
Podobnych projektów w Sieci znajdziecie bardzo wiele. Jeden z nich postanowiłem zaadoptować na potrzeby naszej pracowni. Stąd własnie wpadłem na pomysł wykorzystania… Scratcha:) A dokładniej S4A, czyli Scratcha dla Arduino.
Dzielnik napięciowy
Dzielnik napięciowy to jedna z podstawowych konstrukcji w elektronice. Pozwala na zmniejszenie napięcia wejściowego do zadanego poziomu na wyjściu.
Uwaga: dzielinik napięciowy oparty na rezystorach można stosować jedynie do konwersji poziomów logiki; nie można z niego zasilać elementów i układów.
Spójrzmy więc na taki oto układ:
Napięcie wyjściowe
zmienia się tutaj w zależności od wartości rezystorów
i
oraz napięcia wejściowego
:
Mierzenie nieznanego rezystora
Na potrzeby tego projektu, założymy, że będzie miało znaną wartość. Naszym tajemniczym rezystorem będzie
. Zakładając, że
,
oraz
:
W ten sposób możemy wyznaczyć wartość rezystora .
Pomiar napięcia przez Arduino
W tym projekcie, wejściowe piny przetwornika analog-cyfra Arduino (oznaczone A0 – A5) użyjemy do zmierzenia napięcia wyjściowego .
Taki odczyt w Arduino-C można uzyskać za pomocą wywołania:
//Zmienna raw zawiera wynik odczytu z pinu analogowego analogPin, np. A0 int raw = analogRead(analogPin);
Zauważcie, że zwracana wartość zawiera się w przedziale 0..1023. Wartość tą należy przemapować na napięcie logiki Arduino, które wynosi 5V. Wtedy:
- raw == 0: napięcie 0V
- raw == 1023: napięcie 5V (jak zasilanie Arduino).
Łatwo to osiągnąć, gdybśmy pisali nasz program w Arduino-C:
float raw = analogRead(analogPin); float vout; vout = (5.0 / 1023.0) * raw; //lub vout = (5.0 * raw) / 1023.0;
Uwaga: aż prosiłoby się tu użyć funkcję
map(value, fromLow, fromHigh, toLow, toHigh)
. Niestety – operuje ona jedynie na liczbach całkowitych. Zwróciłaby więc jedynie wartości 0, 1, 2, 3, 4, 5. Rozdzielczość takiego miernika byłaby raczej mało użyteczna.
Scratch
Zanim weźmiemy się za składanie bloczków, warto przypatrzyć się wzorowi:
…i trochę go uprościć przyjmując pewne założenia:
, bo użyjemy rezystora 10kΩ,
, bo użyjemy zasilania Arduino 5V,
, wartość odczytana z pinu A0.
W związku z tym, podstawiając odpowiednie wartości:
I lepiej:
’Kod’ programu
Nasz program zrealizujemy za pomocą następujących bloczków:
Zwróćcie uwagę na kilka właściwości tego kodu:
- Program wykonuje się po kliknięciu zielonej flagi,
- W nieskończonej pętli:
- Ustawia wartość
na 10000 (odpowiada rezystorowi 10kΩ,
- Pobiera wartość z sensora Analog0 (A0) i przypisuje ją do zmiennej raw,
- Oblicza wartość rezystora i zapisuje w zmiennej
,
- Wyświetla na ekranie zawartość zmiennej
,
- Czeka 1 sekundę do następnego pomiaru
- Ustawia wartość
Teraz wystarczy wcisnąć zieloną flagę: wartość rezystora pojawi się w dymku:
Kilka testów
Testy wykonałem na rezystorze z pomocą dekady rezystorowej w roli
. Dzięki dekadzie mogłem sprawdzić naprawdę szeroki zakres rezystancji.
Dekada | Wskazanie |
---|---|
100Ω | 78,82 |
220Ω | 209.58 |
330Ω | 312.5 |
470Ω | 460.12 |
1kΩ | 1000 |
4.7kΩ | 4149 |
10kΩ | 10179 |
47kΩ | 48157 |
100kΩ | 103666 |
Jak sami widzicie: dokładność może nie jest zbyt imponująca, ale w zupełności wystarcza do zgrubnego określenia wartości rezystora.
A teraz odwróciłem sytuację zastanawiając się, jak dobór rezystora wpływa na dokładność pomiaru rezystora
.
I tak, dla rezystora (rezystancja zmierzona multimetrem UT33C: 46.9kΩ):
: wynik: 29,41
: wynik: 44,94
Dla rezystora (rezystancja zmierzona multimetrem UT33C: 352Ω):
: wynik: 343,78
: wynik: 354,97
Natomiast dla rezystora (rezystancja zmierzona: 975Ω):
: wynik: 964,39
: wynik: 971,1
Natomiast dla rezystora (rezystancja: 4.7kΩ):
: wynik: 4740,63
: wynik: 4715,08
Natomiast dla rezystora : (rezystancja: 9.69kΩ)
: wynik: 9749,03
: wynik: 9768,42
Natomiast dla rezystora : (rezystancja: 100.7kΩ)
: wynik: 103666,67
: wynik: 112666,67
Wydaje się się, że mniejszy rezystor
lepiej sprawdza się do mierzenia rezystorów o mniejszych pojemnościach – gorzej dla większych pojemności.