Innholdsfortegnelse:

Fargeskiftende nattlys ved bruk av Ardruino 101: 4 trinn (med bilder)
Fargeskiftende nattlys ved bruk av Ardruino 101: 4 trinn (med bilder)

Video: Fargeskiftende nattlys ved bruk av Ardruino 101: 4 trinn (med bilder)

Video: Fargeskiftende nattlys ved bruk av Ardruino 101: 4 trinn (med bilder)
Video: 30 лучших советов и рекомендаций по Windows 10 на 2020 год 2024, November
Anonim
Image
Image
Fargeskiftende nattlys ved hjelp av Ardruino 101
Fargeskiftende nattlys ved hjelp av Ardruino 101

I dette prosjektet vil du lage en nattlampe med ardruino, Adafruit neo rgb Strips og en 3D -skriver.

Vær oppmerksom på at denne ubegrenselige er rent for mitt skoleprosjekt. Koden for dette prosjektet er basert på et annet prosjekt. Når det er sagt er jeg ikke ekspert når det gjelder Ardruino.

Trinn 1: Krav

Krav
Krav
Krav
Krav
Krav
Krav

For dette prosjektet vil du trenge følgende maskinvare og verktøy

Maskinvare:

1 - En ardruino101 (i USA) eller en Genuino101 (for utenfor USA).

2 - NeoPixel rgb led strips fra adafruit (5 volt).

3 - En ardruino usb -kontakt (type B til A -kontakt).

4 - En programvare fra Ardruino, Ardruino IDE I denne opplæringen bruker vi 1.8.5 -versjonen. Krav til programvarebibliotek er: 101, Adafruit NeoPixel og Madgwick.

5 -Og et objekt for å huse maskinvaren din. I dette tilfellet bruker jeg en 3D -skriver. Filen for denne 3D -utskriften er plassert i beskrivelsene kalt "Lampehode". Vær oppmerksom på at dette filformatet ikke er klar for 3D -utskrift. Avhengig av 3D -skriverne må du først kjøre den angitte 3D -utskriftsprogramvaren på 3D -objektet på forhånd. Noen ganger vil størrelsen på 3D -utskriften nullstilles. så sørg for at diameteren er satt til 11 cm x 11 cm.

6 - Grunnleggende loddesett.

Trinn 2: Forstå maskinvare og programvare

Ardruin/Genuino101

Bare for å presisere Ardruino101 og genuino101 er nøyaktig det samme ved siden av navnene. Begge har de samme spesifikasjonene og bruker den samme programvaren.

Ardruino101 har de grunnleggende spesifikasjonene som ardruino UNO og mer. Hovedtrekk ved ardruino101 er akselerometeret og gyroskopet som vi vil bruke i prosjektet vårt. Også denne typen ardruino har sitt unike kodebibliotek kalt CurrieIMU (interne måleenheter) som er inkludert i bibliotekets utvidelse 101.

Med det sagt kan vi snakke om programvaren.

Programvare og biblioteker

Ardruino IDE bruker python som hovedkilde. Det er også hovedkoden platvorm der de fleste ardruino kjører. Det er mange opplæringsprogrammer på nettet om hvordan du bruker denne programvaren, så jeg anbefaler deg å undersøke dem først hvis du er ny i dette programmet.

Med det sagt er bibliotekene vi bruker følgende:

Fra Sketch -menyen,> Inkluder bibliotek> Administrer biblioteker … Skriv inn tekstboksen

- 101 Som standard er ardruino 101 ikke automatisk inkludert på ardruino IDE. Vi trenger denne bibliotekutvidelsen for å kode vår ardruino -type.

-Adafruit NeoPixel for å kode Neo pixel strips.

-Madgwick For å lese rådata og beregne disse dataene til rå, pitch og roll.

Nye RGB -strips

Typen jeg vil bruke er en 5 spenning eller 5v type. Med denne 5v trenger jeg ikke en utvidet strømkilde for å kontrollere stripene mine. I stedet vil jeg bruke min ardruino som strømkilde for å kontrollere og lyse opp stripene.

Her er noen tips du trenger å vite før du begynner på disse stripene.

Først trenger du en Neodigital RGB led -stripe fra adafruit. Denne typen strimler kan styres med koder. Neste du trenger å vite er at det er en bakside og en forside på disse stripene. Denne baksiden og forsiden er viktig for lodding. Sørg for å lodde forsiden der piltasten peker vekk fra spissen.

Her er en guide for hvordan du bruker dem.

Det er tre loddepunkter du må huske på Jordforbindelse (GND), Spenningstilkobling (V) og Pin -tilkobling (DIN).

Trinn 3: Konfigurere komponentene

Sette opp komponentene
Sette opp komponentene
Sette opp komponentene
Sette opp komponentene
Sette opp komponentene
Sette opp komponentene

Først må du 3d -skrive ut komponenten som du finner i kravene. I dette tilfellet vil jeg bruke PLA. Sørg for at diameteren på det overordnede objektet er 11 cm x 11 cm. Dette vil sikre at ardruino og stripene passer inn i shpere. Vær oppmerksom på at hver 3D -skriver bruker forskjellige programvarer for å beregne utskriftsprosessen. Når det er sagt, kan filen du bruker, skaleres forskjellig, så husk det.

For det andre etter utskriften, må du kontrollere at komponentene kan lukkes. 3D -utskriftene utgjør sammen en kule. De skal passe fint. Hvis komponenten skal miste, legg litt tape på innsiden slik at lokket fylles. Og hvis det er for tykt, bruk sandpapir.

For det tredje er skematichs for ardruino og stripene ganske enkle. Du bruker tre ledninger for å koble stripene til ardruino. Vær oppmerksom på at det eneste stedet jeg lodder er på stripene. ikke på selve Ardruino.

GND går til GND

DIN går til en pin (i vårt tilfelle pin6 på ardruino)

5V går til 5V

Sørg for at mengden led -strimler du bruker, er på 30. En gang da vil det ikke lykkes å utføre koden på riktig måte. Du kan ganske enkelt kutte av alle strimler uten mat som vises med et saksskilt.

Fjerde Evrything skal passe fint i sfæren. Du kan like at jeg gjorde et skjæringspunkt mellom 1 av 3d -printet for å se trau og plassere en se gjennom plast på toppen.

Trinn 4: Koding

Så nå bør du ha alle komponentene som trengs i biblioteket ditt.

Her er koden du trenger for å kjøre prosjektet. Resultatet skal se ut som videolinken jeg sender på denne siden.

Kilden til denne koden finner du her. Dette prosjektet inkluderer også de nødvendige trinnene for bedre å forstå koden og algaritmen bak bruksområdene.

#include #include #include #include

#define PIN 6 // 11 piksler NeoPixel Strip

#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Antall píxels #definer SAMPLE_RATE 25 // Samplingsfrekvens for akselerometer og gyroskop

// Madgwick -konfigurasjon

Madgwick filter; usignerte lange microsPerReading, microsPrevious; float accelScale, gyroScale;

// NeoPixel -konfigurasjon

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

// Fargerom

RGBConverter rgbConverter; dobbel h = 1; dobbel s = 1; dobbel v = 1; byte rgb [3];

// Status bevegelseslampe

// Tilstand 0 -> Velg fargetone -Pitch // Tilstand 1 -> Velg metning -Rull // Tilstand 2 -> Velg verdi -Yaw // Tilstand 3 -> Fix farge flyktig int statusLamp = 0;

ugyldig oppsett () {

Serial.begin (9600);

// start IMU og filtrer

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

// Sett akselerometerområdet til 2G

CurieIMU.setAccelerometerRange (2); // Sett gyroskopområdet til 250 grader/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.avbrudd (CURIE_IMU_TAP);

// initialiser variabler for å tempo oppdateringer for å korrigere hastigheten

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

// Init NeoPixel 11

pixels.begin (); piksler. vis ();

// Init NeoPixel 1

pixelsStatus.begin (); piksler. vis ();

// Vis status i piksler

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // akselerometer int gix, giy, giz; flyteøks, ay, az; flyte gx, gy, gz; float roll, pitch, yaw; statiske usignerte lange mikroerNå;

// sjekk om det er på tide å lese data og oppdatere filteret

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

// les rådata fra CurieIMU

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

// konvertere fra rådata til tyngdekraften og grader/andre enheter

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

// oppdater filteret, som beregner retning

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

// skriv ut overskriften, pitch og roll

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

// øker forrige gang, så vi holder riktig tempo

microsPrevious = microsPrevious + microsPerReading;

// Bare hvis du endrer fargetone, metning eller verdi

hvis (statusLamp velg Fargetone hvis (tonehøyde> = -90 && tonehøyde <= 90 && statusLamp == 0) {// Transform vinkelhøyde = tonehøyde + 90; // Henter fargekoordinater fra vinkler h = tonehøyde / 180,0;}

// Angles -begrensninger

// rull bare -90º til 90º = 180º // Tilstand 1 -> velg metning hvis (rull> = -90 && rull <= 90 && statusLamp == 1) {// Transform vinkelrulle = rull + 90; // Får fargekoordinater fra vinkler s = rulle / 180,0; }

// Stat 2 -> velg Verdi

hvis (statusLamp == 2) {// yaw 0º til 360º v = yaw / 360.0; }

// Konverter til rgb

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

Serial.print ("Orientering:");

Serial.print (gjev); Serial.print (""); Serial.print (tonehøyde); Serial.print (""); Serial.println (rulle); */

// Endre farge på pikslene

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

// Vis status i piksler

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// siden vi bruker 2G -område // -2g kart til en råverdi på -32768 // +2g kart til en råverdi på 32767

flyte a = (aRaw * 2.0) / 32768.0;

returnere a; }

float convertRawGyro (int gRaw) {

// siden vi bruker 250 grader/sekunder rekkevidde // -250 kart til en råverdi på -32768 // +250 kart til en råverdi på 32767

flyte g = (gRaw * 250.0) / 32768.0;

retur g; }

static void eventCallback ()

{// Oppdag trykk i alle akser hvis (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Trykk på oppdaget statuslampe:"); Serial.println (statusLamp);

// Endre tilstand

statusLamp ++;

// Innledende tilstand

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

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); gå i stykker; tilfelle 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); gå i stykker; case 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); gå i stykker; case 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); gå i stykker;

}

}

Anbefalt: