Inhoudsopgave:

Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening - Ajarnpa
Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening - Ajarnpa

Video: Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening - Ajarnpa

Video: Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening - Ajarnpa
Video: RTM Complete Weekly Update for December 3, 2023 (Chapters in Description) 2024, Juli-
Anonim
Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening
Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening
Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening
Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening
Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening
Vrolijk me op! een realtime platformonafhankelijke LED-stripbediening

Vrolijk me op! is een systeem dat ik heb uitgevonden om een RGB LED-Strip in realtime aan te sturen, terwijl de kosten laag en de prestaties hoog blijven.

De server is geschreven in Node.js en daardoor platformonafhankelijk.

In mijn voorbeeld gebruik ik een Raspberry Pi 3B voor langdurig gebruik, maar mijn Windows-pc voor demonstratie en debugging.

De 4-pins-strip wordt bestuurd door een Arduino Nano-type-board, dat serieel gegeven commando's uitvoert om PWM-signalen naar drie transistors te sturen die de +12VDC in de corresponderende kleur-pin van de strip schakelen.

De LightMeUp! systeem controleert ook zijn eigen temperatuur, zodra het boven de 60°C (140°F) is, zet het twee 12VDC computerventilatoren aan die in de behuizing zijn ingebouwd, om zichzelf af te koelen om de levensduur van het circuit te verlengen.

Een ander kenmerk van LightMeUp! is om een Bombay-Sapphire Gin-fles te verlichten, maar dat is niet de focus van deze Instructable.

Veel plezier met lezen:)

Benodigdheden

  • Arduino Nano (of een andere ATmega328/hogere microcontroller)
  • Raspberry Pi 3 Model B met Node.js geïnstalleerd (of een andere computer)
  • 12V RGB 4-pins ledstrip
  • 12V 3A voeding
  • Startkabels (man-man als je een breadboard gebruikt natuurlijk)
  • Broodplank (optioneel)
  • 2 12V DC computerventilatoren (optioneel)
  • 3x TIP120 Darlington Transistor met koellichaam (4 als je koelventilatoren wilt toevoegen)
  • 2 status-leds rood en groen (optioneel)
  • 6, 7K NTC temperatuurgebaseerde weerstand + 6, 7K weerstand (optioneel)
  • USB-Mini naar USB 2.0 datakabel (voor de Raspberry Pi om te communiceren met de Arduino)
  • Extern gevoede USB-Hub (optioneel, alleen voor Raspberry Pi)

Stap 1: Begrijp het systeem

Begrijp het systeem
Begrijp het systeem

Vrolijk me op! is gebaseerd op zeer eenvoudige elektronische schakelingen.

We hebben een soort computer (in dit geval een Raspberry Pi) die serieel communiceert met ons microcontrollerbord. Dit bord voert vervolgens specifieke seriële commando's uit zoals "RGB(255, 255, 255)" die onze LED-Strip wit zouden maken.

Zodra we onze drie waarden voor ROOD, GROEN en BLAUW hebben die nodig zijn voor onze 4-pins LED-strip, voeren we analogWrite (pin, waarde) uit om onze TIP120-transistor te voorzien van een PWM-signaal.

Dit PWM-signaal stelt de transistor in staat om de corresponderende kleurpen waarop de collector is aangesloten, in een bepaalde mate of volledig aan / uit te schakelen. Ja, veel "to"s:)

Door de drie transistoruitgangen te mengen met de kleurpinnen van de LED-strips, kunnen we in principe elke gewenste kleur creëren!

Met dit inzicht kunnen we nu de grootste uitdaging van dit project aanpakken, de websocketserver en de seriële verbinding met onze Arduino.

Stap 2: De WebSocketServer schrijven

De WebSocketServer schrijven
De WebSocketServer schrijven

Nu moeten we een specifiek soort webserver maken, waarmee we gegevens heen en weer kunnen overbrengen zonder één keer te vernieuwen om een realtime LED-stripbesturing te bereiken.

Houd er rekening mee dat realtime communicatie natuurlijk onmogelijk is, er zal altijd minstens een paar milliseconden vertraging mee gemoeid zijn, maar voor het menselijk oog is het aanzienlijk als realtime.

Dit kan eenvoudig worden bereikt door de socket.io-bibliotheek te gebruiken als u Node.js gebruikt zoals ik deed. Je kunt natuurlijk altijd je favoriete programmeertaal aanhouden.

We hebben te maken met een websocket-verbinding waarmee we invoergegevens, zoals de kleur waarop u de LED-strip wilt instellen, of statusgegevens zoals "LED AAN" bidirectioneel kunnen overbrengen zonder te vernieuwen.

Een andere zeer belangrijke functie die de server zou moeten hebben, maar niet hoeft, is een eenvoudige login. Ik heb mijn login gebaseerd op een eenvoudig veld voor gebruikersnaam en wachtwoord. Deze stukjes informatie worden vervolgens gepost naar de /login-route van de server, die vervolgens de gebruikersnaam vergelijkt met een lijst met gebruikers (.txt-bestand) en het bijbehorende wachtwoord in zijn SHA256-gecodeerde vorm. Je wilt toch niet dat je buren knoeien met je ledstrip terwijl jij geniet van je favoriete drankje op je meest comfortabele stoel?

Nu komt het hart van de server, de seriële communicatie.

Uw server moet serieel kunnen communiceren - in Node.js kan dit worden bereikt door een poort te openen met behulp van de "serialport" -bibliotheek. Maar bepaal eerst de naam van uw arduino-poort op uw computer die de server host. Afhankelijk van uw besturingssysteem zullen de poorten verschillende namen hebben, bijv. op Windows worden deze poorten "COMx"-poorten genoemd, terwijl ze op Linux "/dev/ttyUSBx" heten, waarbij x het nummer van de USB-poort is.

Stap 3: Stel een protocol van seriële opdrachten op

Een protocol van seriële opdrachten opstellen
Een protocol van seriële opdrachten opstellen

In de bovenstaande afbeelding ziet u de eigenlijke Arduino IDE-code die verantwoordelijk is voor de RGB-besturing. Het doel van deze stap is om je zelfgeschreven server en Arduino-bord succesvol met elkaar te laten praten.

Nadat u uw seriële poort met succes hebt geopend, moet u opdrachten naar het bord kunnen sturen dat voor uw wensen zorgt. Als we bijvoorbeeld een vinger boven de kleurkiezer op de HTML-webpagina trekken, moet de RGB-code naar de server worden gestuurd die deze vervolgens naar uw Arduino stuurt, zodat deze de ingestelde waarden verwerkt.

Ik heb jscolor gebruikt, ze hebben een geweldige implementatie van een kleurselectie-element van hoge kwaliteit, dat eigenaar is van een evenement genaamd "onFineChange", waarmee je procesgegevens van de kleurkiezer kunnen worden gewijzigd zodra de waarden veranderen.

Aanbevolen: