Télécommande éclairage d’ambiance Arduino (3 / 6 étapes)

Étape 3: Le Code

En écrivant cela, je suppose que le constructeur sait comment faire pour ajouter une bibliothèque à leur environnement de développement Arduino. Vous aurez besoin d’ajouter deux bibliothèques. Voici une Instructable qui vous aidera à commencer à l’aide d’un récepteur IR.

Le code utilise deux bibliothèques requises et une troisième bibliothèque facultatif que j’ai toujours utiliser lors du débogage. La bibliothèque de Streaming permet des déclarations une ligne rapides qui peuvent être envoyées à la console terminales.

L’excellente bibliothèque IRLib est une amélioration de plusieurs autres bibliothèques de l’IR en ce qu’il encapsule les fonctionnalités d’une manière qui ne nécessite que quelques lignes pour obtenir des fonctionnalités de IR. Il a également le soutien pour la transmission d’IR, dont je n’utilise pas dans ce projet. Il est très bien documenté et un exemple de code bon, serré. Celui-ci est certainement l’un à garder dans votre sac à malices.

Il y a une société qui fait des bandes de lumière à l’aide de la même puce utilisée par la bande de Radio Shack (RIP). Leur bibliothèque, PololuLedStrip, fournit une interface facile à utiliser dans toute la bande qui utilise la puce TM1804. La bibliothèque de Pololu prend également en charge les autres jetons utilisés par les bandes de LED plus récentes.

Le code est commenté, mais il y a certaines choses à signaler :

  • Le tableau presetColor est une liste de couleurs qui seront chargés lorsque vous appuyez sur un bouton sur la télécommande. J’ai programmé ce au bouton « Play » sur le mien, mais vous pouvez l’affecter à ce que vous voulez. Ceux-ci sont désignés comme valeurs RVB, {255, 255, 255} étant plus brillante blanc et {0, 64, 0} étant un gradateur vert, par exemple. Vous pouvez créer des préconfigurations autant que vous le souhaitez. Notez que tous les autre préréglé sont {0,0,0}, qui essentiellement éteint les lumières. C’est gentil d’éteindre rapidement choses pour sleepy time.
  • Dans la fonction loop(), vous verrez le décodeur IR judiciairement. Il existe plusieurs types de télécommandes infrarouges là-bas, et la bibliothèque de IRLib pouvez trouver bon nombre d'entre eux. Vous aurez besoin de jouer avec ce code pour voir exactement ce que votre télécommande est l’envoi afin que vous pouvez isoler les codes et assignez-les aux fonctionnalités dans votre programme. Il y a une excellente documentation dans un fichier PDF dans la bibliothèque pour vous aider.
  • Cette télécommande particulière offre une valeur unique pour chaque bouton poussé, mais lorsque la touche est enfoncée, il envoie une valeur de 0xFFFFFFFF. Tout ce que nous devons faire est de se rappeler le précédent code envoyé et, en voyant toutes les F, traiter seulement la dernière valeur.
  • Il y a une petite fonction, playTone, qui envoie des impulsions à l’orateur. L’environnement de développement Arduino a une fonction de la tonalité, mais il utilise des interruptions. Malheureusement, ces mêmes interruptions sont utilisées par la bibliothèque de IRLib, donc nous ne pouvons pas utiliser ton et IRLib dans l’esquisse même sans modifications importantes aux bibliothèques. Cette fonction simple fait tout ce que nous avons besoin pour cette application simple, sans utiliser les interruptions. Savoir que plus le nombre est élevé, plus le ton.
  • J’ai deux télécommandes qui semblent identiques, mais ils fournissent des codes différents pour chaque bouton. Ce n’est aucun un problème quand on utilise la magie de la structure de switch/case C. Vous remarquerez deux cas pour chaque bloc. Cela indique les codes envoyés par chaque télécommande. Je pourrais éventuellement avoir une douzaine de télécommandes, chacun donnant un code différent et piéger en utilisant cette méthode.
  • Les touches haut et bas, ajuster la luminosité et les touches droite et gauche à travers la roue chromatique.
  • La touche « Menu » commence le mode roue de couleur. L’idée est que vous utilisez les touches haut/bas/droite/gauche pour obtenir la couleur de départ et appuyez sur la touche Menu. Les couleurs vont commencer à changer, en cours d’exécution tout autour de la roue chromatique jusqu'à ce que l’autre touche. Ceci fournit un éclairage d’ambiance relaxante si vous êtes dans ces choses.
  • Le bouton « Play » permet d’accéder rapidement aux couleurs prédéfinis qui ont été mentionnés plus tôt.
  • Le programme se termine avec les fonctions de conversion pour convertir entre RGB et HSV.

Les broches que j’ai utilisé étaient principalement pour la commodité ou habitude. Vous pouvez modifier les broches à laquelle les différentes parties sont connectés aussi longtemps que vous apportez les modifications appropriées dans le code.

HeadboardLight.h

HeadboardLight.ino

HeadboardLight.ino / / IRLib.h de IRLib-une bibliothèque d’Arduino pour infrarouge, codage et décodage < br > / / Version 1.5 juin 2014 / / Copyright 2014 par Chris Young < a href = « http://cyborg5.com » rel = « nofollow » > http://cyborg5.com</a> #include < IRLib.h > / / Streaming.h - Bibliothèque de l’Arduino pour soutenir la << en streaming opérateur / / Copyright (c) 2010-2012 Mikal Hart. Tous droits réservés. #include < Streaming.h > / / pratique bibliothèque pour faciliter le débogage des déclarations / / Pololu LED strip bibliothèque. Disponible de < a href = « https://github.com/pololu/pololu-led-strip-arduino » rel = « nofollow » > http://cyborg5.com</a> #include < PololuLedStrip.h > / / Bibliothèque pour lumière strip #include « HeadboardLight.h » / / fichier include pour ce projet //#define DEBUG / / global déclaration de débogage. Décommentez afin d’inclure le code de débogage / / créer un objet de récepteur pour écouter sur la broche 11 IRrecv My_Receiver(9) ; IRdecode My_Decoder ; valeur de type long non signé ; unsigned long last_value ; int j ; Créez un objet ledStrip sur la broche 12. PololuLedStrip < 12 > ledStrip ; int onboard_led = 13 ; juste pour la rétroaction pour s’assurer que nous recevons quelque chose / / créer un tampon pour la tenue de 10 couleurs. Prend 30 octets. #define LED_COUNT 10 rgb_color couleurs [LED_COUNT] ; couleur rgb_color ; Il y a deux normes de couleur utilisées ici. RGB conduit la bande lumineuse, / / mais le HSV est plus commode pour faire des progressions de roue de couleur. Il / / sont des fonctions pour convertir entre les deux. int hsv_h = 0 ; double hsv_s = 1 ; double hsv_v = 0,1 ; bool prédéfinies = false ; hsv_color hsv_current ; réglages rapides. Tout autre est hors d’un moyen facile de transformer tout sur rgb_color presetColor [] = {{0, 0, 0}, {255, 255, 255}, {0, 0, 0}, {16, 16, 16}, {0, 0, 0}, {64, 0, 0}, {0, 0, 0}, {0, 64, 0}, {0, 0, 0}, {0, 0, 64}, {0, 0, 0}, {64, 64, 0}, {0, 0, 0}, {0, 64, 64}, {0, 0, 0} {0, 64, 64}} ; char presetColorSize = sizeof (presetColor) / 3 ; char presetTracker = 0 ; int buzzPin = 7 ; void setup() {#ifdef DEBUG Serial.begin(9600) ; #endif My_Receiver.enableIRIn(); / / Start la couleur du récepteur IR = hsvToRgb (hsv_h, hsv_s, hsv_v); writeLeds(color); / / Assurez-vous d’épingles pointent la direction correcte pinMode (onboard_led, sortie); pinMode (buzzPin, sortie);} void loop() {//Continuously recherchez les résultats
. Quand vous les avez passez-les au décodeur si (My_Receiver.GetResults (& My_Decoder)) {My_Decoder.decode() ; //Decode les données #ifdef DEBUG Serial << « 0 x » << _HEX(value) << endl ; #endif si (NEC My_Decoder.decode_type==) {valeur = My_Decoder.value ; #ifdef DEBUG Serial << "\t\tcase 0 x" << _HEX(value) << endl ; #endif si (valeur == 0xFFFFFFFF) / / immobilise pendant la répétition {valeur = last_value;} #ifdef DEBUG Serial << _HEX(value) << endl ; #endif switch () valeur) {affaire 0x77E1D074 : affaire 0x77E15054 : #ifdef DEBUG Serial << "up" << endl ; #endif hsv_v += 0,05 ; if (hsv_v > 0,95) {hsv_v = 0,95 ; playTone(244);} else {playTone(122);} couleur = hsvToRgb (hsv_h, hsv_s, hsv_v); break ; case 0x77E1E074 : affaire 0x77E16054 : #ifdef DEBUG Serial << « droit » << endl ; #endif hsv_h += 10 ; if (hsv_h > 359) {hsv_h = 0; playTone(244);} else {playTone(200);} couleur = hsvToRgb (hsv_h hsv_s, hsv_v) ; rupture ; affaire 0x77E1B074 : affaire 0x77E13054 : #ifdef DEBUG Serial << « bas » << endl ; #endif hsv_v-= 0,05 ; Si (hsv_v < 0,05) {hsv_v = 0,0 ; playTone(244);} else {playTone(122);} couleur = hsvToRgb (hsv_h, hsv_s, hsv_v) ; rupture ; affaire 0x77E11074 : affaire 0x77E19054 : #ifdef DEBUG Serial << « gauche » << endl ; #endif hsv_h-= 10 ; Si (hsv_h < 1) {hsv_h = 359 ; playTone(244);} else {playTone(200);} couleur = hsvToRgb (hsv_h, hsv_s, hsv_v) ; rupture ; affaire 0x77E12074 : affaire 0x77E1A054 : #ifdef DEBUG Serial << « jouer » << endl ; #endif couleur = presetColor [presetTracker] ; ++ presetTracker ; Si (presetTracker > presetColorSize) presetTracker = 0 ; pour (j = 0; j < 2; j ++) {playTone(122) ; delay(20) ; playTone(244) ; delay(20);} / / définir les valeurs actuelles de hsv pour le préréglage hsv_current = rgbToHsv (color.red, color.green, color.blue) ; hsv_h = hsv_current.h ; hsv_s = hsv_current.s ; hsv_v = hsv_current.v ; #ifdef DEBUG Serial << "hsv(a):" << hsv_h << «, » << hsv_s << «, » << hsv_v << endl << "---" << endl ; #endif pause ; affaire 0x77E14074 : affaire 0x77E1C054 : #ifdef DEBUG Serial << « menu » << endl ; #endif si (prédéfinies) {prédéfinies = false ; pour (j = 1; j < = 5; j ++) {playTone(j * 20);}} else {prédéfinies = true ; pour (j = 5; j > 0; j--) {playTone(j * 20);}} break ; } last_value = value ; } writeLeds(color) ; My_Receiver.Resume() ; Redémarrage du récepteur} delay(30) ; diviser en mode roue couleur actuelle s et v si (prédéfinies) {si (++ hsv_h > 359) hsv_h = 0; couleur = hsvToRgb (hsv_h, hsv_s, hsv_v); writeLeds(color) ; delay(20);}} void playTone (int valeur) {digitalWrite (onboard_led, HIGH); / / allumer la LED (HIGH est le niveau de tension) pour (long j’ai = 0; j’ai < 64 * 3; i ++) {/ / 1 / 2048 Hz = 488uS, ou 244uS haute et 244uS faible à créer 50 % duty cycle digitalWrite (buzzPin, HIGH); delayMicroseconds(value) ; delayMicroseconds(value) ; digitalWrite (buzzPin, basse)} digitalWrite (onboard_led, basse); / / éteindre la LED en rendant la tension basse} void writeLeds (rgb_color c) {pour (int j’ai = 0; j’ai < LED_COUNT; i ++) {.red couleurs [i] = c.Red ; .green couleurs [i] = c.green ; .blue couleurs [i] = c.blue ; } ledStrip.write (couleurs, LED_COUNT) ; } / / Convertir VHS correspondante RGB rgb_color hsvToRgb (int, double s, double v h) {rgb_color RVB; / / Assurez-vous que nos arguments restent dans l’échelle h = max (0, min (360, h)); s = max (0, min (1,0, s)); v = max (0, min (1,0, v)); if(s == 0) {/ / achromatiques (gris) rgb.red = rgb.green = rgb.blue = round(v * 255) ; retour RVB;} double hs = h / 60,0; / / secteur int 0 à 5 j’ai = floor(hs) ; double f = hs - i; / / factorielle partie de h double p = v * (1 - s); double q = v * (1 - s * f) ; double t = v * (1 - s * (1 - f)) ; double r, g, b ; Switch(i) {case 0: r = v; g = t; b = p; break ; case 1: r = q; g = v; b = p; break ; case 2: r = p; g = v; b = t; break ; case 3: r = p; g = q; b = v; break ; case 4: r = t; g = p; b = v; break ; default: / / case 5: r = v; g = p; b = q;} rgb.red = round(r * 255.0) ; RGB.Green = round(g * 255.0) ; RGB.Blue = round(b * 255.0) ; retour RVB ; } / / convert RVB à la correspondante HSV hsv_color rgbToHsv (unsigned char r, g unsigned char, unsigned char b) {double rd = r/255 (double); double gd = g/255 (double); double bd = b/255 (double), double d_h ; double max = max (rd, max (gd, bd)), min = min (rd, min (gd, bd)); hsv_color hsv ; hsv.v = max ; double d = max - min; hsv.s = max == 0? 0 : d / max ; Si (max == min) {d_h = 0;} else {si (max == e) {d_h = (gd - bd) / d + (gd < bd? 6: 0);} ElseIf (max == gd) {d_h = (bd - rd) / d + 2;} ElseIf (max == bd) {d_h = (rd - gd) / d + 4;} d_h / = 6;} hsv.h = d_h * 360 ; retourner le hsv ; }

Articles Liés

Éclairage d’ambiance Arduino

Éclairage d’ambiance Arduino

cette instructable va vous montrer qui pour construire un système d'éclairage RVB avec un arduino. Vous pouvez aussi la contrôler avec un ipod/iphone/ipad en utilisant touchOSC. Dans mon précédent instructable j'ai montré comment contrôler un rgb con
Construire un circuit transistor pour contrôle télécommande de climatiseur avec Arduino

Construire un circuit transistor pour contrôle télécommande de climatiseur avec Arduino

je soutenais un groupe d'étudiants sur leur projet de remise des diplômes. Une des difficultés qu'ils rencontrent est sur le contrôle d'une unité de climatisation avec microcontrôleur Arduino.La première expérience, que nous avons essayé de s'en sort
Éclairage d’ambiance à l’aide de recycleables

Éclairage d’ambiance à l’aide de recycleables

je voulais un éclairage d'ambiance dans ma chambre et voulais m'essayer à l'utilisation de LEDs, est donc ici un appareil d'éclairage ambiant qui utilise des LEDs rouges et émet juste assez de lumière et l'air vraiment vraiment cool. Toute la concept
Téléphone commandé un éclairage d’ambiance

Téléphone commandé un éclairage d’ambiance

Dortoirs sont connus pour leur éclairage horrible, alors je voulais faire une source de lumière alternative cool pour ma chambre à l'école. Je l'ai fait téléphone commandé ainsi il y aurait un facile et sans fil moyen de changer la couleur de l'éclai
Éclairage d’ambiance dynamique TV

Éclairage d’ambiance dynamique TV

Merci de votre visite ! Cette instructable vous montrera comment ajouter l'éclairage ambiant dynamique à votre téléviseur. J'espère que vous apprécierez et apprenez quelque chose !** Les photos que j'ai posté de la TV semblent faire la LED bandes ne
Modèle chemin de fer - Station de commande DCC en utilisant Arduino :

Modèle chemin de fer - Station de commande DCC en utilisant Arduino :

Mise à jour 28 avril 2016 :Maintenant 16 participation / points de contrôlent de capacité de la Station de commande.Les branchements T1 - T8 sont disponibles via la touche « B »Les branchements T9 - T16 sont disponibles via la touche « C »Mise à jour
Éclairage LED avec Arduino vocale

Éclairage LED avec Arduino vocale

Ce projet est une extension pour la reconnaissance de la parole avec Arduino par leandro4b (). Cependant, au lieu d'utiliser 3 LEDs de couleur distinctes, j'ai utilisé un émetteur de LED multicolor 4 canaux RVB + blanc. J'ai eu l'occasion de travaill
Éclairage d’ambiance extérieur

Éclairage d’ambiance extérieur

à l'aide de ce que j'avais laissé autour de la maison d'un précédent projet. J'ai créé quelques éclairage extérieur Ambiance avec une table sur le dessus pour mettre les boissons et autres joyeusetés.Etape 1: cadre j'ai mesuré les portes persiennes e
Débuter avec ESP8266 à l’aide de commandes AT, NodeMCU ou Arduino (ESP-12E)

Débuter avec ESP8266 à l’aide de commandes AT, NodeMCU ou Arduino (ESP-12E)

Cette Instructable va vous montrer les étapes nécessaires pour s'initier à la ESP8266 à l'aide d'une carte de développement peu fantastique pour le module ESP-12E. La pension comprend tout le nécessaire y compris un port USB à l'adaptateur série, mon
Télécommande tout-en-un Arduino

Télécommande tout-en-un Arduino

Maintenant vous pouvez avoir toutes les télécommandes de votre maison dans un appareil qui tient dans votre main avec Arduino, jamais lutte pour qui a la TV distant à nouveau !Pour qu'il vous faut :Arduino (j'ai utilisé une copie bon marché de l'ardu
Télécommande universelle en utilisant Arduino, 1Sheeld et Mobile Android

Télécommande universelle en utilisant Arduino, 1Sheeld et Mobile Android

Ce projet illustre comment commander votre téléviseur, récepteur Satellite et chaîne stéréo à l'aide de votre mobile Android au lieu d'utiliser il commande à distance.Fondamentalement, vous pouvez appliquer cette technique pour n'importe quel autres
Lampe d’ambiance Arduino

Lampe d’ambiance Arduino

Bonjour Instructables utilisateurs!!! Il s'agit d'un projet simple, amusant et utile pour les débutants de l'arduino. Vous serez la lampe de la construction et ensuite télécharger le code pour faire la lumière de la lampe jusqu'à une couleur de votre
Lumière d’ambiance Arduino et porte-

Lumière d’ambiance Arduino et porte-

apprendre à faire votre propre lumière d'ambiance par un Arduino!!!Étape 1: Collecte des matériauxTu vas vouloir rassembler ces documents si vous voulez construire la lumière d'ambiance :1 x Arduino Uno1 LED x RGB3 x 330 Omh résistances1 x planche à
Commande de moteurs avec Arduino

Commande de moteurs avec Arduino

il s'agit d'une simple Instructable vous dire comment vous pouvez contrôler des moteurs à courant continu avec un Arduino. Il a été demandé par un autre utilisateur, alors j'ai pensé aller de l'avant et jeter quelque chose ensemble. Je vais utiliser