Värvi vahetav öövalgus Ardruino abil 101: 4 sammu (piltidega)
Värvi vahetav öövalgus Ardruino abil 101: 4 sammu (piltidega)
Anonim
Image
Image
Värvi vahetav öövalgus Ardruino 101 abil
Värvi vahetav öövalgus Ardruino 101 abil

Selles projektis valmistate öölampi, kasutades ardruino, Adafruit neo rgb ribasid ja 3D -printerit.

Pange tähele, et see integreeritav on puhtalt minu kooliprojekti jaoks. Selle projekti kood põhineb teisest projektist. Sellega seoses ei ole ma Ardruino osas ekspert.

Samm: nõuded

Nõuded
Nõuded
Nõuded
Nõuded
Nõuded
Nõuded

Selle projekti jaoks vajate järgmist riistvara ja tööriistu

Riistvara:

1 - ardruino101 (USA -s) või Genuino101 (väljaspool USA -d).

2 - NeoPixel rgb led ribad adafruitist (5 volti).

3 - Ardruino USB -pistik (B -tüüpi pistik).

4 - Ardruino tarkvara, Ardruino IDE Selles õpetuses kasutame versiooni 1.8.5. Tarkvararaamatukogu nõuded on järgmised: 101, Adafruit NeoPixel ja Madgwick.

5 -Ja objekt riistvara paigutamiseks. Sel juhul kasutan 3D -printerit. Selle 3D -printimise fail asub kirjeldustes nimega "Lamp Head". Pange tähele, et see failivorming ei ole 3D -printimiseks valmis. Sõltuvalt teie 3D -printeritest peate esmalt 3D -objektil käivitama määratud 3D -printimistarkvara. Mõnikord lähtestatakse 3D -printimise skaala. nii et veenduge, et läbimõõt on seatud 11 cm x 11 cm.

6 - põhiline jootekomplekt.

2. samm: riistvara ja tarkvara mõistmine

Ardruin/Genuino101

Ardruino101 ja genuino101 on nimede kõrval täpselt samad. Mõlemal on samad andmed ja sama tarkvara.

Ardruino101 -l on põhilised spetsifikatsioonid, nagu ardruino UNO ja palju muud. Ardruino101 peamine omadus on kiirendusmõõtur ja güroskoop, mida me oma projektis kasutama hakkame. Ka sellel ardruino tüübil on ainulaadne kooditeek CurrieIMU (sisemised mõõtühikud), mis sisaldub raamatukogu laienduses 101.

Sellega seoses räägime tarkvarast.

Tarkvara ja raamatukogud

Ardruino IDE kasutab peamist lähtekoodi pythonit. see on ka peamine koodvormvorm, kus enamik ardruino jookseb. Internetis on selle tarkvara kasutamise kohta palju õpetusi, nii et kui olete selle programmiga uus, soovitan teil need kõigepealt uurida.

Sellega seoses on meie kasutatavad raamatukogud järgmised:

Valige visandimenüüst> Kaasa raamatukogu> Halda teeke … Sisestage tekstisisestuskasti

- 101 Standardi ardruino 101 ei kuulu ardruino IDE -sse automaatselt. Vajame seda teegilaiendit, et kodeerida oma ardruino tüüpi.

-Adafruit NeoPixel meie Neo piksliribade kodeerimiseks.

-Madgwick Toorandmete lugemiseks ja nende töötlemata, pigi ja rullimiseks arvutamiseks.

Ei RGB ribasid

Tüüp, mida ma kasutan, on 5 või 5 V. Selle 5v abil ei vaja ma ribade juhtimiseks pikemat toiteallikat. Selle asemel kasutan ribade juhtimiseks ja valgustamiseks toiteallikana oma ardruinot.

Siin on mõned näpunäited, mida peate teadma enne, kui alustate nende ribade kasutamist.

Kõigepealt vajate Adafruitist pärit Neodigital RGB LED -ribasid. Seda tüüpi ribasid saab koodide abil kohandada. Järgmisena peate teadma, et sellel ribal on tagakülg ja esikülg. See tagakülg ja esikülg on jootmise jaoks olulised. Jootke kindlasti esikülg, kus nooleklahv on otsast eemale suunatud.

Siin on juhend nende kasutamiseks.

Peate meeles pidama kolme jootmispunkti. Maandusühendus (GND), pingeühendus (V) ja tihvtühendus (DIN).

3. samm: komponentide seadistamine

Komponentide seadistamine
Komponentide seadistamine
Komponentide seadistamine
Komponentide seadistamine
Komponentide seadistamine
Komponentide seadistamine

Esmalt peate 3D -printima komponendi, mille leiate nõuetest. Sel juhul kasutan PLA -d. Veenduge, et üldobjekti läbimõõt on 11 x 11 cm. See tagab, et ardruino ja ribad sobituvad shperega. Pange tähele, et iga 3D -printer kasutab oma printimisprotsessi arvutamiseks erinevaid tarkvara. Sellega seoses võib teie kasutatavat faili skaleerida erinevalt, nii et pidage seda meeles.

Teiseks pärast printimist veenduge, et komponendid suudavad sulgeda. 3D -prindid koos moodustavad kera. Need peaksid kenasti sobima. Kui kompositsioon kaotab, lisage siseküljele teip, nii et kork oleks täidetud. Ja kui see on paks, kasutage liivapaberit.

Kolmandaks on ardruino ja ribade skematichs üsna lihtne. Ribade ühendamiseks ardruinoga kasutate kolme juhtmest. Pange tähele, et ainsad kohad, kus ma jootan, on ribadel. mitte Ardruino enda peal.

GND läheb GND -le

DIN läheb nööpnõelale (meie puhul ardruino pin6)

5V läheb 5V peale

Veenduge, et kasutatavate LED -ribade kogus oleks maksimaalselt 30. Enamgi veel, siis ei õnnestu koodi õigesti täita. Kõiki lõikamata ribasid saate lihtsalt lõigata käärimärgiga.

Neljas kõik peaks ilusti sfääri mahtuma. Teile võiks meeldida, et tegin ristmiku ühe 3D -printimise vahel, et näha küna ja asetada selle kohale küna plastik.

4. samm: kodeerimine

Nii et praeguseks peaksid teil olema oma raamatukogus kõik vajalikud komponendid.

Siin on kood, mida vajate projekti käivitamiseks. Tulemus peaks välja nägema nagu sellel lehel saadetud videolink.

Selle koodi allika leiate siit. See projekt hõlmab ka esmaseid samme, et paremini mõista kasutusalade koodi ja algaritmi.

#kaasamine #kaasamine #kaasamine #kaasamine

#define PIN 6 // 11 pikslit NeoPixel Strip

#define PIN1 7 // 1 piksline NeoPixel Strip #define NUMPIXELS 30 // Pikslite arv #define SAMPLE_RATE 25 // Kiirendusmõõturi ja güroskoobi proovivõtu sagedus

// Madgwicki konfiguratsioon

Madgwicki filter; allkirjastamata pikad microsPerReading, microsPrevious; float accelScale, gyroScale;

// NeoPixeli konfiguratsioon

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

// Värviruumid

RGBConverter rgbConverter; kahekordne h = 1; kahekordne s = 1; kahekordne v = 1; bait rgb [3];

// Staatuse liikumislamp

// Olek 0 -> Vali Hue -Pitch // State 1 -> Select Saturation -Roll // State 2 -> Select Value -Yaw // State 3 -> Fix color volatile int statusLamp = 0;

tühine seadistus () {

Seriaalne algus (9600);

// käivitage IMU ja filtreerige

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

// Määra kiirendusmõõturi vahemik 2G

CurieIMU.setAccelerometerRange (2); // Seadke güroskoobi vahemik 250 kraadi sekundis 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.katkestab (CURIE_IMU_TAP);

// initsialiseerida muutujad, et kiirendada värskendusi õigeks kiiruseks

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

// Init NeoPixel 11

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

// Init NeoPixel 1

pixelsStatus.begin (); pixels.show ();

// Näita olekut pikslites

setStatusPixel (olekulamp); }

void loop () {

int aix, aiy, aiz; // kiirendusmõõtur int gix, giy, giz; ujukirves, ay, az; ujuk gx, gy, gz; ujukirull, pigi, nihkumine; staatiline allkirjastamata pikk microsNow;

// kontrollige, kas on aeg andmeid lugeda ja filtrit värskendada

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

// lugeda CurieIMU lähteandmeid

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

// teisendada algandmetest gravitatsiooni ja kraadide/sekundi ühikuteks

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

// värskendage filtrit, mis arvutab orientatsiooni

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

// trükkida pealkiri, samm ja rull

rull = filter.getRoll (); samm = filter.getPitch (); yaw = filter.getYaw ();

// juurdekasv eelmisel korral, nii et hoiame õiget tempot

microsPrevious = microsPrevious + microsPerReading;

// Ainult tooni, küllastuse või väärtuse muutmisel

if (statusLamp vali Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// nurkade sammu teisendamine = samm + 90; // hangib värvikoordinaadid nurkadest h = samm / 180,0;}

// Nurkade piirangud

// veerema ainult -90º kuni 90º = 180º // Olek 1 -> valige Küllastus, kui (rull> = -90 && rull <= 90 && statusLamp == 1) {// Teisendusnurga rull = rull + 90; // Saab nurga alt värvikoordinaadid s = rull / 180.0; }

// Osariik 2 -> valige väärtus

if (olekulamp == 2) {// kaldumine 0º kuni 360º v = pöördumine / 360,0; }

// Teisenda rgb -ks

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Värv:"); Seeriatrükk (h); Serial.print (" -"); Seeria.print (id); Serial.print (" -"); Serial.print (v); Serial.println ("");

Serial.print ("Orientation:");

Serial.print (yaw); Serial.print (""); Jadajälg (samm); Serial.print (""); Serial.println (rull); */

// Pikslite värvi muutmine

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

// Näita olekut pikslites

setStatusPixel (olekulamp); }}

float convertRawAcceleration (int aRaw) {

// kuna kasutame 2G vahemikku // -2g kaarte toorväärtusele -32768 // +2g kaarte toorväärtusele 32767

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

tagasta a; }

float convertRawGyro (int gRaw) {

// kuna me kasutame vahemikku 250 kraadi/sekundit // -250 kaarti toorväärtusele -32768 // +250 kaarti toorväärtusele 32767

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

tagasitulek g; }

staatiline tühine sündmusCallback ()

{// Tuvasta puudutus kõikidel telgedel, kui (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Puudutage tuvastatud olekulampi:"); Serial.println (statusLamp);

// Muuda olekut

statusLamp ++;

// Algseisund

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

void setStatusPixel (int statusPx)

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

}

}