Add valves and moisture sensors
This commit is contained in:
parent
c37d349608
commit
a4675354bf
13
pico/src/actors/valve.py
Normal file
13
pico/src/actors/valve.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from machine import Pin
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
class ValveActor:
|
||||||
|
p: Pin
|
||||||
|
|
||||||
|
def __init__(self, p: int):
|
||||||
|
self.p = Pin(p, Pin.OUT)
|
||||||
|
|
||||||
|
async def dispense(self, t: float):
|
||||||
|
self.p.value(1)
|
||||||
|
await asyncio.sleep(t)
|
||||||
|
self.p.value(0)
|
@ -1,5 +1,7 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
|
from actors.valve import ValveActor
|
||||||
|
from sensors.moisture import MoistureSensor
|
||||||
from vendor.microdot import Microdot, Request
|
from vendor.microdot import Microdot, Request
|
||||||
|
|
||||||
from statusled import STATUS_LED
|
from statusled import STATUS_LED
|
||||||
@ -24,13 +26,60 @@ async def read_sensor():
|
|||||||
log.info(f"distance: {d}mm")
|
log.info(f"distance: {d}mm")
|
||||||
await asyncio.sleep(0.5)
|
await asyncio.sleep(0.5)
|
||||||
|
|
||||||
|
async def toggle_valves():
|
||||||
|
log = Logger("vlvs", Color.GREEN)
|
||||||
|
valves = [
|
||||||
|
ValveActor(19),
|
||||||
|
ValveActor(20),
|
||||||
|
ValveActor(21),
|
||||||
|
]
|
||||||
|
while True:
|
||||||
|
for i, v in enumerate(valves):
|
||||||
|
log.info(f"[{i}]")
|
||||||
|
await v.dispense(1)
|
||||||
|
await asyncio.sleep(0.5)
|
||||||
|
|
||||||
|
async def read_moisture():
|
||||||
|
log = Logger("mstr", Color.YELLOW)
|
||||||
|
sensors = [
|
||||||
|
MoistureSensor(26, submerged=39_000),
|
||||||
|
MoistureSensor(27, submerged=39_000),
|
||||||
|
MoistureSensor(28, submerged=39_000),
|
||||||
|
]
|
||||||
|
"""
|
||||||
|
minmax = [
|
||||||
|
(65535, 0)
|
||||||
|
for _ in sensors
|
||||||
|
]
|
||||||
|
while True:
|
||||||
|
res: list[str] = []
|
||||||
|
for i, sensor in enumerate(sensors):
|
||||||
|
v = sensor.read()
|
||||||
|
v_min, v_max = minmax[i]
|
||||||
|
v_min = min(v_min, v)
|
||||||
|
v_max = max(v_max, v)
|
||||||
|
minmax[i] = (v_min, v_max)
|
||||||
|
res.append(f"[{i}] v={v} min={v_min} max={v_max}")
|
||||||
|
log.info("\n".join(res))
|
||||||
|
await asyncio.sleep(0.2)
|
||||||
|
"""
|
||||||
|
while True:
|
||||||
|
values = [
|
||||||
|
sensor.read()
|
||||||
|
for sensor in sensors
|
||||||
|
]
|
||||||
|
log.info(f"{values=}")
|
||||||
|
await asyncio.sleep(0.2)
|
||||||
|
|
||||||
|
|
||||||
async def _main():
|
async def _main():
|
||||||
await asyncio.gather(
|
await asyncio.gather(
|
||||||
STATUS_LED.task(),
|
STATUS_LED.task(),
|
||||||
ensure_network(),
|
read_moisture(),
|
||||||
read_sensor(),
|
toggle_valves(),
|
||||||
app.start_server(port=80)
|
# ensure_network(),
|
||||||
|
# read_sensor(),
|
||||||
|
# app.start_server(port=80),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
19
pico/src/sensors/moisture.py
Normal file
19
pico/src/sensors/moisture.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from machine import Pin, ADC
|
||||||
|
|
||||||
|
|
||||||
|
class MoistureSensor:
|
||||||
|
a: ADC
|
||||||
|
|
||||||
|
# calibration
|
||||||
|
submerged: int
|
||||||
|
dry: int
|
||||||
|
|
||||||
|
def __init__(self, a: int, submerged: int = 0, dry: int = 65535):
|
||||||
|
a_pin = Pin(a, Pin.IN)
|
||||||
|
self.a = ADC(a_pin)
|
||||||
|
self.submerged = submerged
|
||||||
|
self.dry = dry
|
||||||
|
|
||||||
|
def read(self):
|
||||||
|
return (self.a.read_u16() - self.dry) / (self.submerged - self.dry)
|
||||||
|
# return self.a.read_u16()
|
Loading…
Reference in New Issue
Block a user