Pomiar okresu i częstotliwości wahadła matematycznego za pomocą czujnika HC-SR04
1. Płytka ESP8266
2.przewody męsko męskie
3.płytka stykowa
4.Wyświetlacz OLED I2C
5.Czujnik HC-SR04
7.Kabel USB
1.Drukarka 3D
2.Komputer z programem Thonny
Celem projektu jest zmierzenie okresu i częstotliwości wahadła matematycznego. Do pomiaru wykorzystamy czujnik HC-SR04. Czujnik HC-SR04 wysyła krótki impuls, który odbija się od przeszkody i wraca do niego. Specjalny układ scalony podłączony do głośnika i mikrofonu wytwarza impuls o takiej samej długości trwania, jaki zajmuje droga impulsu dźwiękowego od czujnika do przeszkody oraz powrót do czujnika.
Należy połączyć układ według schematu zamieszczonego pod kodem. Wpinamy płytkę, czujnik i wyświetlacz i łączymy według schematu przy użyciu przewodów męsko męskich. Po czym wgrywamy program na płytkę ESP 8266.
W celu wykonania pomiaru należy wychylić wahadło o niewielki kąt , a następnie uruchomić program po czym puścić wahadło. Po jakimś czasie na wyświetlaczu led pojawi się okres i częstotliwość. W programie zliczany jest czas wahnięć po czym czas ten dzielony jest przez ilość wykonanych wahnięć.
T=t/n
1.1 Wzór na okres
t - czas trwania n wahnięć n-liczba wahnięć T-okres
f=1/T
1.2.Wzór na częstotliwość
Okres i częstotliwość wahadła matematycznego można zmierzyć również z użyciem samego stopera. Należy zmierzyć czas trwania 10 wahnięć włączamy stoper w momencie puszczenia kulki i wyłączamy dopiero w momencie wykonania przez nią 10 pełnych wahnięć. W celu obliczenia okresu dzielimy zmierzony czas przez ilość wahnięć
Jak wiadomo okres i częstotliwość zależy tylko od długości wahadła i przyśpieszenia grawitacyjnego. Można więc zmienić niektóre parametry wahadła i zobaczyć jaki mają wpływ na okres i częstotliwość. Niedokładności pomiarowe mogą wynikać z położenia czujnika i czasu pobierania danych.
import machine, time
from machine import Pin, I2C
import ssd1306
class HCSR04:
def __init__(self, trigger_pin, echo_pin, echo_timeout_us=500*2*30):
self.echo_timeout_us = echo_timeout_us
# Init trigger pin (out)
self.trigger = Pin(trigger_pin, mode=Pin.OUT, pull=None)
self.trigger.value(0)
# Init echo pin (in)
self.echo = Pin(echo_pin, mode=Pin.IN, pull=None)
def _send_pulse_and_wait(self):
self.trigger.value(0) # Stabilize the sensor
time.sleep_us(5)
self.trigger.value(1)
# Send a 10us pulse.
time.sleep_us(10)
self.trigger.value(0)
try:
pulse_time = machine.time_pulse_us(self.echo, 1, self.echo_timeout_us)
return pulse_time
except OSError as ex:
if ex.args[0] == 110: # 110 = ETIMEDOUT
raise OSError('Out of range')
raise ex
def distance_mm(self):
pulse_time = self._send_pulse_and_wait()
mm = pulse_time * 100 // 582
return mm
def distance_cm(self):
pulse_time = self._send_pulse_and_wait()
cms = (pulse_time / 2) / 29.1
return cms
i2c = I2C(scl=Pin(14), sda=Pin(12))
oled = ssd1306.SSD1306_I2C(128,64,i2c)
oled.fill(0)
c=0
sensor = HCSR04(trigger_pin=2, echo_pin=4, echo_timeout_us=10000)
while True:
if c==21:
T2=time.time() #time.ticks_ms() #zakończenie pomiaru
To=(T2-T1)/10 #wyliczenie okresu
F=1/To #wyliczenie częstotoliwości
a = str(To)
b = str(F)
c=0
print(To)
oled.text(a,40, 0, 1) #wyświetlenie na ekranie
oled.text(b,40, 12, 1)
oled.show()
else:
distance = sensor.distance_cm() #pomiar odległości
print (distance)
if distance<10: #zliczanie wachnieć
c=c+1
if c==1:
T1=time.time()#time.tcks_ms() #rozpoczęcie pomiaru
time.sleep(0.1)