Table des matières:
- Étape 1: Planification de la construction:
- Étape 2: L'abat-jour fait main
- Étape 3: L'abat-jour fait main
- Étape 4: Le circuit électrique:
- Étape 5: Le code:
- Étape 6: Obtenez-le autonome avec le chargeur de démarrage gravé par PonyProg
- Étape 7: C'est donc ma lampe d'ambiance Arduino
Vidéo: Lampe d'ambiance RVB fabriquée à la main alimentée par Arduino : 7 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:10
Cette instructable est subdivisée en 5 parties: - Planification de la construction (étape 1) - L'abat-jour fait à la main (étape 2 + 3) - Le circuit électronique pour piloter des LED 3W avec le contrôleur ATmega8 (étape 4) - Le code (étape 5) - Comment l'obtenir autonome (flasher le bootloader Arduino avec PonyProg et graver le croquis) (étape 6) à venir Vid: quelques impressions
de.youtube.com/watch?v=apZ9NpaUG84 Pic1: La lampe d'ambiance Pic2: Une puissante LED 3W
Étape 1: Planification de la construction:
J'aime faire un concept sur une seule feuille de papier. Sur la première feuille, vous voyez quelques premières idées. J'ai choisi le design en bas à droite. La deuxième page montre quelques détails pour la construction. Les mesures sont expérimentales comme à chaque fois, mais ok pour moi;-) Mes pensées matérielles étaient:- Puis-je manipuler les matériaux ?- Est-ce que la lumière brillera à travers l'abat-jour ?- Quelle proportion doit-elle avoir ?- De combien de boutons et de pots ai-je besoin pour une interface simple ?Mes réflexions sur le logiciel étaient:Combien de fonctions différentes la lampe devrait-elle avoir ? - Décoloration RVB automatique avec vitesse variable - Réglage manuel des couleurs - Blanc avec luminosité réglable
Étape 2: L'abat-jour fait main
Rassembler les matériaux: L'ombre: J'ai trouvé une feuille de 3 pieds x 3 pieds de plastique de 30 moulins au magasin (Pic 1-3). Utilisez un couteau tranchant pour le couper. J'ai givré le plastique à l'aide de papier de verre (Pic 4-6). Pour obtenir un cylindre lisse j'ai vissé le tout ensemble après avoir percé les bons trous (Pic7-8). Montez les abat-jour en plastique sur les supports filetés en laiton. Il a l'air bien et est plutôt facile à obtenir et à manipuler. J'ai percé et taraudé les trous pour qu'ils correspondent à la barre filetée 1/8ème (Pic9-10). Pendant ce temps, j'ai fabriqué un dissipateur thermique pour refroidir les LED 3W et avoir une base solide. Pour obtenir pas trop de nuances de l'arbre, je construis une petite cage à partir de baguette de soudage avec un écrou M8 sur le dessus (Pic12). En fin de compte, j'ai assemblé le tout. Les petites vis et écrous étaient un peu délicats, mais 30 minutes plus tard, je l'ai fait.
Étape 3: L'abat-jour fait main
La base: les disques ont été placés dans le tour pour le rendre lisse et rond. Ensuite, je l'ai teint avec une teinture pour bois d'acajou afin de donner une belle apparence au pin. plastique givré comme abat-jour, et rétro-éclairé avec une microLED RVB (Pic5). Les boutons: J'ai fait le bouton à partir d'un morceau d'acajou et les boutons à partir d'une chute de noyer.
Étape 4: Le circuit électrique:
Sur la première photo, vous voyez mon schéma. Et voici une autre vidéo:
Étape 5: Le code:
Sur les photos, vous voyez mon processus avec Arduino. Tout d'abord, j'ai essayé avec mon ProtoShield, une batterie et quelques sortes de LED. J'ai commencé avec "Spooky Projects" et "BionicArduino" de TodEKurt il y a quelques mois.https://todbot.com/blog/spookyarduino/Mon code est juste une combinaison délicate de son code de projet. "RGBMoodlight", "RGBPotMixer" et quelques extensions. Trois entrées analogiques et une entrée numérique comme commutateur de mode (Merci à Ju. pour la routine d'interruption:). Les LED sont connectées à D9, D10 et D11 qui prennent en charge PulseWithModulation. Si vous le souhaitez, je peux publier le croquis, mais c'est une combinaison vraiment nue de ces deux grands codes. Voici mon code original de la lampe. Il a l'air un peu brouillon, car c'était mon stade très précoce de la programmation…Mais si vous le copiez, cela devrait fonctionner très bien.
Code pour mon "Moodlamp", basé sur "dimmingLEDs" par Clay Shirky
*nejo sept.2008
- Code final pour la lampe d'ambiance avec commutateur de mode d'interruption, numérotation rapide analogique pour la décoloration RVB et le changement de couleur RVB.
- La fonction de gradation fonctionne uniquement pour la couleur blanche
*nejo octobre 2008
- Extension sonore pour la lampe d'ambiance:
- Un microphone à condensateur avec un petit ampli LM368, un recifier et un filtre passe-bas RC
- avec une autre entrée analogique, j'utilise la fonction RGBPotMixer pour changer la couleur en obtenant le signal du micro.
* * *Code pour le fondu enchaîné de 3 LED, rouge, verte et bleue, ou une LED tricolore, en utilisant PWM
- Le programme passe lentement du rouge au vert, du vert au bleu et du bleu au rouge
- Le code de débogage suppose Arduino 0004, car il utilise les nouvelles fonctions de style Serial.begin()
- à l'origine "dimmingLEDs" par Clay Shirky
*
- AnalogRead est activé sur la broche A0 pour faire varier la vitesse de fondu RVB
- AnalogRead est activé sur la broche A2 pour faire varier la couleur hueRGB
* * */#include // Outputint ledPin = 13; // controlPin pour le débogage int redPin = 9; // LED rouge, connectée à la broche numérique 9int greenPin = 10; // LED verte, connectée à la broche numérique 10int bluePin = 11; // LED bleue, connectée à la broche numérique 11int dimredPin = 3; // Broches pour la valeur de variation analogique, connectées au driver du transistorint dimgreenPin = 5;int dimbluePin = 6;// Inputint switchPin = 2; // le commutateur est connecté à la broche D2int val = 0; // variable de lecture de la broche statusint buttonState; // variable pour maintenir l'état du bouton buttonPresses = 0; // 3 presses pour aller!int potPin0 = 0; // Pot pour ajuster le délai entre les fondus dans Moodlamp; int potPin2 = 2; // Sortie du potentiomètre pour changer le colorint hueRGB potVal = 0; // Variable pour stocker l'entrée du potentiomètreint maxVal = 0; // la valeur pour enregistrer le facteur de gradation par défaut est 255, si aucun pot n'est connectéint dimPin = 4; //Pot connecté à A4 pour faire varier la luminosité// Variables de programmeint redVal = 255; // Variables pour stocker les valeurs à envoyer au pinsint greenVal = 1; // Les valeurs initiales sont Red full, Green et Blue offint blueVal = 1;int i = 0; // Loop counter int wait;// = 15; // délai de 50 ms (0,05 seconde); raccourcir pour un fondu enchaîné plus rapide k = 0; // valeur pour le controlLED dans le flash-functionint DEBUG = 0; // Compteur DEBUG; s'il est défini sur 1, les valeurs seront réécrites via serialint LCD = 0; // compteur LCD; s'il est défini sur 1, écrira les valeurs via serialvoid setup(){ pinMode(ledPin, OUTPUT); pinMode(redPin, SORTIE); // définit les broches comme sortie pinMode(greenPin, OUTPUT); pinMode(bluePin, SORTIE); pinMode(dimredPin, SORTIE); pinMode(dimgreenPin, SORTIE); // définit les broches comme sortie pinMode(dimbluePin, OUTPUT); pinMode(potPin2, INPUT); // pinMode(potPin0, INPUT); // pinMode(dimPin, INPUT); // pinMode(switchPin, INPUT); // Définir la broche du commutateur comme entrée attachInterrupt(0, isr0, RISING); if (DEBUG) { // Si nous voulons voir les valeurs des broches pour le débogage… Serial.begin(9600); // …configurer la sortie série sur le style 0004 }}// Main programvoid loop(){ if (buttonPresses == 0) { Moodlamp(); // appelle la fonction Moodlight } if (buttonPresses == 1) { RGBPotMixer(); // appelle la fonction de mix manuel } if (buttonPresses == 2) { White(); // C'est tout blanc ici } if (buttonPresses == 3) { } //Moodlamp(); //RGBPotMixer(); //Blanche(); Surveiller(); dim();}void Monitor(){ // Envoie l'état au moniteur if (DEBUG) { // Si nous voulons lire la sortie DEBUG += 1; // Incrémente le compteur DEBUG if (DEBUG > 10) { // Imprime toutes les 10 boucles DEBUG = 1; // Réinitialise le compteur Serial.print(i); // Commandes série dans le style 0004 Serial.print("\t"); // Imprimer un onglet Serial.print("R:"); // Indique que la sortie est red value Serial.print(redVal); // Affiche la valeur rouge Serial.print("\t"); // Imprimer un onglet Serial.print("G:"); // Répétez l'opération pour le vert et le bleu… Serial.print(greenVal); Serial.print("\t"); Serial.print("B:"); Serial.print(blueVal); // println, pour terminer par un retour chariot Serial.print("\t"); Serial.print("dimValue:"); Serial.print(maxVal); // println, pour terminer par un retour chariot Serial.print("\t"); Serial.print("wait:"); Serial.print(attendre); // écrit la valeur du potPin0 sur le moniteur Serial.print("\t"); Serial.print("hueRGBvalue"); Serial.print(potVal); // écrit la valeur du potPin0 sur le moniteur Serial.print("\t"); Serial.print("buttonState:"); Serial.print(buttonState); // écrit la valeur du potPin0 sur le moniteur Serial.print("\t"); Serial.print("boutonPresses:"); Serial.println(boutonPresses); // écrit la valeur du bouton Presses sur le moniteur } }} void dim() // Fonction de gradation du blanc // peut-être plus tard pour tous les modes{ maxVal = analogRead(dimPin); maxVal /= 4; // La plage analogique de 0..1024 est trop importante pour atténuer la valeur 0..255 analogWrite(dimredPin, maxVal); analogWrite(dimgreenPin, maxVal); analogWrite(dimbluePin, maxVal);}void Moodlamp(){ wait = analogRead(potPin0); // recherche la valeur du potPin0; // si aucun Pot n'est connecté: wait 255 i += 1; // Incrémenter le compteur // i = i - maxVal; if (i < 255) // Première phase des fondus { redVal -= 1; // Rouge bas greenVal += 1; // Green up blueVal = 1; // Bleu bas } else if (i < 509) // Deuxième phase des fondus { redVal = 1; // Rouge bas greenVal -= 1; // Vert bas blueVal += 1; // Blue up } else if (i < 763) // Troisième phase des fondus { redVal += 1; // Red up greenVal = 1; // Vert lo2 blueVal -= 1; // Bleu vers le bas } else // Réinitialise le compteur et recommence les fondus { i = 1; } // nous faisons "255-redVal" au lieu de simplement "redVal" car les // LED sont connectées à +5V au lieu de Gnd analogWrite(redPin, 255 - redVal); // Écrire les valeurs actuelles sur les broches LED analogWrite(greenPin, 255 - greenVal); analogWrite(bluePin, 255 - blueVal); /* dimredVal =min(redVal - maxVal, 255); //gradation dimredVal =max(redVal - maxVal, 0); dimgreenVal =min(greenVal - maxVal, 255); dimgreenVal =max(greenVal - maxVal, 0); dimblueVal =min(blueVal - maxVal, 255); dimblueVal =max(blueVal - maxVal, 0); analogWrite(redPin, 255 - dimredVal); // Écrire les valeurs actuelles sur les broches LED analogWrite(greenPin, 255 - dimgreenVal); analogWrite(bluePin, 255 - dimblueVal); */ attendre /=4; retarder (attendre); // Pause pour 'attendre' quelques millisecondes avant de reprendre la boucle}void RGBPotMixer(){ potVal = analogRead(potPin2); // lecture de la valeur du potentiomètre sur la broche d'entrée potVal = potVal / 4; // conversion de 0-1023 en 0-255 hue_to_rgb(potVal); // Traiter potVal comme teinte et convertir en vals RVB // "255-" est dû au fait que nous avons des LED à anode commune, pas à cathode commune analogWrite(redPin, 255-redVal); // Écrire des valeurs sur les broches LED analogWrite(greenPin, 255-greenVal); analogWrite(bluePin, 255-blueVal); }void White(){ analogWrite(redPin, maxVal); // Écrire des valeurs sur les broches LED analogWrite(greenPin, maxVal); analogWrite(bluePin, maxVal); }/*
- Étant donné une teinte variable « h », qui va de 0 à 252,
- définissez la valeur de couleur RVB de manière appropriée.
- Suppose la saturation maxValimum et la valeur maximale (luminosité)
- Effectue des calculs purement entiers, sans virgule flottante.
*/void hue_to_rgb(byte hue) { if(hue > 252) hue = 252; // recul au 252 !! nejo octet hd = teinte / 42; // 36 == 252/7, 252 == H_MAX octet hi = hd % 6; // donne 0-5 octet f = teinte % 42; octet fs = f * 6; switch(salut) { cas 0: redVal = 252; verteVal = fs; blueVal = 0; Pause; cas 1: redVal = 252-fs; verteVal = 252; blueVal = 0; Pause; cas 2: redVal = 0; verteVal = 252; blueVal = fs; Pause; cas 3: redVal = 0; greenVal = 252-fs; blueVal = 252; Pause; cas 4: redVal = fs; verteVal = 0; blueVal = 252; Pause; cas 5: redVal = 252; verteVal = 0; blueVal = 252-fs; Pause; } } void isr0(){ Serial.println("\n \n inerrupt \n"); buttonState = digitalRead(switchPin); // lit l'état initial delayMicroseconds(100000); //if (val != buttonState) { // l'état du bouton a changé ! // if (buttonState == HIGH) { // vérifie si le bouton est maintenant enfoncé buttonPresses++; // } // val = buttonState; // enregistre le nouvel état dans notre variable if (buttonPresses == 3) { // zur cksetzen buttonPresses = 0; } } // }L'étape suivante était les transistors-drivers. J'ai utilisé 3 transistors PNP avec un courant maximum sur 3Ampère. Une fois le courant direct et la tension régulés, l'émetteur LED fonctionnait parfaitement à pleine intensité.
Étape 6: Obtenez-le autonome avec le chargeur de démarrage gravé par PonyProg
Comment utiliser votre port parallèle pour graver le chargeur de démarrage arduino sur un ATmega168 ou un ATmega8 pour utiliser une puce vierge bon marché avec l'environnement arduino. /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS
Étape 7: C'est donc ma lampe d'ambiance Arduino
Si vous l'avez aimé, veuillez me noter.
Conseillé:
Lampe(s) LED alimentée par batterie avec charge solaire : 11 étapes (avec photos)
Lampe(s) LED à piles avec charge solaire : ma femme enseigne aux gens comment faire du savon, la plupart de ses cours avaient lieu le soir et ici en hiver, il fait noir vers 16h30, certains de ses étudiants avaient du mal à trouver notre loger. Nous avions un panneau devant mais même avec un éclairage de rue
Lampe d'ambiance avec LED RVB : 4 étapes
Lampe d'ambiance avec LED RVB : Ce projet consiste à traiter une lampe de *sentimentos* utilizando un Arduino Uno. Primero se necesitan varios materiales como jumpers, leds RGB o Neopixel, dependiendo de cómo se desee hacer. En este caso utilizaremos led RGB con ánodo común
Lampe d'ambiance RVB moderne : 7 étapes (avec photos)
Lampe d'ambiance RVB moderne : Vous voulez ajouter du style à votre bureau ? Nous vous proposons une lampe d'ambiance DIY fabriquée à partir de pièces que vous pouvez facilement trouver dans votre garage ou votre remise. Notre lampe d'ambiance présente un design esthétique et moderne tout en vous donnant un contrôle total sur la couleur
Interface homme-machine : Fonctionnez une pince (fabriquée par Kirigami) par mouvement du poignet à l'aide d'EMG. : 7 étapes
Interface homme-ordinateur : Fonctionnez une pince (fabriquée par Kirigami) par mouvement du poignet à l'aide d'EMG. : C'était donc mon premier essai avec une interface homme-ordinateur. J'ai capturé les signaux d'activation musculaire de mon mouvement du poignet à l'aide d'un capteur EMG, je l'ai traité via python et arduino et actionné une pince à base d'origami
HX1-DM - la boîte à rythmes DIY alimentée par Arduino DUE (fabriquée avec un Dead Maschine MK2) : 4 étapes
HX1-DM - la boîte à rythmes DIY alimentée par Arduino DUE recyclée (fabriquée avec un Dead Maschine MK2) : la spécification. Contrôleur Midi hybride / boîte à rythmes : alimenté par Arduino DUE ! 16 pads de détection de vélocité avec une latence très faible 1>ms 8 boutons assignables par l'utilisateur à n'importe quelle commande Midi #CC Séquenceur intégré 16 canaux (aucun ordinateur nécessaire !!) Fonction MIDI in/out/thru