-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Max Rye
committed
Sep 28, 2022
1 parent
cbd327a
commit 6ccd735
Showing
11 changed files
with
967 additions
and
84 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,3 @@ | ||
# micropython | ||
# micropython | ||
|
||
### playing around with micropython and some sensors |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# This example shows you a simple, non-interrupt way of reading Pico Explorer's buttons with a loop that checks to see if buttons are pressed. | ||
|
||
import time | ||
from pimoroni import Button | ||
from picographics import PicoGraphics, DISPLAY_PICO_EXPLORER, PEN_P4 | ||
|
||
# We're only using a few colours so we can use a 4 bit/16 colour palette and save RAM! | ||
display = PicoGraphics(display=DISPLAY_PICO_EXPLORER, pen_type=PEN_P4) | ||
|
||
button_a = Button(12) | ||
button_b = Button(13) | ||
button_x = Button(14) | ||
button_y = Button(15) | ||
|
||
WHITE = display.create_pen(255, 255, 255) | ||
BLACK = display.create_pen(0, 0, 0) | ||
CYAN = display.create_pen(0, 255, 255) | ||
MAGENTA = display.create_pen(255, 0, 255) | ||
YELLOW = display.create_pen(255, 255, 0) | ||
GREEN = display.create_pen(0, 255, 0) | ||
|
||
|
||
# sets up a handy function we can call to clear the screen | ||
def clear(): | ||
display.set_pen(BLACK) | ||
display.clear() | ||
display.update() | ||
|
||
|
||
# set up | ||
clear() | ||
display.set_font("bitmap8") | ||
|
||
count = 0 | ||
while True: | ||
if button_a.read(): # if a button press is detected then... | ||
clear() # clear to black | ||
display.set_pen(WHITE) # change the pen colour | ||
display.text("Button A pressed", 10, 10, 240, 4) # display some text on the screen | ||
display.update() # update the display | ||
elif button_b.read(): | ||
clear() | ||
display.set_pen(CYAN) | ||
display.text("Button B pressed", 10, 10, 240, 4) | ||
display.update() | ||
elif button_x.read(): | ||
clear() | ||
display.set_pen(MAGENTA) | ||
display.text("Button X pressed", 10, 10, 240, 4) | ||
display.update() | ||
elif button_y.read(): | ||
clear() | ||
display.set_pen(YELLOW) | ||
display.text("Button Y pressed", 10, 10, 240, 4) | ||
display.update() | ||
if count > 500: | ||
clear() | ||
display.set_pen(GREEN) | ||
display.text("Press any button!", 10, 10, 240, 4) | ||
display.update() | ||
count=0 | ||
time.sleep(0.01) | ||
count+=1 |
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
from hcsr04 import HCSR04 | ||
from time import sleep | ||
import machine | ||
from picographics import PicoGraphics, DISPLAY_PICO_EXPLORER, PEN_P8 | ||
from pimoroni import Buzzer | ||
|
||
display = PicoGraphics(display=DISPLAY_PICO_EXPLORER, pen_type=PEN_P8) | ||
|
||
WIDTH, HEIGHT = display.get_bounds() | ||
BLACK = display.create_pen(0, 0, 0) | ||
WHITE = display.create_pen(255, 255, 255) | ||
|
||
STATUS_LED = machine.Pin(25, machine.Pin.OUT) | ||
RED_LED = machine.Pin(2, machine.Pin.OUT) | ||
GREEN_LED = machine.Pin(6, machine.Pin.OUT) | ||
BUZZER = Buzzer(5) | ||
|
||
# BUZZER.set_tone(4970) | ||
# BUZZER.set_tone(-1) | ||
# STATUS_LED.value(1) | ||
# RED_LED.value(1) | ||
# GREEN_LED.value(1) | ||
|
||
sensor = HCSR04(trigger_pin=4, echo_pin=0) | ||
|
||
while True: | ||
STATUS_LED.value(1) | ||
distance = sensor.distance_cm() | ||
display.set_pen(BLACK) | ||
display.clear() | ||
display.set_pen(WHITE) | ||
display.text(f"Distance: {distance}cm", 10, 10, 240, 4) | ||
display.update() | ||
|
||
if distance < 10: | ||
GREEN_LED.value(0) | ||
RED_LED.value(1) | ||
BUZZER.set_tone(4970) | ||
else: | ||
RED_LED.value(0) | ||
GREEN_LED.value(1) | ||
BUZZER.set_tone(-1) | ||
|
||
sleep(0.01) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
from machine import Pin, time_pulse_us | ||
from utime import sleep_us | ||
|
||
__version__ = '0.2.1' | ||
__author__ = 'Roberto Sánchez' | ||
__license__ = "Apache License 2.0. https://www.apache.org/licenses/LICENSE-2.0" | ||
|
||
class HCSR04: | ||
""" | ||
Driver to use the untrasonic sensor HC-SR04. | ||
The sensor range is between 2cm and 4m. | ||
The timeouts received listening to echo pin are converted to OSError('Out of range') | ||
""" | ||
# echo_timeout_us is based in chip range limit (400cm) | ||
def __init__(self, trigger_pin, echo_pin, echo_timeout_us=500*2*30): | ||
""" | ||
trigger_pin: Output pin to send pulses | ||
echo_pin: Readonly pin to measure the distance. The pin should be protected with 1k resistor | ||
echo_timeout_us: Timeout in microseconds to listen to echo pin. | ||
By default is based in sensor limit range (4m) | ||
""" | ||
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): | ||
""" | ||
Send the pulse to trigger and listen on echo pin. | ||
We use the method `machine.time_pulse_us()` to get the microseconds until the echo is received. | ||
""" | ||
self.trigger.value(0) # Stabilize the sensor | ||
sleep_us(5) | ||
self.trigger.value(1) | ||
# Send a 10us pulse. | ||
sleep_us(10) | ||
self.trigger.value(0) | ||
try: | ||
pulse_time = time_pulse_us(self.echo, 1, self.echo_timeout_us) | ||
# time_pulse_us returns -2 if there was timeout waiting for condition; and -1 if there was timeout during the main measurement. It DOES NOT raise an exception | ||
# ...as of MicroPython 1.17: http://docs.micropython.org/en/v1.17/library/machine.html#machine.time_pulse_us | ||
if pulse_time < 0: | ||
MAX_RANGE_IN_CM = const(500) # it's really ~400 but I've read people say they see it working up to ~460 | ||
pulse_time = int(MAX_RANGE_IN_CM * 29.1) # 1cm each 29.1us | ||
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): | ||
""" | ||
Get the distance in milimeters without floating point operations. | ||
""" | ||
pulse_time = self._send_pulse_and_wait() | ||
|
||
# To calculate the distance we get the pulse_time and divide it by 2 | ||
# (the pulse walk the distance twice) and by 29.1 becasue | ||
# the sound speed on air (343.2 m/s), that It's equivalent to | ||
# 0.34320 mm/us that is 1mm each 2.91us | ||
# pulse_time // 2 // 2.91 -> pulse_time // 5.82 -> pulse_time * 100 // 582 | ||
mm = pulse_time * 100 // 582 | ||
return mm | ||
|
||
def distance_cm(self): | ||
""" | ||
Get the distance in centimeters with floating point operations. | ||
It returns a float | ||
""" | ||
pulse_time = self._send_pulse_and_wait() | ||
|
||
# To calculate the distance we get the pulse_time and divide it by 2 | ||
# (the pulse walk the distance twice) and by 29.1 becasue | ||
# the sound speed on air (343.2 m/s), that It's equivalent to | ||
# 0.034320 cm/us that is 1cm each 29.1us | ||
cms = (pulse_time / 2) / 29.1 | ||
return cms |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,75 +0,0 @@ | ||
import time | ||
import machine | ||
import dht | ||
import random | ||
from picographics import PicoGraphics, DISPLAY_PICO_EXPLORER, PEN_P8 | ||
|
||
sensor = dht.DHT11(machine.Pin(2)) | ||
|
||
display = PicoGraphics(display=DISPLAY_PICO_EXPLORER, pen_type=PEN_P8) | ||
|
||
WIDTH, HEIGHT = display.get_bounds() | ||
BLACK = display.create_pen(0, 0, 0) | ||
WHITE = display.create_pen(255, 255, 255) | ||
|
||
STATUS_LED = machine.Pin(25, machine.Pin.OUT) | ||
YELLOW_LED = machine.Pin(3, machine.Pin.OUT) | ||
GREEN_LED = machine.Pin(4, machine.Pin.OUT) | ||
BLUE_LED = machine.Pin(7, machine.Pin.OUT) | ||
RED_LED = machine.Pin(0, machine.Pin.OUT) | ||
|
||
def turn_of_leds(): | ||
# check all leds | ||
RED_LED.value(0) | ||
YELLOW_LED.value(0) | ||
GREEN_LED.value(0) | ||
BLUE_LED.value(0) | ||
|
||
def test_leds(): | ||
# check all leds | ||
RED_LED.value(1) | ||
time.sleep(1) | ||
RED_LED.value(1) | ||
YELLOW_LED.value(1) | ||
time.sleep(1) | ||
YELLOW_LED.value(0) | ||
GREEN_LED.value(1) | ||
time.sleep(1) | ||
GREEN_LED.value(0) | ||
BLUE_LED.value(1) | ||
time.sleep(1) | ||
BLUE_LED.value(0) | ||
|
||
test_leds() | ||
while True: | ||
# show the program has started | ||
STATUS_LED.value(1) | ||
try: | ||
time.sleep(2) | ||
sensor.measure() | ||
t = sensor.temperature() | ||
h = sensor.humidity() | ||
display.set_pen(BLACK) | ||
display.clear() | ||
display.set_pen(WHITE) | ||
display.text(f"Temp: {t} C \nHum: {h} %", 10, 10, 240, 4) | ||
display.update() | ||
# print('Temperature: %3.1f C' %t) | ||
# print('Humidity: %3.1f %%' %h) | ||
|
||
turn_of_leds() | ||
if t < 18: | ||
# cold boi | ||
BLUE_LED.value(1) | ||
elif t >= 18 and t <= 20: | ||
YELLOW_LED.value(1) | ||
elif t > 20 and t <= 24: | ||
# perfect | ||
GREEN_LED.value(1) | ||
elif t > 24: | ||
# hot boi | ||
RED_LED.value(1) | ||
except OSError as e: | ||
print('Sensor Reading Failed') | ||
print(e) | ||
|
||
Oops, something went wrong.