diff --git a/MP_REMOTE_NOTES.md b/MP_REMOTE_NOTES.md new file mode 100644 index 0000000..e64afca --- /dev/null +++ b/MP_REMOTE_NOTES.md @@ -0,0 +1,2 @@ +# MP Remote + diff --git a/debounce/debounce.py b/debounce/debounce.py new file mode 100644 index 0000000..5d12890 --- /dev/null +++ b/debounce/debounce.py @@ -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 diff --git a/seamonkey_air/README.md b/seamonkey_air/README.md new file mode 100644 index 0000000..9fdb739 --- /dev/null +++ b/seamonkey_air/README.md @@ -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) + +## \ No newline at end of file diff --git a/seamonkey_air/main.py b/seamonkey_air/main.py new file mode 100644 index 0000000..2102d35 --- /dev/null +++ b/seamonkey_air/main.py @@ -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) diff --git a/seamonkey_air/motor.py b/seamonkey_air/motor.py new file mode 100644 index 0000000..0076484 --- /dev/null +++ b/seamonkey_air/motor.py @@ -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()