Doświadczenie z pompą wody - ciśnienie i PWM

Typ_projektu
microPython
Zdjecie główne
Krótki opis projektu

Projekt umożliwia zapoznanie się tematyką ciśnienia hydrostatycznego w praktyce. Pokazuje zależności między mocą pompy a możliwą do osiągnięcia wysokością słupa wody, a zatem uczy czym jest sygnał PWM. Użytkownik ustawia czas pracy pompy oraz moc pompy dobierając odpowiednie wypełnienie sygnału za pomocą przycisków.

Niezbędne elementy

1. Płytka SIC ESP8266

2. Płytka SmartPlant

3. Pompka do wody + elastyczna rurka

4. ekran oled I2C

5. kabel micro USB

Sprzęt

Należy podłączyć wszystkie niezbędne elementy wg schematu płytki SmartPlant.

Opis projektu

Aby przejść do zrealizowania zaproponowanych doświadczeń warto zapoznać się z pojęciem ciśnienia hydrostatycznego - siły ciężkości wywieranej przez słup cieczy na jednostkę powierzchni. Fizyczna interpretacja tego zjawiska określona została wzorem: p = ρ*g*h, gdzie:
p - ciśnienie hydrostatycznego wyrażone w Pascalach [Pa]

ρ - gęstość cieczy(wody) wyrażona w [kg/m^3]

g - przyspieszenie grawitacyjne równe w przybliżeniu 10[m/s^2]

h - wysokość słupa cieczy(wody)

Warto również wiedzieć czym jest skrót PWM [Pulse Width Modulation] - oznacza modulację szerokości impulsów. Jest to nic innego jak metoda sterowania układami elektronicznymi przy pomocy wypełnienia sygnału sterującego. Gdy zwiększamy wartość PWM, zwiększamy również moc pompki, poprzez zwiększenie wypełnienia sygnału.

Opis urządzenia

Urządzenie składa się z wyświetlacza komunikującego ustawiony czas trwania pompowania oraz wybranego trybu mocy pompy. Wyświetlacz informuje również użytkownika o pompowaniu w trakcie działania pompy. Użytkownik wybiera czas trwania pompowania używając przycisku, użytkownik wybiera moc pompy używając przycisku oraz użytkownik uruchamia pompę na zadanych wcześniej parametrach (czas, PWM) używając przycisku. Aby pompa pompowała należy umieścić ją na dnie naczynia z cieczą, kierując rurkę ku górze naczynia.

Doświadczenie 1

Zależność między mocą pompki, a wysokością słupa cieczy h, na którą uda się ciecz wpompować. Zalecane jest testowanie poszczególnych mocy pompy (ustawienie PWM) podczas tego samego czasu pompowania. Użytkownik powinien zauważyć zależność, iż potrzeba więcej mocy, aby móc wpompować ciecz na większą wysokość.

Doświadczenie 2

Ile cieczy (wody) uda się przepompować podczas maksymalnej mocy pompy (100%) przez najkrótszy możliwy czas 5s, a ile cieczy uda się przepompować podczas połowiczej mocy pompy (50%) przez 10s lub więcej.

Zdjęcia
kod programu
from machine import Pin, PWM, I2C
import time
import ssd1306

f = 1000
i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
redled = Pin(15, Pin.OUT)  # czerwona dioda
greenled = Pin(12, Pin.OUT)  # zielona dioda
time_button = Pin(0, Pin.IN) # przycisk ustawiania czasu trwania pompowania
pwm_button = Pin(16, Pin.IN) # przycisk ustawiania pompki wody
start_button = Pin(2, Pin.IN) # przycisk uruchamiający program
pompa = PWM(Pin(14), f)  # pompka do wody
pompa.duty(0)
czas_trwania = 5  # początkowy czas trwania w sekundach
pwm_value = 0  # początkowa wartość PWM
redled.off()
greenled.off()
def pompuj(t,moc):
    pompa.duty(moc)
    time.sleep(t)
def stopEngine():
    pompa.duty(0)
def ekran():
    oled.fill(1)
    oled.rect(2, 2, 124, 60, 0)
    oled.hline(2, 13, 124, 0)
    oled.hline(2, 24, 124, 0)
    oled.hline(2, 34, 124, 0)
    oled.text('Pompa wody', 23, 4, 0)
    oled.text('Czas pracy:', 3, 15, 0)
    oled.text('PWM:', 3, 26, 0)
    oled.text(' {}s'.format(czas_trwania), 90, 15, 0)  #wyświetl czas trwania na ekranie
    oled.text('{} '.format(pwm_value), 38, 26, 0)
    oled.text('   {}%'.format(int((pwm_value/1024)*100)), 65, 26, 0)
    oled.show()
while True:
#ustawienie czasu trwania pompowania
    ekran()
    if time_button.value() == 0:
        czas_trwania += 5
        if czas_trwania > 20:
            czas_trwania = 5
        print("Czas pompowania ustawiony na {}s".format(czas_trwania))
        redled.on()
        time.sleep(0.2)
        redled.off()
#ustawienie trybu PWM pompki
    if pwm_button.value() == 0:
        if pwm_value < 1024:
            pwm_value += 200
            if pwm_value > 1024:
                pwm_value = 1024
        else:
            pwm_value = 0
        print("PWM ustawione na {}%, wartość PWM: {}".format(int((pwm_value / 1024) * 100), pwm_value))
        greenled.on()
        time.sleep(0.2)
        greenled.off()
#rozpoczecie startu
    if start_button.value() == 0:
        print("Rozpoczęcie pompowania")
        oled.text('Pompowanie ...',8,44,0)
        oled.show()
        pompuj(czas_trwania, pwm_value)
        stopEngine()
        print("Zakończenie pompowania")
Tagi
pompka woda pwm oled ciśnienie