Innholdsfortegnelse:
- Trinn 1: Krav
- Trinn 2: Forstå maskinvare og programvare
- Trinn 3: Konfigurere komponentene
- Trinn 4: Koding
Video: Fargeskiftende nattlys ved bruk av Ardruino 101: 4 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
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
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
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:
Hot Seat: Bygg en fargeskiftende oppvarmet pute: 7 trinn (med bilder)
Varm sete: Bygg en fargeskiftende oppvarmet pute: Vil du holde deg varm på kalde vinterdager? Hot Seat er et prosjekt som bruker to av de mest spennende e -tekstilmulighetene - fargeendring og varme! Vi skal bygge en setepute som varmes opp, og når den er klar til å gå vil den avsløre
Enkel vippebasert fargeskiftende trådløs Rubiks kubelampe: 10 trinn (med bilder)
Enkel vippebasert fargeendring av trådløs Rubiks kubelampe: I dag skal vi bygge denne fantastiske Rubiks kubelignende lampe som endrer farge basert på hvilken side som er opp. Kuben kjører på et lite LiPo-batteri, ladet med en standard mikro-usb-kabel, og har i min test en batterilevetid på flere dager. Dette
Glødende fargeskiftende gitar: 49 trinn (med bilder)
Glowing Color-Changing Guitar: I kongeriket rock and roll er det viktig å skille seg ut. Med millioner av mennesker i denne verden som kan spille gitar, er det bare ikke å kutte det bare å spille godt. Du trenger noe ekstra for å reise deg som en rockegud. Vurder denne gu
Lag en Joule Thief LED -lommelykt eller nattlys ved å resirkulere et Kodak -engangskamera.: 11 trinn (med bilder)
Lag en Joule Thief LED -lommelykt eller nattlys ved å resirkulere et Kodak -engangskamera.: Etter å ha sett informasjon om Joule Thief LED -drivere på internett bestemte jeg meg for å prøve å lage dem. Etter å ha fått noen arbeidsenheter begynte jeg å eksperimentere (som jeg vanligvis gjør) med forskjellige kilder til deler fra gjenstander jeg kan resirkulere. Jeg fant ut at t
RGB LED Billig og lett fargeskiftende nattlys: 3 trinn
RGB LED billig og lett fargeskiftende nattlys: Dette prosjektet var ganske enkelt når jeg lekte og fant ut av det, noe som tok en stund. Tanken er å kunne endre fargen med en bryter og ha en ledet dimming alternativer også. Dette er elementene du trenger for å