Taula de continguts:
- Pas 1: requisits
- Pas 2: entendre el maquinari i el programari
- Pas 3: Configuració dels components
- Pas 4: Codificació
Vídeo: Llum nocturna canviant de color amb Ardruino 101: 4 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
En aquest projecte fabricareu una làmpada de nit amb ardruino, Adafruit neo rgb Strips i una impressora 3D.
Tingueu en compte que aquest intructable és exclusivament per al meu projecte escolar. El codi d’aquest projecte es basa en un altre projecte. Dit això, no sóc un expert pel que fa a Ardruino.
Pas 1: requisits
Per a aquest projecte necessitareu el maquinari i les eines següents
Maquinari:
1 - Un ardruino101 (als EUA) o un Genuino101 (per fora dels EUA).
2 - tires de led NeoPixel rgb d'Adafruit (5 volts).
3 - Un connector USB ardruino (tipus B a A).
4 - Un programari d'Ardruino, Ardruino IDE En aquest tutorial utilitzarem la versió 1.8.5. Els requisits de la biblioteca de programari són: 101, Adafruit NeoPixel i Madgwick.
5 -I un objecte per allotjar el vostre maquinari. En aquest cas utilitzaré una impressora 3D. El fitxer d'aquesta impressió en 3D es troba a les descripcions anomenades "Capçal de llum". Tingueu en compte que aquest format de fitxer no està preparat per imprimir en 3D. Depenent de les impressores 3D, primer heu d'executar prèviament el programari d'impressió 3D designat a l'objecte 3D. De vegades, l’escala de la impressió 3D es restablirà. assegureu-vos que el diàmetre estigui ajustat a 11 cm per 11 cm.
6 - Kit de soldadura bàsic.
Pas 2: entendre el maquinari i el programari
Ardruin / Genuino101
Només per aclarir Ardruino101 i genuino101 són exactament iguals al costat dels noms. Tots dos tenen les mateixes especificacions i fan servir el mateix programari.
Ardruino101 posseeix les especificacions bàsiques com l’arduino UNO i molt més. La característica principal d'ardruino101 és l'acceleròmetre i el giroscopi que farem servir en el nostre projecte. Aquest tipus d'ardruino també té la seva única biblioteca de codis anomenada CurrieIMU (Internal Measurement Units) que s'inclou a l'extensió 101 de la biblioteca.
Dit això, parlem del programari.
Software i biblioteques
Ardruino IDE utilitza python com a codi font principal. també és el platvorm de codi principal on s'executa la majoria d'ardruino. Hi ha un munt de tutorials en línia sobre com utilitzar aquest programari, així que us recomano que investigueu primer si sou nou en aquest programa.
Dit això, les biblioteques que utilitzem són les següents:
Al menú Esbós,> Inclou biblioteca> Gestiona biblioteques … Al quadre d’entrada de text escriviu
- 101 Al standart, l'ardruino 101 no s'inclou automàticament a l'IDE ardruino. Necessitem aquesta extensió de biblioteca per codificar el nostre tipus ardruino.
-Adafruit NeoPixel per codificar les nostres tires de píxels Neo.
-Madgwick Per llegir les dades en brut i calcular aquestes dades en brut, pitch and roll.
Nea tires RGB
El tipus que faré servir és de 5 o 5 V. Amb aquest 5v no necessito una font d’energia estesa per controlar les meves tires. En lloc d’això, faré servir el meu ardruino com a font d’energia per controlar i il·luminar les tires.
Aquests són alguns consells que heu de saber abans de començar a utilitzar aquestes tires.
En primer lloc, necessitareu tires de LED RGB Neodigital d’Adafruit. Aquest tipus de tires es poden cotrol·lar mitjançant codis. El següent que heu de saber és que hi ha una part posterior i una part frontal en aquestes tires. Aquesta part posterior i frontal és important per a la soldadura. Assegureu-vos de soldar la part frontal on la tecla de fletxa apunta cap a la punta.
Aquí teniu una guia sobre com utilitzar-los.
Hi ha 3 punts de soldadura que cal tenir en compte Connexió a terra (GND), connexió de tensió (V) i connexió Pin (DIN).
Pas 3: Configuració dels components
Primerament, haureu d’imprimir en 3D el component que podeu trobar als requisits. En aquest cas, faré servir PLA. Assegureu-vos que el diàmetre de l’objecte general sigui d’11cm per 11cm. Això garantirà que l’ardruino i les tires s’adaptin a l’espai. Tingueu en compte que cada impressora 3D utilitza diferents programes per calcular el procés d’impressió. Dit això, el fitxer que utilitzeu es pot escalar de manera diferent, així que tingueu-ho en compte.
En segon lloc després de la impressió, assegureu-vos que els components es puguin tancar. Les impressions 3D juntes formen una esfera. Han d’encaixar bé. Si es vol perdre el contingut, introduïu una mica de cinta al costat interior perquè s'ompli el tap. I si és gruixut, utilitzeu paper de vidre.
En tercer lloc, els esquematics per a l'ardruino i les tires són bastant fàcils. Utilitzarà 3 cables per connectar les tires a l’ardruino. Tingueu en compte que l’únic lloc on he soldat és a les tires. no al propi Ardruino.
GND va a GND
DIN va a un Pin (en el nostre cas pin6 a l'ardruino)
5V passa a 5V
Assegureu-vos que la quantitat de tires de led que utilitzeu sigui màxima de 30. Més tard, no podreu executar correctament el codi. Simplement podeu tallar les tires sense unir que es mostrin amb un signe de tisora.
El quart Evrything hauria d’encaixar molt bé a l’esfera. És possible que hagués fet una intersecció entre 1 de la impressió en 3D per tal de veure un abeurador i col·locar un plàstic de vidre a la part superior.
Pas 4: Codificació
Per tant, ja hauríeu de tenir tots els components necessaris a la vostra biblioteca.
Aquí teniu el codi que necessitareu per executar el projecte. El resultat hauria de ser l’enllaç de vídeo que he enviat en aquesta pàgina.
La font d’aquest codi es pot trobar aquí. Aquest projecte també inclou els passos necessaris per entendre millor el codi i l'algoritme darrere dels usos.
#include #include #include #include
#define PIN 6 // 11 pixels NeoPixel Strip
#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Nombre de píxels #define SAMPLE_RATE 25 // Freqüència de mostreig per a l’acceleròmetre i el giroscopi
// Configuració de Madgwick
Filtre Madgwick; microsPerReading llarg sense signar, microsPrevious; float accelScale, gyroScale;
// Configuració de NeoPixel
Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);
// Espais de color
RGBConverter rgbConverter; doble h = 1; doble s = 1; doble v = 1; byte rgb [3];
// Llum de moviment d'estat
// Estat 0 -> Selecciona Tonalitat - Tonalitat // Estat 1 -> Selecciona Saturació - Rotlle // Estat 2 -> Selecciona valor - Yaw // Estat 3 -> Corregir el color int volàtil estatLàmp = 0;
configuració nul·la () {
Serial.begin (9600);
// Inicieu l'IMU i filtreu
CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);
// Estableix el rang de l’acceleròmetre a 2G
CurieIMU.setAccelerometerRange (2); // Estableix l'abast del giroscopi a 250 graus / segon CurieIMU.setGyroRange (250);
CurieIMU.autoCalibrateAccelerometerOffset (X_AXIS, 0);
CurieIMU.autoCalibrateAccelerometerOffset (Y_AXIS, 0); CurieIMU.autoCalibrateAccelerometerOffset (Z_AXIS, 1); CurieIMU.autoCalibrateGyroOffset ();
CurieIMU.attachInterrupt (eventCallback);
CurieIMU.setDetectionThreshold (CURIE_IMU_TAP, 950); CurieIMU.interrupts (CURIE_IMU_TAP);
// inicialitzeu les variables per ajustar les actualitzacions al ritme correcte
microsPerReading = 1000000 / SAMPLE_RATE; microsPrevious = micros ();
// Inicieu NeoPixel 11
pixels.begin (); pixels.show ();
// Inicieu NeoPixel 1
pixelsStatus.begin (); pixels.show ();
// Mostra l'estat a px
setStatusPixel (statusLamp); }
bucle buit () {
int aix, aiy, aiz; // accelerometer int gix, giy, giz; destral de flotador, ay, az; float gx, gy, gz; rotlle de flotador, pitch, yaw; estàtic sense signar llargs micros Ara;
// comproveu si és hora de llegir les dades i actualitzar el filtre
microsAra = micros (); if (microsAra - microsPrevious> = microsPerReading) {
// llegir dades brutes de CurieIMU
CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);
// convertir de dades brutes a unitats de gravetat i graus / segon
ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);
// actualitzeu el filtre, que calcula l'orientació
filter.updateIMU (gx, gy, gz, ax, ay, az);
// imprimeix el títol, el pitch and roll
roll = filter.getRoll (); pitch = filter.getPitch (); yaw = filter.getYaw ();
// augmentar el temps anterior, de manera que mantenim el ritme adequat
microsPrevious = microsPrevious + microsPerReading;
// Només si canvieu Tonalitat, Saturació o Valor
if (statusLamp seleccioneu Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transform angle pitch = pitch + 90; // Obté coordenades de color des dels angles h = pitch / 180.0;}
// Restriccions d’angles
// només rodeu -90º a 90º = 180º // Estat 1 -> seleccioneu Saturació si (roll> = -90 && roll <= 90 && statusLamp == 1) {// Transform angle roll = roll + 90; // Obté coordenades de color des dels angles s = roll / 180,0; }
// Estat 2 -> seleccioneu Valor
if (statusLamp == 2) {// yaw 0º to 360º v = yaw / 360.0; }
// Converteix a rgb
rgbConverter.hsvToRgb (h, s, v, rgb); / * Serial.print ("Color:"); Serial.print (h); Serial.print ("-"); Serial.print (s); Serial.print ("-"); Serial.print (v); Serial.println ("");
Serial.print ("Orientació:");
Serial.print (yaw); Serial.print (""); Serial.print (pitch); Serial.print (""); Serial.println (rotllo); * /
// Canvia el color dels píxels
per a (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2])); pixels.show (); }}
// Mostra l'estat a px
setStatusPixel (statusLamp); }}
float convertRawAcceleration (int aRaw) {
// ja que estem fent servir el rang 2G // -2g mapes a un valor brut de -32768 // + mapes 2g a un valor brut de 32767
float a = (aRaw * 2.0) / 32768.0;
tornar a; }
float convertRawGyro (int gRaw) {
// ja que estem utilitzant un rang de 250 graus / segons // -250 mapes a un valor brut de -32768 // +250 mapes a un valor brut de 32767
float g = (gRaw * 250.0) / 32768.0;
tornar g; }
static void eventCallback ()
{// Detecta el toc a tots els eixos si (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Toqueu detectat statusLamp:"); Serial.println (statusLamp);
// Canviar d'estat
statusLamp ++;
// Estat d’inici
if (statusLamp> 3) {statusLamp = 0; }}}
void setStatusPixel (int statusPx)
{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); trencar; cas 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); trencar; cas 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); trencar; cas 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); trencar;
}
}
Recomanat:
Llum animada i llum nocturna: 6 passos (amb imatges)
Animated Mood Light & Night Light: Tenint una fascinació que limita a l'obsessió per la llum, vaig decidir crear una selecció de petits PCB modulars que es poguessin utilitzar per crear pantalles de llum RGB de qualsevol mida. Un cop fet el PCB modular, vaig trobar-me amb la idea d’organitzar-los en un
Llum nocturna de detecció de llum commutable: 8 passos (amb imatges)
Llum nocturna amb detecció de llum commutable: aquest instructiu mostra com he piratejat un sensor de llum nocturna perquè es pugui apagar manualment. Llegiu atentament, tingueu en compte els circuits oberts i apagueu la vostra zona si cal abans de provar la unitat
Arbre de Nadal LED canviant de color: 3 passos (amb imatges)
Arbre de Nadal amb LED canviant de color: aquest arbre de Nadal el vaig trobar a una botiga de dòlars l'any passat i volia posar un LED a la part inferior per il·luminar-lo, però mai no hi vaig arribar fins un any després. Aquest és un projecte molt senzill que requereix molt poca soldadura i fa un bonic final
Llum LED RGB (per a fotografia nocturna i llum congelada): 4 passos (amb imatges)
Llum LED RGB (per a fotografies nocturnes i Freezelight): què és el llums LED RGB? Si us agrada la fotografia i sobretot la fotografia nocturna, estic gairebé segur, ja sabeu què és això. Si no, puc dir que és un dispositiu força impressionant que us pot ajudar a crear increïblement
Art LED canviant de color emmarcat: 10 passos (amb imatges)
Art LED canviant de color emmarcat: aquesta peça LED Art emmarcada amb retroil·luminació mostra un patró abstracte i canviant de llum de colors en una pantalla translúcida. La imatge projectada té una qualitat semblant al fluid; una mena de llum de lava d'estat sòlid. Els LED que canvien de color passen lentament per la pinta