name | category | bzurl | oldwikiname | prodimagename | bzprodimageurl | surveyurl | sku | tags |
---|---|---|---|---|---|---|---|---|
Grove - Chainable RGB LED |
Actuator |
Grove_-_Chainable_RGB_LED |
Chanbalelednb1.jpg |
104030006 |
grove_digital, io_3v3, io_5v, plat_duino, plat_linkit, plat_bbg |
Moduly pro světelný řetěz je založen na obvodu P9813, který funguje jako budič pro RGB diodu. Poskytuje tři zdroje konstantního proudu a modulovaný výstup, který generuje 256 úrovní jasu. Instrukce přijímá z mikrokontroléru pomocí dvou vodičů (datový a hodinový). Tento signál lze zřetězit a připojit další moduly Grove - Chainable RGB LED. Díky posilovači signálu můžete takových modulů za sebe zapojit víc. Modul je vhodný všude tam, kde potřebujete barevné světlo.
Revize | Descriptions | Release | How to Buy |
---|---|---|---|
v1 | První vydání public release (beta) | May 5, 2011 | ![]() |
v2 | Verze P9813S16 nahrazena verzí P9813S14 a konektor změněn z vertikálního na horizontální | Apr 19, 2016 | ![]() |
- Pracovní napětí: 5V
- Pracovní proud: 20mA
- Komunikační protokol: Sériový
!!!Tip Více detailů o modulech Grove zjistíte v popisu systému Grove
Arduino | Raspberry Pi | BeagleBone | Wio | LinkIt ONE |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
!!!Pozor Formulace "podporované platformy" je použita ve smyslu informace, že tato dvě zařízení jsou vzájemně propojitelná a mohou spolu pracovat. My poskytujeme ve většině případů pouze knihovny nebo příklady kódu pro platformu Arduino. Nemůžeme poskytovat ukázky a knihovny pro všechny možné mikrokontroléry a platformy. Uživatelé si pro takové případy musí napsat vlastní software.
Pokusy s Arduinem
Díváte se na modul světelného řetězu a říkáte si: Jak jej rozsvítit? Ukážeme si to na příkladu, který předvede všechny možné barvy.
V této ukázce můžete použít jeden nebo více modulů barevného řetězu. Jeden modul připojte rozhraním IN k portům D7/D8 Base Shieldu, a jeho rozhraní OUT připojte k rozhraní IN dalšího modulu. Takto můžete připojit víc modulů za sebe.
- Stáhněte knihovnu Chainable LED Library a instalujte ji do Arduino IDE. S instalací vám pomůže návod na instalaci knihoven.
- Otevřte příklad CycleThroughColors pomocí:File->Examples->ChainableLED_master, přeložte jej a nahrajte do Seeeduina.
- Nezapomeňte správně nastavit počet zapojených LED v programu (konstanta NUM_LEDS)
/*
* 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.setColorHSB(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;
}
Barva světla připojených LED se bude plynule měnit.
Rozšířená ukázka: Pomocí knihovny Chainable LED Library jsme udělali ještě jednu ukázku: Barva se mění podle teploty, naměřené snímačem Grove Temperature. Barva se mění od zelené po červenou, jak teplota stoupá od 25 stupňů k 32 stupňům. Zkuste si to sami, kód máte k dispozici zde:
// 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);
}
Krok 1. Připojte Grove - Chainanle RGB LED k portu D7 na Grove-Base Shieldu
Krok 2. Připojte Base Shield k Seeeduinu / Arduinu.
Krok 3. Propojte Seeeduino/Arduino s PC pomocí kabelu USB.
Krok 1. Spusťte Codecraft, přepněte se na prostředí pro Arduino a přidejte na plochu hlavní proceduru (Start).
!!!Poznámka Pokud používáte Codecraft poprvé, podívejte se na Průvodce světem Codecraftu a Arduina.
Krok 2. Přetáhněte bloky tak, jak ukazuje následující obrázek, nebo otevřte cdc soubor, který si můžete stáhnout na konci této stránky.
Nahrajte hotový program do svého Arduina/Seeeduina.
!!!Povedlo se Jakmile je nahrávání hotové, budou se LED rozsvěcet a zhasínat.
-
Připravte si Raspberry Pi a modul Grovepi nebo Grovepi+.
-
Nastavte si vývojové prostředí pomocí průvodce nastavení software.
-
Připojení
- Připojte snímač ke GrovePi portu D7 příslušným kabelem.
- Přesuňte se do adresáře s příklady:
cd yourpath/GrovePi/Software/Python/
- Zkopírujte následující kód
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"
- Všimněte si důležitého místa:
pin = 7 #nastavení výstupního pinu
numleds = 1 #kolik LED je připojeno
- Metody z knihovny grovepi.py, které můžete použít:
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)
- Spusťte ukázkový program.
sudo python grove_chainable_rgb_led.py
- Pokud nebude program fugnovat správně, může to být tím, že nemáte aktualizovanou knihovnu. Spusťte prosím následující příkazy pro její aktualizaci.
cd yourpath/GrovePi/Firmware
sudo ./firmware_update.sh
K programování Beaglebone Green (BBG) můžete použít prostředí Cloud9 IDE.
Jednoduchým cvičením pro seznámení s prostředím Cloud9 IDE může být vytvoření aplikace, která bliká diodou.
Pokud používáte Cloud9 IDE poprvé, řiďte se návodem.
Krok 1: Nastavte konektor Grove - UART jako Grove - GPIO Socket, jak je popsáno zde.
Krok 2: Vytvořte nový soubor kliknutím na "+" v pravém horním rohu.
Krok 3: Zkopírujte následující kód a vložte jej do prázdného souboru v Cloud9 IDE.
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.
# Připojte 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)
Krok 4: Uložte soubor kliknutím na ikonku disku; dejte souboru příponu .py.
Krok 5: Připojte Grove Chainable RGB LED ke konektoru Grove UART na BBG.
Krok 6: Spusťte kód. Barevné LED změní každé dbvě sekundy svou barvu.
- [Knihovna]Chainable RGB LED Library for the P9813
- [Knihovna]Github repository for Chainable RGB LED Library (new)
- [Knihovna] CodeCraft Code
- [Eagle]Chainable RGB LED eagle file V1
- [Eagle]Chainable RGB LED eagle file V2
- [PDF]Chainable RGB LED SCH file V1
- [PDF]Chainable RGB LED SCH file V2
- [PDF]Chainable RGB LED PCB file V1
- [PDF]Chainable RGB LED PCB file V2
- [Datasheet]P9813 Datasheet
Grove - Úvod se světelnými řetězy: Projekt ukazuje použití světelných řetězů Grove.
<iframe frameborder='0' height='327.5' scrolling='no' src='https://www.hackster.io/ingo-lohs/grove-introduction-to-chainable-led-d668b7/embed' width='350'></iframe>Zařízení pro demonstraci skládání barev RGB
<iframe frameborder='0' height='327.5' scrolling='no' src='https://www.hackster.io/kevin-lee2/diy-a-device-for-explaining-rgb-color-model-496cbc/embed' width='350'></iframe>Otvírání dveří se Seeeduinem Lotus Dveře se otevřou, když na ně zaklepete.
<iframe frameborder='0' height='327.5' scrolling='no' src='https://www.hackster.io/limanchen/security-access-using-seeeduino-lotus-7eb90f/embed' width='350'></iframe>Hlašte prosím jakékoli technické problémy na našem fóru.