Cześć,
w dzisiejszej części kursu o ESP8266 przedstawimy w jaki sposób obsługiwać wbudowany przetwornik analogowo-cyfrowy. Zapraszamy !
Spis treści:
- Specyfikacja ADC dla ESP8266
- Podstawowe funkcje
- Przykładowy program #1: Odczyt wartości ADC
- Przykładowy program #2: Praktyczne wykorzystanie przetwornika ADC
- Podsumowanie
Co będziemy potrzebować do tej części kursu:
- ESP8266 (posiadające wyprowadzony pin ADC)
- Potencjometr 10k ohm
- fotorezystor
- rezystor 100 k ohm
- przewody połączeniowe
1. Specyfikacja ADC dla ESP8266
- Typ przetwornika: SARADC
- Rozdzielczość: 10 bit
- Poziomy kwantyzacji: 1024
- Pełna skala pomiaru: 0 – 3,3V
- Rozdzielczość napięciowa: ~ 3,2 mV (bo 3,3V / 1024)
- Ilość wyprowadzeń: 1
Miejsce wyprowadzenia pinu ADC:
Ze wszystkich podanych parametrów naszym zdaniem najważniejszym jest pełna skala pomiaru, której górna granica wynosi 3,3V. Po znacznym przekroczeniu tej granicy (więcej niż 3,5V) możemy uszkodzić ten przetwornik. Liczy się to głównie, gdy zapomnimy się po przejściu z Arduino, gdzie będziemy chcieli zbadać napięcie z zakresu 0-5V. W tym przypadku może to być śmiertelne dla naszego ADC, a w najgorszym przypadku dla całego modułu. Jeżeli chcesz zbadać napięcie większe niż 3,3V to musisz zbudować odpowiedni dzielnik napięcia, który obniży maksymalną wartość mierzonego napięcia do bezpiecznego 3,3V.
2. Podstawowe funkcje
Zazwyczaj w tym miejscu spotykacie długą listę funkcji, ale tym razem będzie inaczej :) przy odczycie ADC wystarczy nam jedna funkcja, adc.read():
1 2 3 |
adc.read(pin) -- pin: pin ADC, w przypadku ESP8266, tym pinem będzie zawsze 0 |
I to już naprawdę wszystko co potrzebujemy :)
Z dodatkowych funkcji jest jeszcze jedna:
1 |
adc.readvdd33() |
Funkcja ta zwraca nam w mV, jakim napięciem zasilany jest ESP8266. Jak już wiemy jak obsługiwać ADC to możemy przejść do napisania programu.
3. Przykładowy program #1: Odczyt wartości ADC
Ten program ma za zadanie wskazywać wartość ADC powstałą na potencjometrze, a następnie ją przeliczać na napięcie.
Schemat:
Program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
float = napiecie -- tworzymy zmienną typu float, w której będzie zapisana -- wartość napięcia int = wartoscADC -- tworzymy zmienną typu int, do której będziemy zapisywać wartość ADC function pomiarADC() -- tworzymy klasę pomiarADC wartoscADC = adc.read(0) -- przypisujemy do zmiennej odczyt z przetwornika ADC print("Wartosc ADC: ", wartoscADC) -- wyświetlamy wartość ADC na monitorze szeregowym napiecie = wartoscADC * 0.00322265625 -- obliczamy wartość napięcia na podstawie znanej wartości ADC print("Wartosc napiecia:", napiecie, "Wolt") -- wyświetlamy obliczone napięcie na monitorze szeregowym print("========================") end -- zakończ klasę tmr.alarm(0, 700, tmr.ALARM_AUTO, pomiarADC) -- ustawiamy timer0, aby co 700ms powtarzał klasę pomiarADC |
Na samym początku tworzymy dwie zmienne, w których będziemy przechowywać naszą wartość ADC oraz obliczoną wartość napięcia. Następnie tworzymy pętlę główną programu o nazwie pomiarADC, gdzie będziemy wykonywać nasze pomiary i obliczenia. Na samym początku przypisujemy zmiennej wartoscADC odczyt z przetwornika. Następnie otrzymaną wartość wysyłamy na monitor portu szeregowego. Po wykonaniu tej operacji, przechodzimy do obliczenia napięcia, korespondującego z otrzymaną wcześniej wartością ADC.
Następnie otrzymaną wartość napięcia wysyłamy na monitor portu szeregowego. To jest koniec głównej pętli naszego programu. Pozostało nam tylko ustawienie timera, aby wykonywał nasz program co 700 milisekund.
Po wgraniu programu powinniśmy otrzymać taki rezultat: