Med en enda RGB LED (eller en LED strip) för att visa information: klocka, termometer och en konstig kommunikatör (5 / 7 steg)

Steg 5: Konstiga 6-bitars Communicator



Någon, se min klocka-garland för första gången, noterade att det skulle kunna användas som en hemlig kommunikationsenhet. Tja, varför inte? Detta är mindre användbart än klockan eller termometern, men kan hända att vara en bra och rolig leksak för någon med barn.

Det är uppenbart att en RGB LED, fysiskt som består av tre lysdioder med separat katoder (eller anoder), i själva verket är en 3-bitars enhet. Genom att leverera dess ben med 0 eller 1 värden du ger det tre bitar av information och det visar dem i färgade kod. Om vi betraktar red som en LSB och blå som en MSB (eller BGR = B000), vi kan faktiskt tilldela färger till siffrorna 0 – 7: svart för 0, röd för 1 (B001), grönt för 2 (B010), orange (R + G) för 3 (B011), blå för 4 (B100), magenta (R + B) för 5 (B101), cyan (G + B) för 6 (B110) och vitt (R + G + B) för 7 (B111). Problemet med detta tillvägagångssätt döljer i "svart" färg (noll), eftersom det blir informativ och kan inte användas som avgränsare. Med bara tre bitar kommer inte vi kunna skicka något meningsfullt i bara en färg, och vi faktiskt har problem att skicka noll, som det ser ut exakt samma som en vände-off LED och ingen kommer att märka att vi försöker kommunicera med dem.

De flesta digitala kommunikationsprotokoll Använd mer än en kanal bara för det: att Visa mottagaren att information överförs faktiskt, och det bör överväga spänning frånvaron som en nolla, inte ingenting. Detta tar form av en spärr signal, en klocksignal eller några andra närvarande på en extra tråd bärsignal. I vårt fall vi kunde ha lagt till en enda färg LED bara för detta, men eftersom vi använder en RGB LED genom våra OnePixel konvention, vi kan inte. Så bärsignal måste överföras av RGB LED och vi måste ägna en kanal till den, lämnar oss med endast två informationsbitar per enskild färg. Så, om vi använder röd som bärare, får vi red för 0, orange för 1 (B01), magenta för 2 (B10) och vitt för 3 (B11).

Två bitar räcker inte, men vi kan stapla dem tillsammans i sekvenser. Dessutom kan vi använda annat transportföretag färger. Till exempel om vi använder röd som bärare för den första två bitar, grönt för den mellersta två bitar och blå för de sista två bitarna vi får en fin tre färger 6-bit-sekvens. Vi kan använda "svart" avgränsare mellan sådana sekvenser att överföra informationen tydligt.

Tekniskt sett är vi inte begränsade till 6 bitar: vi kan lägga till en fjärde färg, med röda igen som transportören, och överföra full byte. Problemet här är att det finns två färger i sekvens, och om de är samma (gillar, säger, i B00111100 – rött, vitt, vitt, rött eller B00011000 – rött, cyan, cyan, röd), kan det vara svårt att avkoda dem. Tack och lov, 6 bitar är ganska tillräckligt för att överföra meddelanden som meningsfull.

Kolla ASCII-tabellen. De första 32 koderna är för kontrolltecken, vi behöver inte dem. Gå sedan skiljetecken, siffror och alfabetet med versaler, och alla dessa symboler passar in i 6 bitar (64 olika värden). Om vi tar ASCII-tabellen från rymden (32) till _ (95) får vi allt vi behöver för att kommunicera i 6 bitar. Som en sida noterar dike tidigt persondatorer också gemena tecken för att minska kostnaderna på karaktär generation marker.

OK, är här hemliga meddelande skissen. Det tar allt du skriver i fönstret Serial Monitor (ändra gemener symboler till versaler) och visar det på en enda RGB LED. Observera att Serial Monitor måste ställas in upp till 115200 baud. Den skriver också tabellen karaktär vid start för lättare avkodning (du kan också kontrollera de ovanstående lathund, det visar den första färgen i lodrät pil, den andra en horisontell fyllning och den tredje som pricken).

#define RED 3 / / pins RGB LED är ansluten till
#define grön 5
#define blå 6
tabellen i färger. Den här var kalibrerad för en 10mm RGB LED
uint8_t RGBready [13] [3] = {
{255, 0, 0}, / / 00xxxx
{128, 127, 0}, / / 01xxxx
{206, 0, 49}, / / 10xxxx
{110, 90, 54}, / / 11xxxx vit
{26, 155, 74}, / / 11xxxx cyan
{0, 255, 0}, / / xx00xx
{179, 75, 0}, / / xx01xx
{0, 168, 87}, / / xx10xx
{90, 110, 54}, / / xx11xx vit
{158, 10, 87}, / / xx11xx rosa
{0, 0, 165}, / / xxxx00
{206, 0, 49}, / / xxxx01
{0, 212, 42}, / / xxxx10
{90, 90, 74}, / / xxxx11 vit
{139, 105, 10}, / / xxxx11 gul
{0,0,0} / / 'svart'
};
uint8_t meddelande [100], räkna; char array och counter
nedan finns varaktigheterna för färger och "svart" paus mellan, i ms
uint16_t signalDuration = 400, pauseBetween = 100;
void setup() {
Serial.BEGIN(115200);
skriva ut en teckentabell
Serial.println ("karaktär bord");
för (uint8_t k = 0; k < 16; k ++)
{
om (k < 10) Serial.print("0");
Serial.Print(k);
Serial.Print(":");
Serial.write(k+32);
Serial.Print("");
Serial.Print(k+16);
Serial.Print(":");
Serial.write(k+16+32);
Serial.Print("");
Serial.Print(k+32);
Serial.Print(":");
Serial.write(k+32+32);
Serial.Print("");
Serial.Print(k+48);
Serial.Print(":");
Serial.write(k+48+32);
Serial.println();
}
}
void loop() {
Count = 0; släpp teckenräknare
medan (Serial.available()) / / läsa strängen om tillgängligt, konvertera det till vårt bord
{
uint8_t incomingChar = Serial.read ();
vanliga tecken
om (incomingChar > 31 & & incomingChar < 96) {meddelande [antal] = incomingChar; räkna ++;}
små bokstäver måste konverteras till versaler
annars om (incomingChar > 96 & & incomingChar < 123) {meddelande [antal] = incomingChar - 32; räkna ++;}

}
om det finns inkommande sträng, Visa det på LED
om (count > 0) {
för (uint8_t k = 0; k
funktionen att färgkoda och Visa information på LED
void sendRGBmessage(uint8_t letter)
{
brev = brev - 32. konvertera från ASCII till våra format
showRGBcolor (brev >> 4); övre 2 bitar
Delay(signalDuration);
showRGBcolor (4 + ((brev >> 2) & 3)); mellersta 2 bitar
Delay(signalDuration);
showRGBcolor (8 + (brev & 3)); lägre 2 bitar
Delay(signalDuration);
showRGBcolor(12); paus mellan tecken
Delay(pauseBetween);
}
funktionen för att göra den faktiska LED tända
för gemensam anod LED; vid gemensam katod bort "255-' bitar
void showRGBcolor(byte curLED)
{
analogWrite (röd, 255-RGBready[curLED][0]);
analogWrite (gröna, 255-RGBready[curLED][1]);
analogWrite (blå, 255-RGBready[curLED][2]);
}

Se Steg
Relaterade Ämnen

Raspberry Pi spektrumanalysator med RGB LED Strip och Python

söker ett första projekt att prova på en Raspberry Pi, jag men vad bättre än en spektrumanalysator? (Denna display är felaktigt kallas som en grafisk equalizer--låt oss ändra ljudet, inte Visa det)Jag kunde få det gör 2048pt FFTs och avkodning mp3s i...

IKEA RGB Led Strip 2 WiFi Hack

följande projektet beskriver hur till hacka en IKEA DIODER RGB Led Strip för att lägga till en WiFi-anslutning och tillgång till en intern webbserver för att konfigurera färger med låg budget lösningar! Hacket utnyttjar en openPicus Flyport WiFi modu...

PEX rör hexagoner med RGB LED Strip

Byggd för en scen tillbaka droppe har detta projekt vissa hexagon figurer gjorda av 3/4" PEX rör, liknar en LED hula hoop, några 12 Volt RGB LED strip och en NLED 30 kanal hög nuvarande LED-Controller. PEX hexagoner är nästan Sömlös söker med hjälp a...

RGB LED Strip krets med Arduino

Detta Instructable omfattar montering av en krets kan PWM-ning (puls bredd modulerande) en 9-12v RGB LED strip och programmering en Arduino att cykla genom en rad olika färger. Jag kommer att diskutera hur man montera en transistor till en kylfläns &...

Komma igång med NeoPixel / WS2812 RGB LED

[Spela Video]I detta Instructable kommer vi att undersöka om den adresserbara RGB LED (WS2812) eller populärt känd som Adafruit NeoPixel. NeoPixel är en familj av ringar, band, skivor & pinnar av pulserande, färgglada miniatyr lysdioder. Dessa är cha...

RGB - Led Strip 12 V kontrolleras av en ATtiny85 med en 125Khz RFID modul

Den grundläggande idén gav mig denna sida RGB-RFID-lampa. Men eftersom jag har en hel del ATtiny85 jag kommer använda denna mikro-controller. För att göra det lättare för mig, testade jag alla del först på en Arduino Uno.Material:1 x RGB – Led strip...

Smart telefon kontrollerade julgran med RGB LED Strip

eftersom julen är här, vi dekorerade denna julgran med RGB LED Strip för vår julfest, och gjorde det en smart telefon kontrollerade träd. XD. It kommer att säker presentera en "sista minuten" magi för Xmas showen. Julen kommer men fastnat räkna...

SoGo Mini endast bärbar Multi högtalare med APP kontrollerad RGB LED-ljus

Kommer snart SoGo Mini enda bärbara Multi högtalare med APPKontrollerade RGB LED-ljus och anpassningsbara ring färg. Brett spektrum av kompatibilitet med andra enheter, såsom Mac, PC, Android, IOS, 20 plus timmars power backup och bred räckvidd gör d...

RGB LED Strip Controller

Detta är en fjärrstyrd flerfärgad LED-Strip controller låda jag gjort för en vän. Vi planerade att installera subtil belysning inuti bilen som vi fick en liten controller låda + fjärrkontroll med flerfärgad LED Strips. Olyckligtvis, vi kunde inte öpp...

Everymans enkel WS2801 RGB LED Strip Controller

Syftet med detta instructable är man gör vanliga människor kunna ta kontroll över WS2801 RGB led strips för hem eller butik dekoration med minimal ansträngning. WS2801 ledde remsorna har ett litet chip i varje led och gör att du kan ange varje LED fä...

WiFi kontrollerad RGB LED Strip

De IR-fjärrkontroller som används för att styra RGB LED strips kan ibland bli irriterande på grund av deras begränsade räckvidd och jakt på fjärrkontrollen när du inte hittar den. Detta enkla, men effektiva projekt kan lösa ett problem genom att kont...

Arduino kontrollerad RGB LED strip för vardagsrummet

Tanken bakom denna lilla projekt var att ha lite ganska indirekta humör ljus i vardagsrummet. Den styrs av openHAB servern (det projektet är fortfarande på listan som ska läggas till denna webbplats) installerat på en Raspberry Pi. Naturligtvis, kan...

ARDUINO kontrollerade 12v RGB LED STRIP

Ungefär ett år sedan upptäckte jag RGB LED strips på Amazon. Att vara strax före starten av musik festivalen säsongen, gick jag naturligtvis direkt att arbeta att göra crazy ljusa blinkande festival leksaker. Icke-adresserbara remsorna är mestadels P...

Ändra en RGB LED-kit för att driva mer lysdioder

Svaret är: "Ja" och "Nej".Det är faktiskt möjligt att ändra en RGB LED-kit för att rymma en längre längd av RGB remsan. Det finns dock två typer av begränsningar:en a begränsning av strömförsörjningen ligger inne i den befintliga RGB d...

ArduDroid: En enkel 2-sätt Bluetooth-baserade Android Controller för Arduino RGB led strip

INTRODUKTIONFÅ det på google PLAY "ardudroid" appARDUDROID (tidigare Andruino) är en enkel Android app som hjälper dig att kontrollera stiften i Arduino Uno (eller klon) från din Android-telefon trådlöst. Det är både en Android app och en Arduin...

RGB LED Strip Disco Ball

Hej, detta är Brandon Neustadter en av elementärt LED kommersiella Account Managers. Jag ville skapa en LED-ljus show som skulle synka till min musik. Generellt detta tar timmar om inte dagar eller veckor, men med den Apollo Jammer det tar några minu...

RC kontrollerad rgb led strip

Skapa din egen rc kontrollerad led-strip för enskilda rum belysning!De flesta rgb-led-strips styrs av en infraröd fjärrkontroll. För att aktivera det eller inaktivera eller ändra färg, måste du stanna framför mottagaren. Detta är tråkigt och inte rik...

Arduino RGB LED Strip Controller

Jag var nyfiken på använda RGB LED Strip, så jag fick en och beslöt att göra en liten kontroller för att se vad jag kan göra med den... så här är det.Om du har några frågor, kommentarer, konstruktiv kritik... tveka inte att skriva :)Om du gillar min...

Hur man styr en RGB LED Strip - Arduino handledning

I denna tutorial använder vi en remsa med 8 RGB lysdioder med Arduino uno styrelsen. Vi kommer använda den Adafruit NeoPixel bibliotek för att ändra färg på varje ledde.Låt oss komma igång!Steg 1: Vad du behöverFör detta projekt behöver du:Arduino un...