Pular para o conteúdo principal

Grove - LED RGB Encadeável

Grove - Chainable RGB LED é baseado no chip P9813, que é um driver de LED de cores completas. Ele fornece 3 drivers de corrente constante, bem como saída modulada de 256 tons de cinza. Ele se comunica com um MCU usando transmissão de 2 fios (Dados e Clock). Esta transmissão de 2 fios pode ser usada para encadear módulos adicionais Grove - Chainable RGB LED. A regeneração de clock incorporada aumenta a distância de transmissão. Este módulo Grove é adequado para qualquer projeto baseado em LEDs coloridos.

Versão

RevisãoDescriçõesLançamentoComo Comprar
v1Versão pública inicial (beta)5 de maio de 2011
v2Substitui P9813S16 por P9813S14 e muda o conector Grove de vertical para horizontal19 de abril de 2016

Especificações

  • Tensão de Operação: 5V
  • Corrente de Operação: 20mA
  • Protocolo de Comunicação: Serial
dica

Para mais detalhes sobre módulos Grove, consulte o Grove System

Plataformas Suportadas

ArduinoRaspberry Pi
cuidado

As plataformas mencionadas acima como suportadas são uma indicação da compatibilidade teórica ou de software do módulo. Na maioria dos casos, fornecemos apenas biblioteca de software ou exemplos de código para a plataforma Arduino. Não é possível fornecer biblioteca de software / código de demonstração para todas as possíveis plataformas de MCU. Portanto, os usuários precisam escrever sua própria biblioteca de software.

Uso

Brincar com Arduino

Quando você recebe o Grove - Chainble RGB LED, pode pensar em como acendê-lo. Agora vamos mostrar este demo: todas as cores do RGB ciclam de forma uniforme.

Para completar este demo, você pode usar um ou mais Grove - Chainable RGB LED. Observe que a interface IN de um Grove - Chainable RGB LED deve ser conectada a D7/D8 do Grove - Base Shield e sua interface OUT conectada à interface IN de outro Grove - Chainable RGB LED, encadeando mais LEDs dessa forma.


/*
* Example of using the ChainableRGB library for controlling a Grove RGB.
* This code cycles through all the colors in an uniform way. This is accomplished using a HSB color space.
*/


#include <ChainableLED.h>

#define NUM_LEDS 5

ChainableLED leds(7, 8, NUM_LEDS);

void setup()
{
leds.init();
}

float hue = 0.0;
boolean up = true;

void loop()
{
for (byte i=0; i<NUM_LEDS; i++)
leds.setColorHSL(i, hue, 1.0, 0.5);

delay(50);

if (up)
hue+= 0.025;
else
hue-= 0.025;

if (hue>=1.0 && up)
up = false;
else if (hue<=0.0 && !up)
up = true;
}

Você pode observar esta cena: as cores de cinco LEDs irão gradualmente mudar de forma consistente.

Aplicação estendida: Com base na Chainable LED Library, nós projetamos este demo: a cor RGB varia com a temperatura medida pelo Grove - temperature. A cor RGB varia de verde para vermelho quando a temperatura vai de 25 a 32. O código de teste é mostrado abaixo. Experimente se você estiver interessado.

    // demo of temperature -> rgbLED
// temperature form 25 - 32, rgbLed from green -> red
// Grove-temperature plu to A0
// LED plug to D7,D8

#include <Streaming.h>
#include <ChainableLED.h>

#define TEMPUP 32
#define TEMPDOWN 25

ChainableLED leds(7, 8, 1); // connect to pin7 and pin8 , one led

int getAnalog() // get value from A0
{
int sum = 0;
for(int i=0; i<32; i++)
{
sum += analogRead(A0);
}

return sum>>5;
}

float getTemp() // get temperature
{
float temperature = 0.0;
float resistance = 0.0;
int B = 3975; //B value of the thermistor

int a = getAnalog();

resistance = (float)(1023-a)*10000/a; //get the resistance of the sensor;
temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15; //convert to temperature via datasheet ;
return temperature;
}

void ledLight(int dta) // light led
{

dta = dta/4; // 0 - 255

int colorR = dta;
int colorG = 255-dta;
int colorB = 0;

leds.setColorRGB(0, colorR, colorG, colorB);
}

void setup()
{
Serial.begin(38400);
cout << "hello world !" << endl;
}

void loop()
{
float temp = getTemp();
int nTemp = temp*100;

nTemp = nTemp > TEMPUP*100 ? TEMPUP*100 : (nTemp < TEMPDOWN*100 ? TEMPDOWN*100 : nTemp);
nTemp = map(nTemp, TEMPDOWN*100, TEMPUP*100, 0, 1023);
ledLight(nTemp);
delay(100);
}

Brincar com Codecraft

Hardware

Passo 1. Conecte o Grove - Chainanle RGB LED à porta D7 em um Base Shield

Passo 2. Conecte o Base Shield ao seu Seeeduino/Arduino.

Passo 3. Conecte o Seeeduino/Arduino ao seu PC através de um cabo USB.

Software

Passo 1. Abra o Codecraft, adicione o suporte a Arduino e arraste um procedimento principal para a área de trabalho.

nota

Se esta é a sua primeira vez usando o Codecraft, veja também o Guia para usar Codecraft com Arduino.

Passo 2. Arraste blocos como na figura abaixo ou abra o arquivo cdc que pode ser baixado no final desta página.

Envie o programa para o seu Arduino/Seeeduino.

dica

Quando o código terminar de ser enviado, você verá o LED aparecendo e desaparecendo gradualmente (fade in e fade out).

Brincar com Raspberry Pi

nota

Se você estiver usando Raspberry Pi com Raspberrypi OS >= Bullseye, você deve usar esta linha de comando apenas com Python3.

1.Você deve ter um raspberry pi e um grovepi ou grovepi+.

2.Você deve ter concluído a configuração do ambiente de desenvolvimento, caso contrário siga por aqui.

3.Conexão

  • Conecte o sensor ao soquete D7 do grovepi usando um cabo grove.

4.Navegue até o diretório de demonstrações:

    cd yourpath/GrovePi/Software/Python/
  • Para ver o código
     nano grove_chainable_rgb_led.py   # "Ctrl+x" to exit #
    import time
import grovepi

# Connect first LED in Chainable RGB LED chain to digital port D7
# In: CI,DI,VCC,GND
# Out: CO,DO,VCC,GND
pin = 7

# I have 10 LEDs connected in series with the first connected to the GrovePi and the last not connected
# First LED input socket connected to GrovePi, output socket connected to second LED input and so on
numleds = 1

grovepi.pinMode(pin,"OUTPUT")
time.sleep(1)

# Chainable RGB LED methods
# grovepi.storeColor(red, green, blue)
# grovepi.chainableRgbLed_init(pin, numLeds)
# grovepi.chainableRgbLed_test(pin, numLeds, testColor)
# grovepi.chainableRgbLed_pattern(pin, pattern, whichLed)
# grovepi.chainableRgbLed_modulo(pin, offset, divisor)
# grovepi.chainableRgbLed_setLevel(pin, level, reverse)

# test colors used in grovepi.chainableRgbLed_test()
testColorBlack = 0 # 0b000 #000000
testColorBlue = 1 # 0b001 #0000FF
testColorGreen = 2 # 0b010 #00FF00
testColorCyan = 3 # 0b011 #00FFFF
testColorRed = 4 # 0b100 #FF0000
testColorMagenta = 5 # 0b101 #FF00FF
testColorYellow = 6 # 0b110 #FFFF00
testColorWhite = 7 # 0b111 #FFFFFF

# patterns used in grovepi.chainableRgbLed_pattern()
thisLedOnly = 0
allLedsExceptThis = 1
thisLedAndInwards = 2
thisLedAndOutwards = 3

try:

print "Test 1) Initialise"

# init chain of leds
grovepi.chainableRgbLed_init(pin, numleds)
time.sleep(.5)

# change color to green
grovepi.storeColor(0,255,0)
time.sleep(.5)

# set led 1 to green
grovepi.chainableRgbLed_pattern(pin, thisLedOnly, 0)
time.sleep(.5)

# change color to red
grovepi.storeColor(255,0,0)
time.sleep(.5)

# set led 10 to red
grovepi.chainableRgbLed_pattern(pin, thisLedOnly, 9)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 2a) Test Patterns - black"

# test pattern 0 - black (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(1)


print "Test 2b) Test Patterns - blue"

# test pattern 1 blue
grovepi.chainableRgbLed_test(pin, numleds, testColorBlue)
time.sleep(1)


print "Test 2c) Test Patterns - green"

# test pattern 2 green
grovepi.chainableRgbLed_test(pin, numleds, testColorGreen)
time.sleep(1)


print "Test 2d) Test Patterns - cyan"

# test pattern 3 cyan
grovepi.chainableRgbLed_test(pin, numleds, testColorCyan)
time.sleep(1)


print "Test 2e) Test Patterns - red"

# test pattern 4 red
grovepi.chainableRgbLed_test(pin, numleds, testColorRed)
time.sleep(1)


print "Test 2f) Test Patterns - magenta"

# test pattern 5 magenta
grovepi.chainableRgbLed_test(pin, numleds, testColorMagenta)
time.sleep(1)


print "Test 2g) Test Patterns - yellow"

# test pattern 6 yellow
grovepi.chainableRgbLed_test(pin, numleds, testColorYellow)
time.sleep(1)


print "Test 2h) Test Patterns - white"

# test pattern 7 white
grovepi.chainableRgbLed_test(pin, numleds, testColorWhite)
time.sleep(1)


# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 3a) Set using pattern - this led only"

# change color to red
grovepi.storeColor(255,0,0)
time.sleep(.5)

# set led 3 to red
grovepi.chainableRgbLed_pattern(pin, thisLedOnly, 2)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 3b) Set using pattern - all leds except this"

# change color to blue
grovepi.storeColor(0,0,255)
time.sleep(.5)

# set all leds except for 3 to blue
grovepi.chainableRgbLed_pattern(pin, allLedsExceptThis, 3)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 3c) Set using pattern - this led and inwards"

# change color to green
grovepi.storeColor(0,255,0)
time.sleep(.5)

# set leds 1-3 to green
grovepi.chainableRgbLed_pattern(pin, thisLedAndInwards, 2)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 3d) Set using pattern - this led and outwards"

# change color to green
grovepi.storeColor(0,255,0)
time.sleep(.5)

# set leds 7-10 to green
grovepi.chainableRgbLed_pattern(pin, thisLedAndOutwards, 6)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 4a) Set using modulo - all leds"

# change color to black (fully off)
grovepi.storeColor(0,0,0)
time.sleep(.5)

# set all leds black
# offset 0 means start at first led
# divisor 1 means every led
grovepi.chainableRgbLed_modulo(pin, 0, 1)
time.sleep(.5)

# change color to white (fully on)
grovepi.storeColor(255,255,255)
time.sleep(.5)

# set all leds white
grovepi.chainableRgbLed_modulo(pin, 0, 1)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 4b) Set using modulo - every 2"

# change color to red
grovepi.storeColor(255,0,0)
time.sleep(.5)

# set every 2nd led to red
grovepi.chainableRgbLed_modulo(pin, 0, 2)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)


print "Test 4c) Set using modulo - every 2, offset 1"

# change color to green
grovepi.storeColor(0,255,0)
time.sleep(.5)

# set every 2nd led to green, offset 1
grovepi.chainableRgbLed_modulo(pin, 1, 2)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 4d) Set using modulo - every 3, offset 0"

# change color to red
grovepi.storeColor(255,0,0)
time.sleep(.5)

# set every 3nd led to red
grovepi.chainableRgbLed_modulo(pin, 0, 3)
time.sleep(.5)

# change color to green
grovepi.storeColor(0,255,0)
time.sleep(.5)

# set every 3nd led to green, offset 1
grovepi.chainableRgbLed_modulo(pin, 1, 3)
time.sleep(.5)

# change color to blue
grovepi.storeColor(0,0,255)
time.sleep(.5)

# set every 3nd led to blue, offset 2
grovepi.chainableRgbLed_modulo(pin, 2, 3)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 4e) Set using modulo - every 3, offset 1"

# change color to yellow
grovepi.storeColor(255,255,0)
time.sleep(.5)

# set every 4nd led to yellow
grovepi.chainableRgbLed_modulo(pin, 1, 3)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)


print "Test 4f) Set using modulo - every 3, offset 2"

# change color to magenta
grovepi.storeColor(255,0,255)
time.sleep(.5)

# set every 4nd led to magenta
grovepi.chainableRgbLed_modulo(pin, 2, 3)
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 5a) Set level 6"

# change color to green
grovepi.storeColor(0,255,0)
time.sleep(.5)

# set leds 1-6 to green
grovepi.write_i2c_block(0x04,[95,pin,6,0])
time.sleep(.5)

# pause so you can see what happened
time.sleep(2)

# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
time.sleep(.5)


print "Test 5b) Set level 7 - reverse"

# change color to red
grovepi.storeColor(255,0,0)
time.sleep(.5)

# set leds 4-10 to red
grovepi.write_i2c_block(0x04,[95,pin,7,1])
time.sleep(.5)


except KeyboardInterrupt:
# reset (all off)
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
break
except IOError:
print "Error"
  • Observe que há algo com que você deve se preocupar:
    pin = 7         #setting up the output pin
numleds = 1 #how many leds you plug
  • Também todos os métodos que você pode ver em grovepi.py são:
    storeColor(red, green, blue)
chainableRgbLed_init(pin, numLeds)
chainableRgbLed_test(pin, numLeds, testColor)
chainableRgbLed_pattern(pin, pattern, whichLed)
chainableRgbLed_modulo(pin, offset, divisor)
chainableRgbLed_setLevel(pin, level, reverse)

5.Execute a demonstração.

    sudo python3 grove_chainable_rgb_led.py

6.Esta demonstração pode não funcionar se o seu grovepi não tiver o firmware mais recente, atualize o firmware.

    cd yourpath/GrovePi/Firmware
sudo ./firmware_update.sh

Com Beaglebone Green

Para começar a editar programas que residem no BBG, você pode usar o Cloud9 IDE.

Como um exercício simples para se familiarizar com o Cloud9 IDE, criar uma aplicação simples para piscar um dos 4 LEDs de usuário programáveis no BeagleBone é um bom começo.

Se esta é a sua primeira vez usando o Cloud9 IDE, siga este link.

Passo1: Configure o soquete Grove - UART como um soquete Grove - GPIO, apenas siga este link.

Passo2: Clique no "+" no canto superior direito para criar um novo arquivo.

Passo3: Copie e cole o código a seguir na nova aba

import time
import Adafruit_BBIO.GPIO as GPIO

CLK_PIN = "P9_22"
DATA_PIN = "P9_21"
NUMBER_OF_LEDS = 1

class ChainableLED():
def __init__(self, clk_pin, data_pin, number_of_leds):
self.__clk_pin = clk_pin
self.__data_pin = data_pin
self.__number_of_leds = number_of_leds

GPIO.setup(self.__clk_pin, GPIO.OUT)
GPIO.setup(self.__data_pin, GPIO.OUT)

for i in range(self.__number_of_leds):
self.setColorRGB(i, 0, 0, 0)

def clk(self):
GPIO.output(self.__clk_pin, GPIO.LOW)
time.sleep(0.00002)
GPIO.output(self.__clk_pin, GPIO.HIGH)
time.sleep(0.00002)

def sendByte(self, b):
"Send one bit at a time, starting with the MSB"
for i in range(8):
# If MSB is 1, write one and clock it, else write 0 and clock
if (b & 0x80) != 0:
GPIO.output(self.__data_pin, GPIO.HIGH)
else:
GPIO.output(self.__data_pin, GPIO.LOW)
self.clk()

# Advance to the next bit to send
b = b << 1

def sendColor(self, red, green, blue):
"Start by sending a byte with the format '1 1 /B7 /B6 /G7 /G6 /R7 /R6' "
#prefix = B11000000
prefix = 0xC0
if (blue & 0x80) == 0:
#prefix |= B00100000
prefix |= 0x20
if (blue & 0x40) == 0:
#prefix |= B00010000
prefix |= 0x10
if (green & 0x80) == 0:
#prefix |= B00001000
prefix |= 0x08
if (green & 0x40) == 0:
#prefix |= B00000100
prefix |= 0x04
if (red & 0x80) == 0:
#prefix |= B00000010
prefix |= 0x02
if (red & 0x40) == 0:
#prefix |= B00000001
prefix |= 0x01
self.sendByte(prefix)

# Now must send the 3 colors
self.sendByte(blue)
self.sendByte(green)
self.sendByte(red)

def setColorRGB(self, led, red, green, blue):
# Send data frame prefix (32x '0')
self.sendByte(0x00)
self.sendByte(0x00)
self.sendByte(0x00)
self.sendByte(0x00)

# Send color data for each one of the leds
for i in range(self.__number_of_leds):
'''
if i == led:
_led_state[i*3 + _CL_RED] = red;
_led_state[i*3 + _CL_GREEN] = green;
_led_state[i*3 + _CL_BLUE] = blue;
sendColor(_led_state[i*3 + _CL_RED],
_led_state[i*3 + _CL_GREEN],
_led_state[i*3 + _CL_BLUE]);
'''
self.sendColor(red, green, blue)

# Terminate data frame (32x "0")
self.sendByte(0x00)
self.sendByte(0x00)
self.sendByte(0x00)
self.sendByte(0x00)


# Note: Use P9_22(UART2_RXD) and P9_21(UART2_TXD) as GPIO.
# Connect the Grove - Chainable RGB LED to UART Grove port of Beaglebone Green.
if __name__ == "__main__":
rgb_led = ChainableLED(CLK_PIN, DATA_PIN, NUMBER_OF_LEDS)

while True:
# The first parameter: NUMBER_OF_LEDS - 1; Other parameters: the RGB values.
rgb_led.setColorRGB(0, 255, 0, 0)
time.sleep(2)
rgb_led.setColorRGB(0, 0, 255, 0)
time.sleep(2)
rgb_led.setColorRGB(0, 0, 0, 255)
time.sleep(2)
rgb_led.setColorRGB(0, 0, 255, 255)
time.sleep(2)
rgb_led.setColorRGB(0, 255, 0, 255)
time.sleep(2)
rgb_led.setColorRGB(0, 255, 255, 0)
time.sleep(2)
rgb_led.setColorRGB(0, 255, 255, 255)
time.sleep(2)

Passo4: Salve o arquivo clicando no ícone de disco e dando ao arquivo um nome com a extensão .py.

Passo5: Conecte o Grove Chainable RGB LED ao soquete Grove UART no BBG.

Passo6: Execute o código. Você verá que o LED RGB está mudando de cor a cada 2 segundos.

Arquivo eagle do Chainable RGB LED V1

Arquivo eagle do Chainable RGB LED V2

Recursos


Projetos

Grove - Introduction to Chainable LED: Este projeto mostra como conectar um LED encadeável ao Grove.

Faça você mesmo um dispositivo para explicar o modelo de cor RGB

Acesso de Segurança Usando Seeeduino Lotus Quando você bater na porta ou se aproximar da porta, ela se abrirá automaticamente.

Suporte Técnico & Discussão de Produto

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes formas de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...