Wahadło matematyczne

Typ_projektu
microPython
Zdjecie główne
Wahadło matematyczne
Krótki opis projektu

Pomiar okresu i częstotliwości wahadła matematycznego za pomocą czujnika HC-SR04

Niezbędne elementy

 

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

Sprzęt

1.Drukarka 3D

2.Komputer z programem Thonny

Opis projektu

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.

Zdjęcia
HC-SR04
ESP 8266
IC2
kod programu
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)
Schemat
Tagi
ESP-8266,IC2,Wahadło matematyczne, okres, częstotliwość,