Raspberry Pi en commande d'un ruban LED RGB

Le principe

Le raspberry Pi est équipé d'un écran PITFT 320 X 240 tactile de chez Adafruit.
3 sliders ont été créés, pour les 3 couleurs : rouge, vert, bleu.
Le déplacement du curseur sur les sliders règle individuellement la luminosité des 3 couleurs du ruban de LED.

L'écran tactile et sa commande

Le câblage

Le schéma de l'électronique de commande se réalise aisément sur une plaque perforée et pastillée.



Le ruban à LED est alimenté sous 12 V. Il possède un connecteur à 4 broches pour le +12V, les LED rouge, verte et bleue. Les transistors 2N1711 servent d'interface de puissance.
Côté Raspberry seul la masse et les broches GPIO17, 27 et 22 sont à connecter à l'interface.

Le brochage pour les transistors est donné.

D'autres transistors peuvent être utilisés s'ils supportent un Vce de 12 V et un Ic de 0,5 A.
j'avais ces transistors dans mes tiroirs mais on peut les remplacer par des Mosfet ( Schéma ci-contre).



Le programme sous Python

Avant tout, il faut installer correctement l'afficheur TFT et calibrer l'écran tactile. Voir les infos sur le site d'ADAFRUIT.

Avec un Raspbery Pi 2 et Pi .., il faut charger la bibliothèque compatible RPi.GPIO.0.7.0, l'archive est disponible sur le site Python. L' installation se fait avec :
$ pip install RPi.GPIO

Il est aussi nécessaire d'installer la bibliothèque graphique Pygame.

Pour l'installation de Pygame, ouvrez un terminal LX et tapez la commande suivante :
$ python3 - m pip install - U pygame -- user

Le programme est simple, après avoir créé 3 sliders avec la bibliothèque Pygame, il renvoie la position de la souris( doigt sur l'écran), détermine par une fenêtre le curseur concerné et modifie la largeur d'impulsion de la sortie PWM GPIO17 ou 27 ou 22.
Le programme a besoin de charger les images qui doivent se trouver dans le même dossier que le programme slider_3.py.


Le programme Python fonctionne avec l'environnement python 2.7.
Pour lancer le programme slider_3.py sur l'écran TFT, il suffit en ligne de commande de se placer dans le dossier où se trouve le programme et de taper la commande :
$ sudo python slider_3.py

 
#!/usr/bin/python
# Jmd **** Mai 2015 *******
import os
import pygame, sys
from pygame.locals import *
import RPi.GPIO as GPIO
os.environ["SDL_FBDEV"] = "/dev/fb1"
os.environ["SDL_MOUSEDEV"] = "/dev/input/touchscreen"
os.environ["SDL_MOUSEDRV"] = "TSLIB"

# set Pwm and GPIO
GPIO.setmode(GPIO.BCM)

GPIO_RED = 17
GPIO_GREEN = 27
GPIO_BLUE = 22

GPIO.setup(GPIO_RED,GPIO.OUT)
GPIO.setup(GPIO_GREEN,GPIO.OUT)
GPIO.setup(GPIO_BLUE,GPIO.OUT)
pr = GPIO.PWM(GPIO_RED,100)
pg = GPIO.PWM(GPIO_GREEN,100)
pb = GPIO.PWM(GPIO_BLUE,100)

pr.start(0)
pg.start(0)
pb.start(0)

# set window size
width = 320
height = 200

# initilaise pygame
pygame.init()
screen = pygame.display.set_mode((width,height),1,16)
slider_g= pygame.image.load('cursor_g.gif')
slider_r= pygame.image.load('cursor_r.gif')
slider_b= pygame.image.load('cursor_b.gif')
background= pygame.image.load('slider_gnd.jpg')
button_quit = pygame.image.load('exit.tiff')
pygame.mouse.set_visible(False)

#starting position
x = xg = xr = xb = 0
screen.blit(background,(0,0))
screen.blit(button_quit,(260,0))
screen.blit(slider_r,(x,53))
screen.blit(slider_g,(x,100))
screen.blit(slider_b,(x,148))
pygame.display.update(pygame.Rect(0,0,width,height))

#cursor red
def cursor_r():
    screen.blit(background,(0,0))
    screen.blit(button_quit,(260,0))
    global xr
    xr = x
    screen.blit(slider_r,(x,53))
    screen.blit(slider_g,(xg,100))
    screen.blit(slider_b,(xb,148))
    pygame.display.update(pygame.Rect(0,0,width,height))
    pr.ChangeDutyCycle(int(x/2.8))
    print "Red",
    print int(x/2.8),
    print "%"

#cursor green
def cursor_g():
    global xg
    xg = x
    screen.blit(background,(0,0))
    screen.blit(button_quit,(260,0))
    screen.blit(slider_g,(x,100))
    screen.blit(slider_r,(xr,53))
    screen.blit(slider_b,(xb,148))
    pygame.display.update(pygame.Rect(0,0,width,height))
    pg.ChangeDutyCycle(int(x/2.8))
    print "Green",
    print int(x/2.8),
    print "%"

#cursor blue
def cursor_b():
    global xb
    xb = x
    screen.blit(background,(0,0))
    screen.blit(button_quit,(260,0))
    screen.blit(slider_b,(x,148))
    screen.blit(slider_g,(xg,100))
    screen.blit(slider_r,(xr,53))           
    pygame.display.update(pygame.Rect(0,0,width,height))
    pb.ChangeDutyCycle(int(x/2.8))
    print "Blue",
    print int(x/2.8),
    print "%"

def on_click():
    click_pos = (pygame.mouse.get_pos() [0], pygame.mouse.get_pos() [1])
    #check to see if exit has been pressed
    if 270 <= click_pos[0] <= 310 and 10 <= click_pos[1] <=30:
        print "You pressed exit"		
        pygame.quit()
        GPIO.cleanup()
        sys.exit()
            
s = 0
while s == 0:
    button = pygame.mouse.get_pressed()
    if button[0] != 0:
        pos = pygame.mouse.get_pos()
        x = pos[0]
        y = pos[1]
        if x < 5:
            x = 0
        if x > 280:
            x = 280
        if y > 50 and y < 80:
            cursor_r()
        if y > 100 and y < 130:
            cursor_g()
        if y > 150 and y < 180:
            cursor_b()
        on_click()
       
    # check for ESC key pressed, or pygame window closed, to quit
    for event in pygame.event.get():
       if event.type == QUIT:
          pygame.quit()
          GPIO.cleanup()
          sys.exit()
       elif event.type == KEYDOWN:
          if event.key == K_ESCAPE:
             pygame.quit()
             GPIO.cleanup()
             sys.exit()

 

 

 

 

 

 

 

 

 

 

 

 

 

Les fichiers (format.zip)