Getting Set Up for CircuitPython
This project is written in CircuitPython. If you're new to CircuitPython, visit the Welcome to CircuitPython guide for everything you need to know to get started!
For in-depth instructions on how to program your Circuit Playground Express with the code shown below, visit this page in the Circuit Playground Express guide.
While you can edit CircuitPython in any text editor of your choice, Adafruit highly suggests using Mu Editor, which contains helpers and an interactive REPL. To install Mu and learn how to use it, visit the Mu guide.
This code uses the Adafruit HC-SR04 library, which you will need to download and add to the lib folder on your Circuit Playground Express, if it's not already there. You can learn about installing the adafruit_HC-SR04
library in the Library guide. It is easiest to install the whole library package.
The Code
In a nutshell: This code sets up the HC-SR04 as a sensor for the Circuit Playground Express to read. The distances sent from the sensor can range from zero to over 400 cm. With a little math (the pitchMultiplier
variable), we turn the distance into a frequency for the Circuit Playground Express to play through the connected speaker. We also use the wheel
helper function, commonly used in Adafruit code with rainbow animations, to turn this distance measurement into an RGB value for the NeoPixels on-board the Circuit Playground Express.
When the sensor detects an object, your hand for instance, within 3 - 25 cm, it plays a sound and flashes its lights!
To learn more about the super handy wheel
function and how it works, see this page in Kattni Rembor's Ikea Lamp Hack guide.
# SPDX-FileCopyrightText: 2018 Anne Barela for Adafruit Industries # # SPDX-License-Identifier: MIT import time import board from rainbowio import colorwheel import adafruit_hcsr04 from adafruit_circuitplayground.express import cpx # This line creates the distance sensor as an object. sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.D9, echo_pin=board.D6, timeout=0.1) pixels = cpx.pixels pitchMultiplier = 300 # Change this value to modify the pitch of the theremin. while True: try: handDistance = int(sonar.distance) print("Distance:", handDistance) except RuntimeError: print("retrying!") time.sleep(.00001) pitch = handDistance*pitchMultiplier # Limits on the distances that trigger sound/light to between 3 and 25 cm. if (handDistance >= 3) & (handDistance < 25): cpx.play_tone(pitch, 0.1) pixels.fill(colorwheel(handDistance*10)) pixels.show() time.sleep(.00001) print(pitch) else: cpx.stop_tone() pixels.fill((0, 0, 0)) pixels.show()
Text editor powered by tinymce.