master
Drew Bednar 7 hours ago
parent 08f60d3e36
commit 3d86519e73

@ -0,0 +1,2 @@
# MP Remote

@ -0,0 +1,41 @@
import time
from machine import Timer, Pin
def debounce(pin, callback, delay_ms=50):
def _debounce_handler(timer):
if pin.value() == 0: # Assuming active low button
callback()
debounce_timer = Timer(-1)
def _pin_handler(pin):
debounce_timer.init(
mode=Timer.ONE_SHOT, period=delay_ms, callback=_debounce_handler
)
return _pin_handler
counter = 0
def button_pressed():
print("Button pressed!")
counter = 0
button_pin = Pin(14, Pin.IN, Pin.PULL_UP)
button_handler = debounce(button_pin, button_pressed)
button_pin.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)
while True:
if counter <= 10:
print("Press the button")
elif counter > 10 and counter < 20:
print("Come on....Press the button.")
else:
print("PRESS THE BUTTON!")
time.sleep(5)
counter += 1

@ -0,0 +1,12 @@
# Sea Monkey Air
## Equipment
- RP2040
- Hiletgo L9110S DC Motor drive module
- 12v DC peristaltic pump
- 9v power supply
- RP2040 Breakout board (KEYESTUDIO Raspberry Pi PICO IO Shield Pico Breakout Board for Raspberry Pi Pico)
##

@ -0,0 +1,20 @@
import time
from motor import PWMMotor
MOTOR_PIN_A = 2
MOTOR_PIN_B = 3
PUMP_ON_TIME = 60
PUMP_SLEEP_TIME = 60 * 9
pump = PWMMotor(MOTOR_PIN_A, MOTOR_PIN_B)
print("Initialized motor. Beginning pump service.")
while True:
print(f"Staring pump for {PUMP_ON_TIME}")
pump.set_speed(1.0)
time.sleep(PUMP_ON_TIME)
print(f"Stopping pump and sleeping. {PUMP_SLEEP_TIME}")
pump.stop()
time.sleep(PUMP_SLEEP_TIME)

@ -0,0 +1,56 @@
from machine import Pin, PWM
class PWMMotor:
def __init__(self, pin_ia, pin_ib, freq=1000, flip_dir=False):
"""
:param pin_ia: Pin connected to IA on L9110S
:param pin_ib: Pin connected to IB on L9110S
:param freq: PWM frequency (default 1000Hz)
:param flip_dir: Boolean to reverse logical forward/backward
"""
# Initialize PWM on both pins
self._pwm_a = PWM(Pin(pin_ia), freq=freq)
self._pwm_b = PWM(Pin(pin_ib), freq=freq)
# Start with motor off
self._pwm_a.duty_u16(0)
self._pwm_b.duty_u16(0)
self._flip_dir = flip_dir
self._speed = 0.0 # Range -1.0 to 1.0
def set_speed(self, speed):
"""
Sets motor speed and direction.
:param speed: Float between -1.0 (reverse) and 1.0 (forward)
"""
self._speed = max(-1.0, min(1.0, speed))
# Adjust for flip_dir preference
effective_speed = -self._speed if self._flip_dir else self._speed
# Convert 0.0-1.0 to 16-bit duty cycle (0-65535)
duty = int(abs(effective_speed) * 65535)
if effective_speed > 0:
# Forward: PWM on A, B held at 0
self._pwm_a.duty_u16(duty)
self._pwm_b.duty_u16(0)
elif effective_speed < 0:
# Reverse: B held at 0, PWM on B
self._pwm_a.duty_u16(0)
self._pwm_b.duty_u16(duty)
else:
# Stop
self.stop()
def stop(self):
self._pwm_a.duty_u16(0)
self._pwm_b.duty_u16(0)
self._speed = 0.0
def deinit(self):
"""Release the PWM hardware"""
self._pwm_a.deinit()
self._pwm_b.deinit()
Loading…
Cancel
Save