Projekt polega na zliczaniu częstotliwości z generatora za pomocą płytki ESP 8266. Program zlicza czas pełnego okresu sygnału a następnie przelicza go na wartość częstotliwości. Do celowo wyświetlana jest ona na ekranie OLED 12C.
1. Płytka ESP8266
2. przewody męsko-męskie i męsko- żeńskie
3. Rezystory 1.5 kΩ i 910 Ω
4. Generator częstotliwości
5. Wyświetlacz OLED 12C
6. Kabel microUSB - USB
Czym jest częstotliwość?
Według strony internetowej Wikipedia:
Częstotliwość jest to wielkość fizyczna określająca liczbę cykli zjawiska okresowego w czasie.
Najprościej mówiąc, częstotliwość określa, jak często coś się powtarza.
Jeżeli mamy do czynienia z sygnałem, którego forma jest okresowa, tj. posiadająca cykliczny przebieg, możemy określić liczbę jego zmian (w jakiejś jednostce czasu). Zmiany w tym przypadku możemy określić jako przejścia ze stanu wysokiego do stanu niskiego. Następnie liczbę tych zmierzonych zmian dzielimy przez zmierzony czas.
Możemy również policzyć czas jednego cyklu, co prowadzi nas do wzoru:
f = 1/T, gdzie f to częstotliwość, a T to czas jednego okresu. Jednostką częstotliwości jest Hertz (1 Hz = 1 / s)
Jest to podstawowy wzór do obliczania częstotliwości wszystkich urządzeń.
Częstotliwość jest szeroko stosowanym pojęciem, gdyż bezpośrednio łączy się z czasem wykonywania jakiegoś cyklu. Spotkałeś/aś się kiedyś z pojęciem częstotliwości odświeżania monitora? Dajmy na to, że wynosi 75 Hz. Oznacza to nic innego jak 75 zmian obrazów na sekundę (Czy wiesz ile w takim razie wynosi okres tych zmian?)
Opis podłączenia
Skoro wiemy już czym jest częstotliwość, możemy przejść do opisu projektu. A więc po kolei. Żeby uzyskać jakiś wynik musimy wpierw podłączyć urządzenie do generatora. W tym przypadku jest to PWM Signal Generator Module, ale ty możesz użyć jakiegoś innego (W przyszłości możesz też spróbować stworzyć swój własny generator).
Zwykle sygnał wysyłany z takich generatorów ma zbyt duże napięcie dla Naszej płytki, dlatego musimy go zmniejszyć. Używamy do tego rezystorów, które układamy w mostek (Patrz Schemat Projektu). Obniżą one napięcie do dopuszczalnego przez ESP 8266. W przypadku innych generatorów, wartości rezystorów mogą być inne.
Teraz zostało tylko podłączenie ekranu Oled 12C. Jest to wersja użyta w tym projekcie, ale śmiało możesz próbować z innym. Ponownie schemat podłączenia jest na dole.
Program
Po poprawnym podłączeniu wszystkich elementów przyszedł czas na napisanie kodu programu. Wykorzystuje on funkcję time.ticks_ms() z biblioteki time. Główne założenia programu to sprawdzenie stanu wysyłanego przez generator. Po wykryciu pełnego okresu (jeden stan wysoki plus jeden stan niski) program zlicza czas jaki upłynął. Następnie wyliczana jest częstotliwość, która wyświetlana jest na ekranie. Czas przejścia jest zerowany i cała procedura zaczyna się od nowa.
Głównym ograniczeniem programu jest szybkość przesyłu informacji przez mikrokontroler. W celu ograniczenia liczby wysyłanych informacji na wyświetlacz (tym samym zwiększenie możliwości miernika) wprowadzona została bramka 10 zliczeń. Dopiero po 10 cyklach liczona jest częstotliwość i wysyłana na ekran. Śmiało można ją modyfikować.
from machine import Pin, I2C
import machine
import ssd1306
import time
pin_number = 14
pin = machine.Pin(pin_number, machine.Pin.IN)
i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
c = 0 #bramka
reference = 0
current_time = 1
empty_time = 0
def display_number(number):
oled.fill(0)
oled.text("Czestotliwosc:", 12, 10)
oled.text(str(number), 35, 26)
oled.text("Hz", 85, 26)
oled.show()
while True:
pin_value = pin.value()
if pin_value == 1:
empty_time = time.ticks_ms()
while pin_value == 0:
pin_value = pin.value()
while pin_value == 1:
pin_value = pin.value()
if pin_value == 0:
t_pozorny = time.ticks_ms()
#print(t_pozorny, reference, empty_time)
current_time = (t_pozorny-empty_time-reference)
current_time = current_time/1000
empty_time = 0
reference = time.ticks_ms()
c = c+1
#print(c)
if c == 10:
f = 1/current_time
display_number(round(f,0))
c = 0