Taula de continguts:

Llum nocturna canviant de color amb Ardruino 101: 4 passos (amb imatges)
Llum nocturna canviant de color amb Ardruino 101: 4 passos (amb imatges)

Vídeo: Llum nocturna canviant de color amb Ardruino 101: 4 passos (amb imatges)

Vídeo: Llum nocturna canviant de color amb Ardruino 101: 4 passos (amb imatges)
Vídeo: Слоник Габи - 34см 1 Часть/Elephant Gabi - 34cm 1 Part 2024, Desembre
Anonim
Image
Image
Llum nocturna canviant de color amb Ardruino 101
Llum nocturna canviant de color amb Ardruino 101

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

Requisits
Requisits
Requisits
Requisits
Requisits
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

Configuració dels components
Configuració dels components
Configuració dels components
Configuració dels components
Configuració dels components
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: