Obsah:

Zmena farby nočného svetla pomocou Ardruino 101: 4 kroky (s obrázkami)
Zmena farby nočného svetla pomocou Ardruino 101: 4 kroky (s obrázkami)

Video: Zmena farby nočného svetla pomocou Ardruino 101: 4 kroky (s obrázkami)

Video: Zmena farby nočného svetla pomocou Ardruino 101: 4 kroky (s obrázkami)
Video: High Density 2022 2024, Júl
Anonim
Image
Image
Zmena farby nočného svetla pomocou Ardruino 101
Zmena farby nočného svetla pomocou Ardruino 101

V tomto projekte budete vyrábať nočnú lampu pomocou ardruina, Adafruit neo rgb Strips a 3D tlačiarne.

Všimnite si toho, že táto nezničiteľná je čisto pre môj školský projekt. Kód pre tento projekt je založený na inom projekte. Tým som povedal, že nie som odborník na Ardruino.

Krok 1: Požiadavky

Požiadavky
Požiadavky
Požiadavky
Požiadavky
Požiadavky
Požiadavky

Na tento projekt budete potrebovať nasledujúci hardvér a nástroje

Hardvér:

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

2 - LED pásy NeoPixel RGB z adafruitu (5 voltov).

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

4 - Software od Ardruino, Ardruino IDE V tomto návode budeme používať verziu 1.8.5. Požiadavky na softvérovú knižnicu sú: 101, Adafruit NeoPixel a Madgwick.

5 -A objekt na uloženie vášho hardvéru. V tomto prípade budem používať 3D tlačiareň. Súbor pre túto 3D tlač sa nachádza v popisoch s názvom „Lamp Head“. Tento formát súboru nie je pripravený na 3D tlač. V závislosti od vašich 3D tlačiarní musíte na 3D objekte najskôr spustiť určený softvér pre 3D tlač. Niekedy sa mierka 3D tlače resetuje. uistite sa teda, že priemer je nastavený na 11 cm x 11 cm.

6 - Základná spájkovacia súprava.

Krok 2: Pochopenie hardvéru a softvéru

Ardruin/Genuino101

Len na objasnenie, Ardruino101 a genuino101 sú vedľa názvov úplne rovnaké. Oba majú rovnaké špecifikácie a používajú rovnaký softvér.

Ardruino101 má základné špecifikácie ako ardruino UNO a ďalšie. Hlavnou črtou ardruino101 je akcelerometer a gyroskop, ktoré v našom projekte použijeme. Aj tento typ ardruina má jedinečnú knižnicu kódov s názvom CurrieIMU (interné merné jednotky), ktorá je súčasťou rozšírenia knižnice 101.

Potom sa porozprávajte o softvéri.

Softvér a knižnice

Ardruino IDE používa ako hlavný zdrojový kód python. je to tiež hlavný kód platvorm, kde beží väčšina ardruino. Na internete je veľa návodov, ako používať tento softvér, a preto vám odporúčam najskôr si ich najskôr preštudovať, ak ste v tomto programe nový.

To znamená, že knižnice, ktoré používame, sú nasledujúce:

V ponuke Náčrt> Zahrnúť knižnicu> Spravovať knižnice … Do textového poľa zadajte

- 101 Štandardne ardruino 101 nie je automaticky zahrnuté do ardruino IDE. Toto rozšírenie knižnice potrebujeme na kódovanie nášho typu ardruino.

-Adafruit NeoPixel za účelom kódovania našich pixelových prúžkov Neo.

-Madgwick Aby bolo možné načítať nespracované údaje a vypočítať tieto údaje na surové, rozstupové a valcovacie.

Žiadne pásy RGB

Budem používať typ 5 alebo 5 V. S týmto 5v nepotrebujem rozšírený zdroj energie na ovládanie svojich pásikov. Namiesto toho budem používať ardruino ako zdroj energie na ovládanie a osvetlenie pásov.

Tu je niekoľko tipov, ktoré potrebujete vedieť, než s týmito pásikmi začnete.

Najprv budete potrebovať Neodigital RGB LED pásy z adafruit. Tento druh prúžkov je možné kotrolovať pomocou kódov. Ďalej musíte vedieť, že na týchto pásoch je zadná strana a predná strana. Táto zadná a predná strana je dôležitá pre spájkovanie. Uistite sa, že prednú stranu, na ktorú smeruje kláves so šípkou, spájkujete smerom od hrotu.

Tu je návod, ako ich používať.

Existujú 3 spájkovacie body, ktoré musíte mať na pamäti uzemnenie (GND), napätie (V) a kolíkové pripojenie (DIN).

Krok 3: Inštalácia komponentov

Inštalácia komponentov
Inštalácia komponentov
Inštalácia komponentov
Inštalácia komponentov
Inštalácia komponentov
Inštalácia komponentov

Najprv budete musieť 3D tlačiť komponent, ktorý nájdete v požiadavkách. V tomto prípade budem používať PLA. Uistite sa, že priemer spoločného predmetu je 11 cm x 11 cm. Tým sa zaistí, že ardruino a pásy zapadnú do shpere. Každá 3D tlačiareň používa na výpočet svojho tlačového postupu iný softvér. V dôsledku toho môže byť použitý súbor inak zmenšený, takže na to pamätajte.

Sekundu po tlači sa uistite, že sa súčiastky môžu zavrieť. 3D výtlačky spolu tvoria guľu. Mali by pekne sedieť. Ak má komponent stratiť, prilepte na vnútornú stranu pásku, aby bol uzáver naplnený. A ak je hrubý, použite brúsny papier.

Po tretie, skematichy pre ardruino a pásy sú pomerne jednoduché. Na pripojenie prúžkov k ardruinu budete používať 3 vodiče. Všimnite si, že jediné miesta, kde spájkujem, sú na pásoch. nie na samotnom Ardruine.

GND ide na GND

DIN ide na pin (v našom prípade pin6 na ardruino)

5V ide na 5V

Uistite sa, že množstvo LED pásikov, ktoré používate, je maximálne 30. Ďalej a už sa vám nepodarí správne vykonať kód. Nožnicovým znamienkom môžete jednoducho nastrihať akékoľvek nerovnomerné pásy.

Štvrté Evrything by malo pekne zapadnúť do sféry. Mohlo by sa vám páčiť, keby som urobil križovatku medzi 1 z 3D výtlačkov, aby som videl žľab a na vrch umiestnil plastový žľab.

Krok 4: Kódovanie

Teraz by ste teda už vo svojej knižnici mali mať všetky potrebné komponenty.

Tu je kód, ktorý budete potrebovať na spustenie projektu. Výsledok by mal vyzerať ako odkaz na video, ktorý posielam na túto stránku.

Zdroj tohto kódu nájdete tu. Tento projekt tiež obsahuje nekrokové kroky s cieľom lepšie porozumieť kódu a algaritmu za použitiami.

#include #include #include #include

#define PIN 6 // 11 pixelov NeoPixel Strip

#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Počet píxelov #define SAMPLE_RATE 25 // Vzorkovacia frekvencia pre akcelerometer a gyroskop

// Konfigurácia Madgwick

Madgwickov filter; unsigned long microsPerReading, microsPrevious; float accelScale, gyroScale;

// Konfigurácia NeoPixel

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

// Farebné priestory

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

// Stavová pohybová lampa

// Stav 0 -> Vyberte odtieň -Rozstup // Stav 1 -> Vyberte sýtosť -Roll // Stav 2 -> Vyberte hodnotu -Stáčanie // Stav 3 -> Opravte prchavú farbu int statusLamp = 0;

neplatné nastavenie () {

Serial.begin (9600);

// spustenie IMU a filtrovanie

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

// Nastavte rozsah akcelerometra na 2G

CurieIMU.setAccelerometerRange (2); // Nastavte rozsah gyroskopu na 250 stupňov/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);

// inicializácia premenných na zrýchlenie aktualizácií na správnu rýchlosť

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

// Init NeoPixel 11

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

// Init NeoPixel 1

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

// Zobraziť stav v px

setStatusPixel (statusLamp); }

prázdna slučka () {

int aix, aiy, aiz; // akcelerometer int gix, giy, giz; float ax, ay, az; float gx, gy, gz; plavák, smola, vybočenie; statické bez znamienka dlhé mikroNow;

// skontrolujte, či je čas na čítanie údajov a aktualizáciu filtra

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

// prečítajte surové údaje z CurieIMU

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

// prevod z nespracovaných údajov na gravitáciu a jednotky stupňov/sekundu

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

// aktualizácia filtra, ktorý počíta orientáciu

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

// vytlačte nadpis, výšku a rolku

roll = filter.getRoll (); rozteč = filter.getPitch (); zatáčanie = filter.getYaw ();

// zvýšenie predchádzajúceho času, takže držíme správne tempo

microsPrevious = microsPrevious + microsPerReading;

// Iba ak zmeníte odtieň, sýtosť alebo hodnotu

if (statusLamp zvoľte Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Uhol transformácie uhol rozstupu = rozteč + 90; // Získava farebné kordináty z uhlov h = rozstup / 180,0;}

// Obmedzenia uhlov

// iba hod -90 ° až 90 ° = 180 ° // Stav 1 -> zvoľte Saturation if (roll> = -90 && roll <= 90 && statusLamp == 1) {// Uhol transformácie roll = roll + 90; // Získava farebné kordináty z uhlov s = roll / 180,0; }

// Stav 2 -> vyberte hodnotu

if (statusLamp == 2) {// vybočenie 0º až 360º v = vybočenie / 360,0; }

// Previesť na rgb

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

Serial.print ("Orientácia:");

Serial.print (vybočenie); Serial.print (""); Serial.print (rozstup); Serial.print (""); Serial.println (kotúč); */

// Zmena farby pixelov

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

// Zobraziť stav v px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// keďže používame rozsah 2G // -2g mapy na nespracovanú hodnotu -32768 // +2g mapy na nespracovanú hodnotu 32767

float a = (aRaw * 2,0) / 32768,0;

vrátiť a; }

float convertRawGyro (int gRaw) {

// pretože používame rozsah 250 stupňov/sekundu // -250 máp na nespracovanú hodnotu -32768 // +250 máp na nespracovanú hodnotu 32767

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

návrat g; }

static void eventCallback ()

{// Zistenie klepania vo všetkých osiach, ak (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Klepnutie zistilo statusLamp:"); Serial.println (statusLamp);

// Zmeniť stav

statusLamp ++;

// Počiatočný stav

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

neplatné setStatusPixel (int statusPx)

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

}

}

Odporúča: