Satura rādītājs:

Krāsu maiņas nakts gaisma, izmantojot Ardruino 101: 4 soļi (ar attēliem)
Krāsu maiņas nakts gaisma, izmantojot Ardruino 101: 4 soļi (ar attēliem)

Video: Krāsu maiņas nakts gaisma, izmantojot Ardruino 101: 4 soļi (ar attēliem)

Video: Krāsu maiņas nakts gaisma, izmantojot Ardruino 101: 4 soļi (ar attēliem)
Video: 35 Scary Ghost videoklipi: 2023. gada lielizmēra kompilācija [V1] 2024, Novembris
Anonim
Image
Image
Krāsu mainošā nakts gaisma, izmantojot Ardruino 101
Krāsu mainošā nakts gaisma, izmantojot Ardruino 101

Šajā projektā jūs izgatavosit nakts lampu, izmantojot ardruino, Adafruit neo rgb Strips un 3D printeri.

Ņemiet vērā, ka šis neatkārtojamais materiāls ir paredzēts tikai manam skolas projektam. Šī projekta kods ir balstīts uz citu projektu. Ņemot to vērā, es neesmu eksperts, runājot par Ardruino.

1. darbība. Prasības

Prasības
Prasības
Prasības
Prasības
Prasības
Prasības

Šim projektam jums būs nepieciešama šāda aparatūra un rīki

Aparatūra:

1 - ardruino101 (ASV) vai Genuino101 (ārpus ASV).

2 - NeoPixel rgb led sloksnes no adafruit (5 volti).

3 - Ardruino USB savienotājs (B tipa A savienotājs).

4 - programmatūra no Ardruino, Ardruino IDE Šajā apmācībā mēs izmantosim 1.8.5 versiju. Programmatūras bibliotēkas prasības ir šādas: 101, Adafruit NeoPixel un Madgwick.

5 -Un objekts, kurā ievietot aparatūru. Šajā gadījumā es izmantošu 3D printeri. Šīs 3D izdrukas fails atrodas aprakstos ar nosaukumu "Lamp Head". Ņemiet vērā, ka šis faila formāts nav gatavs 3D drukāšanai. Atkarībā no jūsu 3D printeriem vispirms 3D objektā vispirms jāpalaiž norādītā 3D drukas programmatūra. Dažreiz 3D drukas skala tiks atiestatīta. tāpēc pārliecinieties, ka diametrs ir iestatīts uz 11 cm līdz 11 cm.

6 - Pamata lodēšanas komplekts.

2. darbība. Aparatūras un programmatūras izpratne

Ardrūns/Genuino101

Tikai, lai precizētu, blakus nosaukumiem Ardruino101 un genuino101 ir vienādi. Abiem ir vienādas specifikācijas un tiek izmantota viena un tā pati programmatūra.

Ardruino101 ir tādas pamata specifikācijas kā ardruino UNO un citas. Ardruino101 galvenā iezīme ir akselerometrs un žiroskops, ko mēs izmantosim mūsu projektā. Arī šāda veida ardruino ir unikāla kodu bibliotēka ar nosaukumu CurrieIMU (iekšējās mērvienības), kas ir iekļauta bibliotēkas paplašinājumā 101.

Ņemot to vērā, runāsim par programmatūru.

Programmatūra un bibliotēkas

Ardruino IDE kā galveno avota kodu izmanto python. tas ir arī galvenais kods platvorm, kur skrien lielākā daļa ardruino. Tiešsaistē ir daudz pamācību par šīs programmatūras izmantošanu, tāpēc es iesaku vispirms izpētīt tās, ja esat šīs programmas lietotājs.

Ņemot to vērā, mūsu izmantotās bibliotēkas ir šādas:

Izvēlnē Skice izvēlieties> Iekļaut bibliotēku> Pārvaldīt bibliotēkas … Teksta ievades lodziņā ierakstiet

- 101 Standartā ardruino 101 netiek automātiski iekļauts ardruino IDE. Šis bibliotēkas paplašinājums mums ir nepieciešams, lai kodētu mūsu ardruino tipu.

-Adafruit NeoPixel, lai kodētu mūsu Neo pikseļu sloksnes.

-Madgwick Lai nolasītu neapstrādātus datus un aprēķinātu šos datus neapstrādātiem, soli pa solim.

Neo RGB sloksnes

I tips, kuru izmantošu, ir 5 sprieguma vai 5 V tips. Ar šo 5v man nav nepieciešams pagarināts strāvas avots, lai kontrolētu manas sloksnes. Tā vietā es izmantošu savu ardruino kā strāvas avotu, lai kontrolētu un apgaismotu sloksnes.

Šeit ir daži padomi, kas jums jāzina, pirms sākat lietot šīs sloksnes.

Vispirms jums būs nepieciešamas Neodigital RGB LED sloksnes no adafruit. Šāda veida sloksnes ir kodējamas, izmantojot kodus. Tālāk jums jāzina, ka uz šīm sloksnēm ir aizmugure un priekšpuse. Šī aizmugure un priekšpuse ir svarīga lodēšanai. Pārliecinieties, ka lodējat priekšējo pusi, kur bulttaustiņš ir vērsts prom no gala.

Šeit ir rokasgrāmata par to izmantošanu.

Jums ir jāpatur prātā 3 lodēšanas punkti Zemes savienojums (GND), Sprieguma savienojums (V) un Tapas savienojums (DIN).

3. darbība: komponentu iestatīšana

Komponentu uzstādīšana
Komponentu uzstādīšana
Komponentu uzstādīšana
Komponentu uzstādīšana
Komponentu uzstādīšana
Komponentu uzstādīšana

Vispirms jums būs jāizdrukā 3D sastāvdaļa, kuru varat atrast prasībās. Šajā gadījumā es izmantošu PLA. Pārliecinieties, vai kopējā objekta diametrs ir 11 cm līdz 11 cm. Tas nodrošina, ka ardruino un sloksnes iederas shpere. Ņemiet vērā, ka katrs 3D printeris drukāšanas procesa aprēķināšanai izmanto dažādas programmatūras. Ņemot to vērā, jūsu izmantotais fails var tikt mērogots atšķirīgi, tāpēc paturiet to prātā.

Otrkārt pēc drukāšanas pārliecinieties, vai sastāvdaļas var aizvērt. 3D izdrukas kopā veido sfēru. Viņiem vajadzētu labi iederēties. Ja kompozītmateriāls ir jāzaudē, piestipriniet līmlenti uz iekšpusi, lai vāciņš būtu piepildīts. Un, ja tas ir pārāk biezs, izmantojiet smilšpapīru.

Treškārt, ardruino un sloksņu skematichs ir diezgan viegli. Jūs izmantosit 3 vadus, lai savienotu sloksnes ardruino. Ņemiet vērā, ka vienīgās lodēšanas vietas ir uz sloksnēm. nevis uz paša Ardruino.

GND iet uz GND

DIN iet uz tapu (mūsu gadījumā pin6 uz ardruino)

5V iet uz 5V

Pārliecinieties, vai izmantoto LED sloksņu daudzums ir 30 griesti. Pēc tam vairs neizdosies pareizi izpildīt kodu. Jūs varat vienkārši izgriezt visas nesagrieztās sloksnes, kuras nav redzamas ar šķērveida zīmi.

Ceturtajam visam vajadzētu labi iederēties sfērā. Jums varētu patikt, ka es izveidoju krustojumu starp 1 no 3D drukas, lai redzētu tekni un uz augšu novietotu redzamu siles plastmasu.

4. solis: kodēšana

Tātad līdz šim jūsu bibliotēkā vajadzētu būt visiem nepieciešamajiem komponentiem.

Šeit ir kods, kas jums būs nepieciešams, lai palaistu projektu. Rezultātam vajadzētu izskatīties kā video saitei, ko es sūtu šajā lapā.

Šī koda avotu var atrast šeit. Šis projekts ietver arī nepabeigtos soļus, lai labāk izprastu kodu un aļģiju, kas ir lietošanas pamatā.

#iekļaut #iekļaut #iekļaut #iekļaut

#define PIN 6 // 11 pikseļi NeoPixel Strip

#define PIN1 7 // 1 pikseļu NeoPixel Strip #define NUMPIXELS 30 // Pikseļu skaits #define SAMPLE_RATE 25 // Akselerometra un žiroskopa paraugu ņemšanas ātrums

// Madgwick konfigurācija

Madgwick filtrs; neparakstīts garš microsPerReading, microsPrevious; float accelScale, gyroScale;

// NeoPixel konfigurācija

Adafruit_NeoPixel pikseļi = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Krāsu telpas

RGBConverter rgbConverter; divkāršs h = 1; dubultā s = 1; dubultā v = 1; baits rgb [3];

// Statusa kustības lampa

// Stāvoklis 0 -> Atlasīt nokrāsu -piķis // Stāvoklis 1 -> Atlasīt piesātinājumu -rullītis // Stāvoklis 2 -> Atlasīt vērtību -Pagriezties // Stāvoklis 3 -> Labot krāsu gaistošs int statussLamp = 0;

void setup () {

Sērijas sākums (9600);

// palaidiet IMU un filtrējiet

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

// Iestatiet akselerometra diapazonu uz 2G

CurieIMU.setAccelerometerRange (2); // Iestatiet žiroskopa diapazonu uz 250 grādiem sekundē 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ēt mainīgos, lai paātrinātu atjauninājumus, lai panāktu pareizu ātrumu

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

// Init NeoPixel 11

pikseļi.sākas (); pikseļi.parādīt ();

// Init NeoPixel 1

pixelsStatus.begin (); pikseļi.parādīt ();

// Rādīt statusu pikseļos

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // akselerometrs int gix, giy, giz; pludiņš cirvis, ay, az; pludiņš gx, gy, gz; pludiņa rullis, piķis, pagriešanās; statisks neparakstīts garš microsNow;

// pārbaudiet, vai ir pienācis laiks lasīt datus un atjaunināt filtru

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

// lasīt neapstrādātus datus no CurieIMU

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

// konvertēt no neapstrādātiem datiem uz gravitācijas un grādu/sekundes vienībām

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

// atjauniniet filtru, kas aprēķina orientāciju

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

// izdrukāt virsrakstu, piķi un rullīti

roll = filter.getRoll (); piķis = filtrs.getPitch (); grieziens = filtrs.getYaw ();

// pieaugums iepriekšējā reizē, tāpēc mēs saglabājam pareizu tempu

microsPrevious = microsPrevious + microsPerReading;

// Tikai tad, ja tiek mainīta nokrāsa, piesātinājums vai vērtība

if (statusLamp izvēlieties nokrāsu, ja (piķis> = -90 && solis <= 90 && statusLamp == 0) {// Pārveidot leņķa piķi = piķis + 90; // Iegūst krāsu koordinātas no leņķiem h = piķis / 180,0;}

// Leņķu ierobežojumi

// ritināt tikai no -90º līdz 90º = 180º // 1. stāvoklis -> izvēlieties Piesātinājums, ja (rullis> = -90 && rullis <= 90 && statusLamp == 1) {// Pārveidot leņķa rullīti = rullis + 90; // Iegūst krāsu koordinātas no leņķiem s = roll / 180.0; }

// 2. stāvoklis -> atlasiet Vērtība

if (statusLamp == 2) {// pagriešanās no 0º līdz 360º v = pagriešanās / 360,0; }

// Pārvērst par rgb

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Krāsa:"); Sērijas nospiedums (h); Serial.print (" -"); Sērijas nospiedums (-i); Serial.print (" -"); Sērijas nospiedums (v); Serial.println ("");

Serial.print ("Orientācija:");

Sērijas nospiedums (pagrieziens); Serial.print (""); Sērijas nospiedums (piķis); Serial.print (""); Serial.println (roll); */

// Mainīt pikseļu krāsu

par (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2]))); pikseļi.parādīt (); }}

// Rādīt statusu pikseļos

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// tā kā mēs izmantojam 2G diapazonu // -2g kartes līdz neapstrādātai vērtībai -32768 // +2g kartes līdz neapstrādātai vērtībai 32767

pludiņš a = (aRaw * 2.0) / 32768.0;

atgriezt a; }

float convertRawGyro (int gRaw) {

// tā kā mēs izmantojam 250 grādu/sekunžu diapazonu // -250 kartes līdz neapstrādātai vērtībai -32768 // +250 kartes līdz neapstrādātai vērtībai 32767

pludiņš g = (gRaw * 250,0) / 32768,0;

atgriešanās g; }

static void eventCallback ()

{// Atklāt pieskārienu visās asīs, ja (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Pieskarieties konstatētajai statusa lampai:"); Serial.println (statusLamp);

// Mainīt stāvokli

statusLamp ++;

// Sākotnējais stāvoklis

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

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); pārtraukums; 1. gadījums: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); pārtraukums; 2. gadījums: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); pārtraukums; 3. gadījums: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); pārtraukums;

}

}

Ieteicams: