Obsah:

Změna barvy nočního světla pomocí Ardruino 101: 4 kroky (s obrázky)
Změna barvy nočního světla pomocí Ardruino 101: 4 kroky (s obrázky)

Video: Změna barvy nočního světla pomocí Ardruino 101: 4 kroky (s obrázky)

Video: Změna barvy nočního světla pomocí Ardruino 101: 4 kroky (s obrázky)
Video: DualColor LED-osvětlení – změna barvy světla pomocí vestavěného ovladače 2024, Listopad
Anonim
Image
Image
Změna barvy nočního světla pomocí Ardruino 101
Změna barvy nočního světla pomocí Ardruino 101

V tomto projektu budete vyrábět noční lampu pomocí ardruina, Adafruit neo rgb Strips a 3D tiskárny.

Všimněte si, že tato nestrukturovatelná je čistě pro můj školní projekt. Kód pro tento projekt vychází z jiného projektu. Tím jsem řekl, že nejsem odborník, pokud jde o Ardruino.

Krok 1: Požadavky

Požadavky
Požadavky
Požadavky
Požadavky
Požadavky
Požadavky

Pro tento projekt budete potřebovat následující hardware a nástroje

Hardware:

1 - Ardruino101 (v USA) nebo Genuino101 (mimo USA).

2 - LED pásky NeoPixel RGB z adafruitu (5 voltů).

3 - USB konektor ardruino (konektor typu B až A).

4 - Software od Ardruina, Ardruino IDE V tomto tutoriálu budeme používat verzi 1.8.5. Požadavky na softwarovou knihovnu jsou: 101, Adafruit NeoPixel a Madgwick.

5 -A předmět, do kterého se vejde váš hardware. V tomto případě budu používat 3D tiskárnu. Soubor pro tento 3D tisk je umístěn v popisech s názvem „Lamp Head“. Tento formát souboru není připraven pro 3D tisk. V závislosti na vašich 3D tiskárnách musíte na 3D objektu nejprve spustit určený software pro 3D tisk. Někdy se měřítko 3D tisku resetuje. ujistěte se tedy, že průměr je nastaven na 11 cm x 11 cm.

6 - Základní pájecí sada.

Krok 2: Porozumění hardwaru a softwaru

Ardruin/Genuino101

Jen pro upřesnění, Ardruino101 a genuino101 jsou vedle jmen naprosto stejné. Oba mají stejné specifikace a používají stejný software.

Ardruino101 má základní specifikace jako ardruino UNO a další. Hlavním rysem ardruino101 je akcelerometr a gyroskop, které budeme v našem projektu používat. Také tento typ ardruina má jedinečnou knihovnu kódů s názvem CurrieIMU (Interní měřicí jednotky), která je součástí rozšíření knihovny 101.

Tím jsme si promluvili o softwaru.

Software a knihovny

Ardruino IDE používá jako hlavní zdrojový kód python. je to také hlavní kód platvorm, kde běží většina ardruino. Existuje spousta online návodů, jak tento software používat, a proto vám doporučuji nejprve si je prostudovat, pokud jste v tomto programu noví.

To znamená, že knihovny, které používáme, jsou následující:

Z nabídky Skica> Zahrnout knihovnu> Spravovat knihovny… Do pole pro zadávání textu zadejte

- 101 Ve standardu není ardruino 101 automaticky zahrnuto do ardruino IDE. Toto rozšíření knihovny potřebujeme, abychom mohli kódovat náš typ ardruino.

-Adafruit NeoPixel za účelem kódování našich pixelových proužků Neo.

-Madgwick Aby bylo možné načíst nezpracovaná data a vypočítat tato data na nezpracovaná, rozteč a rolování.

Ne RGB proužky

Budu používat typ s napětím 5 V nebo 5 V. S tímto 5v nepotřebuji rozšířený zdroj energie pro ovládání mých pásků. Místo toho budu používat ardruino jako zdroj energie pro ovládání a osvětlení pásů.

Zde je několik tipů, které potřebujete vědět, než s těmito proužky začnete.

Nejprve budete potřebovat Neodigital RGB LED pásky z adafruit. Tento druh proužků je kotrolovatelný pomocí kódů. Dále musíte vědět, že na těchto pásech je zadní a přední strana. Tato zadní a přední strana je důležitá pro pájení. Nezapomeňte pájet přední stranu tak, aby šipka směřovala od špičky.

Zde je návod, jak je používat.

Existují 3 pájecí body, které je třeba mít na paměti Zemnící připojení (GND), Napěťové připojení (V) a Pinové připojení (DIN).

Krok 3: Nastavení komponent

Nastavení komponent
Nastavení komponent
Nastavení komponent
Nastavení komponent
Nastavení komponent
Nastavení komponent

Nejprve budete muset 3D komponentu vytisknout, kterou najdete v požadavcích. V tomto případě budu používat PLA. Ujistěte se, že průměr nadměrného předmětu je 11 cm x 11 cm. Tím se zajistí, že ardruino a proužky zapadnou do shpere. Každá 3D tiskárna používá k výpočtu svého tiskového procesu jiný software. S tím bylo řečeno, že soubor, který používáte, může být různě zmenšen, takže to mějte na paměti.

Druhý po tisku se ujistěte, že se součásti mohou zavřít. 3D výtisky dohromady tvoří kouli. Měly by pěkně sedět. Pokud má komponent ztratit, nalepte na vnitřní stranu pásku, aby se víčko naplnilo. A pokud je hustý, použijte brusný papír.

Za třetí jsou skematichy pro ardruino a pásy poměrně snadné. Pro připojení proužků k ardruinu použijete 3 dráty. Všimněte si, že jediná místa, kde pájím, jsou na pásech. ne na samotném Ardruinu.

GND jde do GND

DIN jde na Pin (v našem případě pin6 na ardruino)

5V jde na 5V

Ujistěte se, že množství LED pásků, které používáte, je limit na 30. Už to nebude a kód se nepodaří správně spustit. Jednoduše můžete odstřihnout všechny nerovnoměrné proužky zobrazené nůžkovým znaménkem.

Čtvrté Evrything by mělo do koule pěkně zapadnout. Mohlo by se vám líbit, že jsem udělal průsečík mezi 1 z 3D tisku, abych viděl koryto a umístil plastový žlab na vrchol.

Krok 4: Kódování

Nyní byste tedy měli mít ve své knihovně všechny potřebné komponenty.

Zde je kód, který budete potřebovat ke spuštění projektu. Výsledek by měl vypadat jako odkaz na video, který posílám na tuto stránku.

Zdroj tohoto kódu najdete zde. Tento projekt také zahrnuje necercarly kroky, aby lépe porozuměl kódu a algaritme za použití.

#include #include #include #include

#define PIN 6 // 11 pixelů NeoPixel Strip

#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Počet píxelů #define SAMPLE_RATE 25 // Vzorkovací frekvence pro akcelerometr a gyroskop

// Konfigurace Madgwick

Madgwickův filtr; unsigned long microsPerReading, microsPrevious; float accelScale, gyroScale;

// Konfigurace NeoPixel

Pixely Adafruit_NeoPixel = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Barevné prostory

RGBConverter rgbConverter; dvojité h = 1; dvojité s = 1; dvojnásobek v = 1; byte rgb [3];

// Stavová pohybová lampa

// Stav 0 -> Vybrat odstín -Rozteč // Stav 1 -> Vybrat sytost -Roll // Stát 2 -> Vybrat hodnotu -Stáčet // Stav 3 -> Opravit barevnou volatile int statusLamp = 0;

neplatné nastavení () {

Serial.begin (9600);

// spusťte IMU a filtrujte

CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);

// Nastavte rozsah akcelerometru na 2G

CurieIMU.setAccelerometerRange (2); // Nastaví rozsah gyroskopu na 250 stupňů/s 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);

// inicializace proměnných ke zrychlení aktualizací na správnou rychlost

microsPerReading = 1000000 / SAMPLE_RATE; microsPrevious = micros ();

// Init NeoPixel 11

pixely.begin (); pixely.show ();

// Init NeoPixel 1

pixelyStatus.begin (); pixely.show ();

// Zobrazit stav v px

setStatusPixel (statusLamp); }

prázdná smyčka () {

int aix, aiy, aiz; // akcelerometr int gix, giy, giz; float ax, ay, az; float gx, gy, gz; float roll, pitch, stáčení; statické nepodepsané dlouhé mikroNow;

// zkontrolujte, zda je čas číst data a aktualizovat filtr

microsNow = micros (); if (microsNow - microsPrevious> = microsPerReading) {

// číst surová data z CurieIMU

CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);

// převod ze surových dat na jednotky gravitace a stupně/sekundu

ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);

// aktualizujte filtr, který počítá orientaci

filter.updateIMU (gx, gy, gz, ax, ay, az);

// tisk nadpisu, rozteče a rolování

roll = filter.getRoll (); rozteč = filtr.getPitch (); zatáčení = filtr.getYaw ();

// zvýšení předchozí doby, takže držíme správné tempo

microsPrevious = microsPrevious + microsPerReading;

// Pouze pokud změníte odstín, sytost nebo hodnotu

if (statusLamp vyberte Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transformace úhlu rozteč = rozteč + 90; // Získá barevnou kordinaci z úhlů h = rozteč / 180,0;}

// Omezení úhlů

// pouze kutálení -90º až 90º = 180º // Stav 1 -> vyberte Sytost if (roll> = -90 && roll <= 90 && statusLamp == 1) {// Transformační úhel roll = roll + 90; // Získá barevné kordináty z úhlů s = roll / 180,0; }

// Stav 2 -> vyberte hodnotu

if (statusLamp == 2) {// zatáčení 0º až 360º v = zatáčení / 360,0; }

// Převést na rgb

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Barva:"); Serial.print (h); Serial.print (" -"); Serial.print (s); Serial.print (" -"); Serial.print (v); Serial.println ("");

Serial.print ("Orientace:");

Serial.print (stáčení); Serial.print (""); Serial.print (rozteč); Serial.print (""); Serial.println (role); */

// Změna barvy pixelů

pro (int px = 0; px <NUMPIXELS; px ++) {pixely.setPixelColor (px, pixely. Color (rgb [0], rgb [1], rgb [2])); pixely.show (); }}

// Zobrazit stav v px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// protože používáme rozsah 2G // -2g mapy na surovou hodnotu -32768 // +2g mapy na surovou hodnotu 32767

float a = (aRaw * 2.0) / 32768.0;

vrátit a; }

float convertRawGyro (int gRaw) {

// protože používáme rozsah 250 stupňů/sekundu // -250 map na surovou hodnotu -32768 // +250 map na surovou hodnotu 32767

float g = (gRaw * 250,0) / 32768,0;

návrat g; }

static void eventCallback ()

{// Detekce klepnutí ve všech osách, pokud (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Klepněte na detekovaný statusLamp:"); Serial.println (statusLamp);

// Změna stavu

statusLamp ++;

// Počáteční stav

if (statusLamp> 3) {statusLamp = 0; }}}

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelyStatus.show (); přestávka; případ 1: pixelyStatus.setPixelColor (0, pixelyStatus. Color (0, 150, 0)); pixelyStatus.show (); přestávka; případ 2: pixelyStatus.setPixelColor (0, pixelyStatus. Color (0, 0, 150)); pixelyStatus.show (); přestávka; případ 3: pixelyStatus.setPixelColor (0, pixelyStatus. Color (0, 0, 0)); pixelyStatus.show (); přestávka;

}

}

Doporučuje: