Kazalo:

Nočna svetloba, ki spreminja barve z uporabo Ardruina 101: 4 koraki (s slikami)
Nočna svetloba, ki spreminja barve z uporabo Ardruina 101: 4 koraki (s slikami)

Video: Nočna svetloba, ki spreminja barve z uporabo Ardruina 101: 4 koraki (s slikami)

Video: Nočna svetloba, ki spreminja barve z uporabo Ardruina 101: 4 koraki (s slikami)
Video: Высокая плотность 2022 2024, November
Anonim
Image
Image
Nočna svetloba, ki spreminja barve z uporabo Ardruina 101
Nočna svetloba, ki spreminja barve z uporabo Ardruina 101

V tem projektu boste izdelovali nočno svetilko z ardruino, Adafruit neo rgb Strips in 3D tiskalnikom.

Upoštevajte, da je ta vsiljiv izključno za moj šolski projekt. Koda za ta projekt temelji na drugem projektu. Glede na to nisem strokovnjak, ko gre za Ardruino.

1. korak: Zahteve

Zahteve
Zahteve
Zahteve
Zahteve
Zahteve
Zahteve

Za ta projekt boste potrebovali naslednjo strojno opremo in orodja

Strojna oprema:

1 - Ardruino101 (v ZDA) ali Genuino101 (za zunaj ZDA).

2 - LED trakovi NeoPixel rgb iz adafruta (5 voltov).

3 - USB priključek ardruino (priključek tipa B do A).

4 - Programska oprema Ardruino, Ardruino IDE V tej vadnici bomo uporabljali različico 1.8.5. Zahteve za knjižnico programske opreme so: 101, Adafruit NeoPixel in Madgwick.

5 -In predmet za namestitev vaše strojne opreme. V tem primeru bom uporabil 3D tiskalnik. Datoteka za ta 3D tisk se nahaja v opisih, imenovanih "Glava svetilke". Upoštevajte, da ta oblika datoteke ni pripravljena za 3D -tiskanje. Odvisno od vaših 3D tiskalnikov morate najprej na 3D predmetu zagnati določeno programsko opremo za 3D tiskanje. Včasih se lestvica 3D -tiska ponastavi. zato se prepričajte, da je premer nastavljen na 11 cm na 11 cm.

6 - Osnovni komplet za spajkanje.

2. korak: Razumevanje strojne in programske opreme

Ardruin/Genuino101

Da pojasnim, Ardruino101 in genuino101 sta poleg imen popolnoma enaka. Oba imata enake specifikacije in uporabljata isto programsko opremo.

Ardruino101 ima osnovne specifikacije, kot je ardruino UNO in še več. Glavna značilnost ardruino101 je merilnik pospeška in žiroskop, ki ju bomo uporabljali v našem projektu. Tudi ta vrsta ardruina ima svojo edinstveno knjižnico kod, imenovano CurrieIMU (notranje merilne enote), ki je vključena v razširitev knjižnice 101.

S tem se pogovorimo o programski opremi.

Programska oprema in knjižnice

Ardruino IDE uporablja python kot glavno izvorno kodo. to je tudi glavna platforma kode, kjer deluje večina ardruina. Na spletu je veliko vadnic o uporabi te programske opreme, zato vam priporočam, da jih najprej raziščete, če ste novi v tem programu.

Glede na to so knjižnice, ki jih uporabljamo, naslednje:

V meniju Skica> Vključi knjižnico> Upravljanje knjižnic … V polje za vnos besedila vnesite

- 101 Standardno ardruino 101 ni samodejno vključen v ardruino IDE. To razširitev knjižnice potrebujemo za kodiranje našega tipa ardruino.

-Adafruit NeoPixel za kodiranje naših trakov Neo pixel.

-Madgwick Za branje neobdelanih podatkov in izračun teh podatkov v surove, smole in roll.

Brez RGB trakov

Tip I, ki ga bom uporabljal, je 5 -napetostni ali 5 -voltni. S tem 5V ne potrebujem razširjenega vira napajanja za nadzor svojih trakov. Namesto tega bom svoj ardruino uporabljal kot vir energije za nadzor in osvetljevanje trakov.

Preden začnete s temi trakovi, morate vedeti nekaj nasvetov.

Najprej boste potrebovali LED trakove Neodigital RGB iz adafruta. Tovrstne trakove je mogoče upravljati s kodami. Nato morate vedeti, da je na teh trakovih hrbtna in čelna stran. Ta hrbtna in sprednja stran sta pomembni za spajkanje. Spajajte sprednjo stran, kjer puščična tipka kaže stran od konice.

Tukaj je vodnik, kako jih uporabljati.

Obstajajo 3 točke spajkanja, ki jih morate upoštevati. Ozemljitvena povezava (GND), Napetostna povezava (V) in Pin povezava (DIN).

3. korak: Nastavitev komponent

Nastavitev komponent
Nastavitev komponent
Nastavitev komponent
Nastavitev komponent
Nastavitev komponent
Nastavitev komponent

Najprej boste morali 3D natisniti komponento, ki jo najdete v zahtevah. V tem primeru bom uporabil PLA. Prepričajte se, da je premer celotnega predmeta 11 cm x 11 cm. To bo zagotovilo, da se ardruino in trakovi prilegajo v shpere. Upoštevajte, da vsak 3D -tiskalnik za izračun procesa tiskanja uporablja različne programske opreme. Glede na to je mogoče datoteko, ki jo uporabljate, različno prilagajati, zato imejte to v mislih.

Drugič po tiskanju se prepričajte, da se komponente lahko zaprejo. 3D natisi skupaj tvorijo kroglo. Lepo bi se morali prilegati. Če želite izgubiti komponento, na notranjo stran prilepite trak, da bo pokrovček napolnjen. In če gre za debelo, uporabite brusni papir.

Tretjič, skematiči za ardruino in trakove so dokaj enostavni. Za priključitev trakov na ardruino boste uporabili 3 žice. Upoštevajte, da spajkam le na trakovih. ne na samem Ardruinu.

GND gre v GND

DIN gre na pin (v našem primeru pin6 na ardruino)

5V gre na 5V

Prepričajte se, da je količina trakov, ki jih uporabljate, zgornja meja 30. Pri tem pa koda ne bo pravilno izvedena. Lahko preprosto izrežete vse nepotrebne trakove, prikazane s škarjastim znakom.

Četrti Evrything bi se moral lepo prilegati krogli. Morda bi želel narediti presečišče med 1 od 3D tiska, da bi videl korito in na vrh položil plastično korito.

4. korak: Kodiranje

Do sedaj bi morali imeti v knjižnici vse potrebne komponente.

Tukaj je koda, ki jo potrebujete za izvajanje projekta. Rezultat bi moral izgledati kot video povezava, ki jo pošljem na tej strani.

Vir te kode najdete tukaj. Ta projekt vključuje tudi necercarly korake za boljše razumevanje kode in algaritme za uporabo.

#include #include #include #include

#define PIN 6 // NeoPixel Strip s 11 slikovnimi pikami

#define PIN1 7 // 1 -pixel NeoPixel Strip #define NUMPIXELS 30 // Število pikslov #define SAMPLE_RATE 25 // Hitrost vzorčenja za merilnik pospeška in žiroskop

// Madgwickova konfiguracija

Madgwickov filter; nepodpisani dolgi microsPerReading, microsPrevious; float accelScale, gyroScale;

// Konfiguracija NeoPixel

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

// Barvni prostori

RGBConverter rgbConverter; dvojni h = 1; dvojni s = 1; dvojno v = 1; bajt rgb [3];

// Statusna svetilka

// Stanje 0 -> Izbira odtenka -Pitch // Stanje 1 -> Izbira nasičenosti -Roll // Stanje 2 -> Izbira vrednosti -Nihanje // Stanje 3 -> Popravi barvno nestanovitno stanje intLamp = 0;

void setup () {

Serial.begin (9600);

// zaženemo IMU in filtriramo

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

// Nastavite obseg merilnika pospeška na 2G

CurieIMU.setAccelerometerRange (2); // Nastavite obseg žiroskopa na 250 stopinj/sekundo 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.prekinja (CURIE_IMU_TAP);

// inicializiramo spremenljivke za pospeševanje posodobitev za pravilno hitrost

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

// Init NeoPixel 11

pixels.begin (); piksli.show ();

// Init NeoPixel 1

pixelsStatus.begin (); piksli.show ();

// Pokaži stanje v px

setStatusPixel (statusna svetilka); }

void loop () {

int aix, aiy, aiz; // merilnik pospeška int gix, giy, giz; plavajoča sekira, ay, az; float gx, gy, gz; float roll, pitch, yaw; statični nepodpisani dolgi microsNow;

// preverite, ali je čas za branje podatkov in posodobitev filtra

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

// branje surovih podatkov iz CurieIMU

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

// pretvorimo iz surovih podatkov v gravitacijo in stopinje/sekundo

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

// posodobimo filter, ki izračuna orientacijo

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

// natisnemo naslov, višino in višino

roll = filter.getRoll (); pitch = filter.getPitch (); yaw = filter.getYaw ();

// povečujemo prejšnji čas, zato ohranjamo pravilen tempo

microsPrevious = microsPrevious + microsPerReading;

// Samo, če spremenite Hue, Saturation ali Value

if (statusLamp izberite Hue if (smola> = -90 && pitch <= 90 && statusLamp == 0) {// Preoblikujte kotni nagib = pitch + 90; // Pridobite barvne kordinate iz kotov h = pitch / 180.0;}

// Omejitve kotov

// samo roll -90º do 90º = 180º // Stanje 1 -> izberite Saturation if (roll> = -90 && roll <= 90 && statusLamp == 1) {// Pretvorite kotni zvitek = roll + 90; // pridobi barvne kordinate iz kotov s = roll / 180,0; }

// Stanje 2 -> izberite vrednost

if (statusLamp == 2) {// zavijanje 0º do 360º v = zavijanje / 360,0; }

// Pretvori v rgb

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

Serial.print ("Orientation:");

Serial.print (zavijanje); Serial.print (""); Serijski.tisk (smola); Serial.print (""); Serial.println (roll); */

// Spreminjanje barve slikovnih pik

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

// Pokaži stanje v px

setStatusPixel (statusna svetilka); }}

float convertRawAcceleration (int aRaw) {

// ker uporabljamo območje 2G // -2g zemljevidi do surove vrednosti -32768 // +2g zemljevidi do surove vrednosti 32767

float a = (aRaw * 2.0) / 32768.0;

vrniti a; }

float convertRawGyro (int gRaw) {

// ker uporabljamo obseg 250 stopinj/sekundo // -250 zemljevidov do surove vrednosti -32768 // +250 zemljevidov do surove vrednosti 32767

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

vrnitev g; }

static void eventCallback ()

{// Zaznaj dotik na vseh osi, če (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Dotaknite se zaznane statusne svetilke:"); Serial.println (statusLamp);

// Spremeni stanje

statusLamp ++;

// stanje začetka

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

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); prekiniti; primer 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); prekiniti; primer 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); prekiniti; primer 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); prekiniti;

}

}

Priporočena: