Raspberry Pi - Potentiometer Piezo Buzzer
This tutorial instructs you how to use Raspberry Pi and potentiometer to control piezo buzzer. In detail:
- Raspberry Pi determines if the potentiometer's analog value is above or below a threshold, and make sound accordingly
- Raspberry Pi determines if the potentiometer's output voltage is above or below a threshold, and make sound accordingly
- If the potentiometer's output voltage is greater than a threshold, Raspberry Pi can also play a melody of a song
Hardware Preparation
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you.
Additionally, some of these links are for products from our own brand, DIYables.
Additionally, some of these links are for products from our own brand, DIYables.
Overview of Piezo Buzzer and Potentiometer
If you are unfamiliar with piezo buzzer and potentiometer (including pinout, functioning, and programming), the following tutorials can help:
Wiring Diagram
This image is created using Fritzing. Click to enlarge image
Raspberry Pi Code - Simple Sound
Detailed Instructions
- Make sure you have Raspbian or any other Raspberry Pi compatible operating system installed on your Pi.
- Make sure your Raspberry Pi is connected to the same local network as your PC.
- Make sure your Raspberry Pi is connected to the internet if you need to install some libraries.
- If this is the first time you use Raspberry Pi, See how to set up the Raspberry Pi
- Connect your PC to the Raspberry Pi via SSH using the built-in SSH client on Linux and macOS or PuTTY on Windows. See to how connect your PC to Raspberry Pi via SSH.
- Make sure you have the RPi.GPIO library installed. If not, install it using the following command:
sudo apt-get update
sudo apt-get install python3-rpi.gpio
- Install the Adafruit_ADS1x15 library by running the following commands on your Raspberry Pi terminal:
sudo pip install Adafruit-ADS1x15
- Create a Python script file potentiometer_buzzer.py and add the following code:
"""
This Raspberry Pi code was developed by newbiely.com
This Raspberry Pi code is made available for public use without any restriction
For comprehensive instructions and wiring diagrams, please visit:
https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-potentiometer-piezo-buzzer
"""
import time
import RPi.GPIO as GPIO
import Adafruit_ADS1x15
# Constants
ADC_CHANNEL = 0 # Analog channel on ADS1015
GAIN = 1 # Gain (1, 2/3, 1, 2, 4, 8, 16)
BUZZER_PIN = 23 # Raspberry Pi GPIO pin connected to the piezo buzzer
# Threshold for triggering the buzzer
THRESHOLD = 700 # Adjust this value based on your requirement
# Setup GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUZZER_PIN, GPIO.OUT)
# Create ADS1x15 instance
ads = Adafruit_ADS1x15.ADS1015()
try:
while True:
# Read the raw ADC value from the potentiometer
pot_value = ads.read_adc(ADC_CHANNEL, gain=GAIN)
# Trigger the buzzer if the analog value is greater than the threshold
if pot_value > THRESHOLD:
GPIO.output(BUZZER_PIN, GPIO.HIGH)
else:
GPIO.output(BUZZER_PIN, GPIO.LOW)
print(f"Potentiometer Value: {pot_value}")
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.output(BUZZER_PIN, GPIO.LOW) # Turn off the buzzer before cleanup
GPIO.cleanup()
- Save the file and run the Python script by executing the following command in the terminal:
python3 potentiometer_buzzer.py
- Turn the potentiometer knob.
- Listen to the sound coming from the piezo buzzer.
The script runs in an infinite loop continuously until you press Ctrl + C in the terminal.
Code Explanation
Check out the line-by-line explanation contained in the comments of the source code!
Raspberry Pi plays the melody of the song
Let play the "Jingle Bells" melody when the potentiometer is turned to a threshold value.
Detailed Instructions
- Create a Python script file potentiometer_buzzer_song.py and add the following code:
"""
This Raspberry Pi code was developed by newbiely.com
This Raspberry Pi code is made available for public use without any restriction
For comprehensive instructions and wiring diagrams, please visit:
https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-potentiometer-piezo-buzzer
"""
import time
import RPi.GPIO as GPIO
import Adafruit_ADS1x15
# Constants
ADC_CHANNEL = 0 # Analog channel on ADS1015
GAIN = 1 # Gain (1, 2/3, 1, 2, 4, 8, 16)
BUZZER_PIN = 23 # Raspberry Pi GPIO pin connected to the piezo buzzer
# Threshold for triggering the buzzer
THRESHOLD = 700 # Adjust this value based on your requirement
# Setup GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUZZER_PIN, GPIO.OUT)
# Create ADS1x15 instance
ads = Adafruit_ADS1x15.ADS1015()
# Constants for note names and their corresponding frequencies
C4 = 261
D4 = 293
E4 = 329
F4 = 349
G4 = 392
A4 = 440
B4 = 493
# Dictionary to map numeric values to note names
note_names = {
C4: "C4",
D4: "D4",
E4: "E4",
F4: "F4",
G4: "G4",
A4: "A4",
B4: "B4",
}
# List of notes in the "Jingle Bells" melody
melody = [
E4, E4, E4, E4, E4, E4, E4, G4, C4, D4, E4, F4, F4, F4, F4, F4, E4, E4, E4, E4, E4, D4, D4, E4, D4, G4
]
# List of note durations (in milliseconds)
note_durations = [
200, 200, 400, 200, 200, 400, 200, 200, 200, 200, 200, 200, 200, 400, 200, 200, 200, 200, 200, 200, 200, 200, 200, 400, 200, 200
]
# Pause duration between notes (in milliseconds)
pause_duration = 300
def play_tone(pin, frequency, duration):
# Calculate the period based on the frequency
period = 1.0 / frequency
# Calculate the time for half of the period
half_period = period / 2.0
# Calculate the number of cycles for the given duration
cycles = int(duration / period)
for _ in range(cycles):
# Set the GPIO pin to HIGH
GPIO.output(pin, GPIO.HIGH)
# Wait for half of the period
time.sleep(half_period)
# Set the GPIO pin to LOW
GPIO.output(pin, GPIO.LOW)
# Wait for the other half of the period
time.sleep(half_period)
def play_jingle_bells():
for i in range(len(melody)):
note_duration = note_durations[i] / 1000.0
note_freq = melody[i]
note_name = note_names.get(note_freq, "Pause")
print(f"Playing {note_name} (Frequency: {note_freq} Hz) for {note_duration} seconds")
play_tone(BUZZER_PIN, note_freq, note_duration)
time.sleep(pause_duration / 1000.0)
GPIO.output(BUZZER_PIN, GPIO.LOW)
try:
while True:
# Read the raw ADC value from the potentiometer
pot_value = ads.read_adc(ADC_CHANNEL, gain=GAIN)
# Trigger the buzzer if the analog value is greater than the threshold
if pot_value > THRESHOLD:
GPIO.output(BUZZER_PIN, GPIO.HIGH)
else:
GPIO.output(BUZZER_PIN, GPIO.LOW)
print(f"Potentiometer Value: {pot_value}")
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.output(BUZZER_PIN, GPIO.LOW) # Turn off the buzzer before cleanup
GPIO.cleanup()
- Save the file and run the Python script by executing the following command in the terminal:
python3 potentiometer_buzzer_song.py
- Turn the potentiometer.
- Hear the song from the piezo buzzer.
Code Explanation
Check out the line-by-line explanation contained in the comments of the source code!