Changing the Color of an RGB LED

In this project, you’ll learn how to control an Changing the Color of an RGB LED using Pulse Width Modulation (PWM) with your Raspberry Pi. An RGB LED has three internal LEDs: red, green, and blue, and by adjusting the intensity of these LEDs, you can create a wide range of colors. We’ll use Tkinter, a Python GUI library, to create a simple user interface that lets you change the color of the RGB LED by adjusting the PWM values of the red, green, and blue LEDs.

Purpose of the Project

The main goal of this project is to demonstrate how to create a user-friendly graphical interface using Tkinter to control the color of an RGB LED. You will:

  • Understand how to control the intensity of the red, green, and blue LEDs through PWM.
  • Build a graphical user interface (GUI) to adjust the brightness of each color channel.
  • Learn how to combine different PWM values to create various colors.

Data Types and Variable Table for Changing the Color of an RGB LED

Variable Data Type Purpose
red_pin Integer Stores the GPIO pin number for the red LED
green_pin Integer Stores the GPIO pin number for the green LED
blue_pin Integer Stores the GPIO pin number for the blue LED
red_duty_cycle Integer Controls the intensity of the red LED (0–100)
green_duty_cycle Integer Controls the intensity of the green LED (0–100)
blue_duty_cycle Integer Controls the intensity of the blue LED (0–100)

Syntax Table for Changing the Color of an RGB LED

Topic Syntax Example
Importing Tkinter import tkinter as tk import tkinter as tk
Importing RPi.GPIO import RPi.GPIO as GPIO import RPi.GPIO as GPIO
PWM Initialization pwm = GPIO.PWM(pin, frequency) pwm = GPIO.PWM(18, 1000)
Starting PWM pwm.start(duty_cycle) pwm.start(50)
Changing Duty Cycle pwm.ChangeDutyCycle(duty_cycle) pwm.ChangeDutyCycle(75)
Creating a Scale in Tkinter scale = tk.Scale(root, from_=0, to=100, …) scale = tk.Scale(root, from_=0, to=100, orient=”horizontal”)

Components Required

  • Raspberry Pi (any model with GPIO support)
  • RGB LED (common anode or cathode)
  • 3 x 220-ohm resistors
  • Jumper wires

Circuit Connection Table

Raspberry Pi Pin RGB LED Component Connection
GPIO Pin (e.g., GPIO 18) Red leg Connect to the red leg of the RGB LED through a resistor
GPIO Pin (e.g., GPIO 23) Green leg Connect to the green leg of the RGB LED through a resistor
GPIO Pin (e.g., GPIO 24) Blue leg Connect to the blue leg of the RGB LED through a resistor
Ground Pin (GND) Common anode/cathode Connect to the common anode or cathode of the RGB LED

Warning

  • Always use current-limiting resistors (e.g., 220 ohms) to prevent burning out the RGB LED.
  • Make sure to correctly identify the common anode or cathode type of your RGB LED before wiring it.

Circuit Analysis

The RGB LED contains three internal LEDs: red, green, and blue. By adjusting the PWM duty cycle for each color channel, you can mix these colors to produce a wide range of colors. The Raspberry Pi controls the intensity of each LED by varying the PWM signal for each channel.

Installing Required Libraries

You’ll need to install RPi.GPIO and Tkinter. Tkinter usually comes pre-installed on most Raspberry Pi systems.

sudo apt-get install python3-rpi.gpio

sudo apt-get install python3-tk

Writing the Code for Changing the Color of an RGB LED

main.py (Tkinter Application Code)

import tkinter as tk

import RPi.GPIO as GPIO

 

# GPIO setup

GPIO.setmode(GPIO.BCM)

red_pin = 18

green_pin = 23

blue_pin = 24

GPIO.setup(red_pin, GPIO.OUT)

GPIO.setup(green_pin, GPIO.OUT)

GPIO.setup(blue_pin, GPIO.OUT)

 

# PWM setup

pwm_red = GPIO.PWM(red_pin, 1000)

pwm_green = GPIO.PWM(green_pin, 1000)

pwm_blue = GPIO.PWM(blue_pin, 1000)

pwm_red.start(0)

pwm_green.start(0)

pwm_blue.start(0)

 

# Tkinter setup

root = tk.Tk()

root.title(“RGB LED Color Control”)

 

# Functions to update PWM duty cycle for each color

def update_red(value):

    pwm_red.ChangeDutyCycle(int(value))

    label_red.config(text=f”Red: {value}%”)

 

def update_green(value):

    pwm_green.ChangeDutyCycle(int(value))

    label_green.config(text=f”Green: {value}%”)

 

def update_blue(value):

    pwm_blue.ChangeDutyCycle(int(value))

    label_blue.config(text=f”Blue: {value}%”)

 

# Creating UI elements

label_red = tk.Label(root, text=”Adjust Red Brightness”, font=(“Helvetica”, 16))

label_red.pack(pady=10)

scale_red = tk.Scale(root, from_=0, to=100, orient=”horizontal”, command=update_red)

scale_red.pack(pady=10)

 

label_green = tk.Label(root, text=”Adjust Green Brightness”, font=(“Helvetica”, 16))

label_green.pack(pady=10)

scale_green = tk.Scale(root, from_=0, to=100, orient=”horizontal”, command=update_green)

scale_green.pack(pady=10)

 

label_blue = tk.Label(root, text=”Adjust Blue Brightness”, font=(“Helvetica”, 16))

label_blue.pack(pady=10)

scale_blue = tk.Scale(root, from_=0, to=100, orient=”horizontal”, command=update_blue)

scale_blue.pack(pady=10)

 

# Run the Tkinter main loop

root.mainloop()

 

# Cleanup GPIO

pwm_red.stop()

pwm_green.stop()

pwm_blue.stop()

GPIO.cleanup()

 

Explanation of the Code

  • Tkinter is used to create a simple GUI with three sliders, each controlling the red, green, and blue channels of the RGB LED.
  • The update_red(), update_green(), and update_blue() functions adjust the duty cycle for each PWM signal, changing the intensity of the respective color channel.
  • The PWM signals for each color channel are initialized using GPIO.PWM(), and the brightness is controlled by adjusting the duty cycle.

Running the Code and Checking the Output

  1. Save the code as main.py.
  2. In your Raspberry Pi terminal, navigate to the folder containing main.py.
  3. Run the Python script:

bash

Copy code

python3 main.py

 

  1. The Tkinter window will appear with three sliders labeled “Red,” “Green,” and “Blue.” As you adjust the sliders, the color of the RGB LED will change based on the PWM signals for each color channel.

Expanding the Project

Here are some ideas to expand this project:

  • Add color presets (like red, green, blue, yellow) using buttons in the Tkinter interface.
  • Implement a color picker that allows users to choose from a palette.
  • Create a web-based interface for controlling the RGB LED using Flask or another web framework.

Common Problems and Solutions

Problem Solution
Incorrect color displayed by RGB LED Double-check the pin connections and ensure each GPIO pin controls the correct color channel.
PWM signals not changing LED color Ensure PWM is properly set up and started for each pin.
Tkinter window not displaying Verify that Tkinter is installed using sudo apt-get install python3-tk.

FAQ

Q: How do I mix colors using the RGB LED?

A: You can mix colors by adjusting the brightness of each channel (red, green, and blue) using PWM. For example, setting red to 100%, green to 50%, and blue to 0% will give you an orange color.

Q: Can I control multiple RGB LEDs with this setup?

A: Yes, you can control multiple RGB LEDs by assigning different GPIO pins for each LED and creating additional sliders for each color channel in the Tkinter interface.

Conclusion

By completing this project, you have learned how to control the color of an RGB LED using PWM and the Tkinter graphical user interface. You’ve built a user-friendly interface that allows you to easily adjust the brightness of the red, green, and blue channels, which in turn changes the color of the RGB LED. This project is a great introduction to using PWM with Raspberry Pi GPIO pins and integrating a simple GUI to control hardware.

You can expand upon this foundation by adding more advanced features like color presets, integration with web interfaces, or controlling multiple RGB LEDs. Whether you’re working on a fun home project or developing interactive systems, this guide serves as a solid starting point for controlling RGB LEDs with the Raspberry Pi.