Innehållsförteckning:

Färgskiftande nattljus med Ardruino 101: 4 steg (med bilder)
Färgskiftande nattljus med Ardruino 101: 4 steg (med bilder)

Video: Färgskiftande nattljus med Ardruino 101: 4 steg (med bilder)

Video: Färgskiftande nattljus med Ardruino 101: 4 steg (med bilder)
Video: Färgskiftande stearinljus 2024, Juli
Anonim
Image
Image
Färgskiftande nattljus med Ardruino 101
Färgskiftande nattljus med Ardruino 101

I det här projektet kommer du att göra en nattlampa med ardruino, Adafruit neo rgb Strips och en 3D -skrivare.

Observera att detta oföränderliga är enbart för mitt skolprojekt. Koden för detta projekt är baserad på ett annat projekt. Med det sagt är jag inte expert när det gäller Ardruino.

Steg 1: Krav

Krav
Krav
Krav
Krav
Krav
Krav

För detta projekt behöver du följande hårdvara och verktyg

Hårdvara:

1 - En ardruino101 (i USA) eller en Genuino101 (för utanför USA).

2 - NeoPixel rgb led strips från adafruit (5 volt).

3 - En ardruino usb -kontakt (typ B till A -kontakt).

4 - En programvara från Ardruino, Ardruino IDE I denna handledning kommer vi att använda 1.8.5 -versionen. Krav på programvarubibliotek är: 101, Adafruit NeoPixel och Madgwick.

5 -Och ett föremål för din maskinvara. I det här fallet kommer jag att använda en 3D -skrivare. Filen för denna 3D -utskrift finns i beskrivningarna som kallas "Lamphuvud". Observera att detta filformat inte är klart för 3D -utskrift. Beroende på dina 3D -skrivare måste du först köra den utsedda programvaran för 3D -utskrift på 3D -objektet i förväg. Ibland återställs skalan på 3D -utskriften. så se till att diametern är inställd på 11 cm med 11 cm.

6 - Grundläggande lödkit.

Steg 2: Förstå maskinvaran och programvaran

Ardruin/Genuino101

Bara för att förtydliga Ardruino101 och genuino101 är exakt samma bredvid namnen. Båda har samma specifikationer och använder samma programvara.

Ardruino101 har de grundläggande specifikationerna som ardruino UNO och mer. Huvuddragen i ardruino101 är accelerometern och gyroskopet som vi kommer att använda i vårt projekt. Även denna typ av ardruino har sitt unika kodbibliotek som kallas CurrieIMU (Internal Measuring Units) som ingår i bibliotekstillägget 101.

Med det sagt kan vi prata om programvaran.

Programvara och bibliotek

Ardruino IDE använder python som huvudkällkod. Det är också huvudkodplattformen där de flesta ardruino körs. Det finns gott om självstudier på nätet om hur du använder den här programvaran så jag rekommenderar att du undersöker dem först om du är ny i denna program.

Med det sagt är biblioteken vi använder följande:

Från menyn Skiss,> Inkludera bibliotek> Hantera bibliotek … Skriv in textrutan

- 101 Som standard ingår ardruino 101 inte automatiskt i ardruino IDE. Vi behöver detta bibliotekstillägg för att kunna koda vår ardruino -typ.

-Adafruit NeoPixel för att koda våra Neo -pixelremsor.

-Madgwick För att läsa rådata och för att beräkna dessa data till raw, pitch och roll.

Neo RGB -remsor

Den typ jag kommer att använda är en 5 -spännings- eller 5v -typ. Med denna 5v behöver jag inte en utökad strömkälla för att styra mina remsor. Istället kommer jag att använda min ardruino som strömkälla för att styra och lysa upp remsorna.

Här är några tips du behöver veta innan du börjar med dessa remsor.

Först behöver du en Neodigital RGB led -remsa från adafruit. Denna typ av remsor kan styras med hjälp av koder. Nästa du behöver veta är att det finns en baksida och en framsida på dessa remsor. Denna baksida och framsida är viktig för lödningen. Se till att du lödar framsidan där piltangenten pekar bort från spetsen.

Här är en guide om hur du använder dem.

Det finns tre lödpunkter du behöver tänka på Jordanslutning (GND), Spänningsanslutning (V) och Stiftanslutning (DIN).

Steg 3: Konfigurera komponenterna

Konfigurera komponenterna
Konfigurera komponenterna
Konfigurera komponenterna
Konfigurera komponenterna
Konfigurera komponenterna
Konfigurera komponenterna

Först måste du 3D -skriva ut komponenten som du hittar i kraven. I det här fallet kommer jag att använda PLA. Se till att det övergripande föremålets diameter är 11 cm x 11 cm. Detta säkerställer att ardruino och remsorna passar in i shpere. Observera att varje 3D -skrivare använder olika program för att beräkna utskriftsprocessen. Med det sagt kan filen du använder skalas annorlunda så kom ihåg det.

För det andra efter utskriften, se till att komponenterna kan stängas. 3D -utskrifterna utgör tillsammans en sfär. De ska passa fint. Om komponenten ska tappa lägg ut lite tejp på insidan så att locket fylls. Och om det är för tjockt, använd sandpapper.

För det tredje är skematichs för ardruino och remsorna ganska enkla. Du kommer att använda 3 trådar för att ansluta remsorna till ardruino. Observera att det enda stället jag lödar är på remsorna. inte på själva Ardruino.

GND går till GND

DIN går till en Pin (i vårt fall pin6 på ardruino)

5V går till 5V

Se till att mängden ledremsor du använder är på 30. Då kommer det inte att köra koden ordentligt. Du kan helt enkelt klippa av alla osedda remsor som visas med en saxskylt.

Fjärde Evrything ska passa fint i sfären. Du skulle kunna tycka att jag gjorde en skärningspunkt mellan 1 av 3D -utskriften för att se tråget och placera en se trågplast på toppen.

Steg 4: Kodning

Så nu borde du ha alla komponenter som behövs i ditt bibliotek.

Här är koden du behöver för att köra projektet. Resultatet ska se ut som videolänken jag skickar på den här sidan.

Källan till denna kod finns här. Detta projekt innehåller också nödvändiga steg för att bättre förstå koden och algaritmen bakom användningen.

#include #include #include #include

#define PIN 6 // 11 pixlar NeoPixel Strip

#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Antal pixlar #definiera SAMPLE_RATE 25 // Samplingshastighet för accelerometer och gyroskop

// Madgwick -konfiguration

Madgwick filter; osignerade långa microsPerReading, microsFöregående; float accelScale, gyroScale;

// NeoPixel -konfiguration

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

// Färgutrymmen

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

// Status rörelse lampa

// Tillstånd 0 -> Välj nyans -Tonhöjd // Tillstånd 1 -> Välj mättnad -Rulle // Tillstånd 2 -> Välj värde -Yaw // Tillstånd 3 -> Fix färgflyktig int statusLamp = 0;

void setup () {

Serial.begin (9600);

// starta IMU och filtrera

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

// Ställ in accelerometerns intervall på 2G

CurieIMU.setAccelerometerRange (2); // Ställ in gyroskopområdet till 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.avbrott (CURIE_IMU_TAP);

// initiera variabler för att snabba uppdateringar för att korrigera hastigheten

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

// Init NeoPixel 11

pixlar. börjar (); pixlar. visa ();

// Init NeoPixel 1

pixelsStatus.begin (); pixlar. visa ();

// Visa status i px

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // accelerometer int gix, giy, giz; flyta yxa, ay, az; float gx, gy, gz; float roll, pitch, yaw; statiska osignerade långa mikroerNu;

// kontrollera om det är dags att läsa data och uppdatera filtret

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

// läs rådata från CurieIMU

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

// konvertera från rådata till gravitation och grader/sekundenheter

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

// uppdatera filtret, som beräknar orientering

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

// skriv ut rubriken, pitch och rulla

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

// öka tidigare gång, så vi håller rätt tempo

microsPrevious = microsPrevious + microsPerReading;

// Endast om du ändrar färgton, mättnad eller värde

if (statusLamp välj Nyans om (tonhöjd> = -90 && tonhöjd <= 90 && statusLamp == 0) {// Transform vinkelhöjd = tonhöjd + 90; // Hämtar färgkoordinater från vinklarna h = tonhöjd / 180,0;}

// Vinkelbegränsningar

// rulla bara -90º till 90º = 180º // Status 1 -> välj Mättnad om (rulle> = -90 && rulle <= 90 && statusLamp == 1) {// Transform vinkelrulle = rulle + 90; // Hämtar färgkoordinater från vinklar s = rulle / 180,0; }

// Ange 2 -> välj Värde

if (statusLamp == 2) {// yaw 0º till 360º v = yaw / 360.0; }

// Konvertera till rgb

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Färg:"); Serial.print (h); Serial.print (" -"); Serial.print (s); Serial.print (" -"); Serial.print (v); Serial.println ("");

Serial.print ("Orientering:");

Serial.print (yaw); Serial.print (""); Serial.print (tonhöjd); Serial.print (""); Serial.println (rulle); */

// Ändra färg på pixlarna

för (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2])); pixlar. visa (); }}

// Visa status i px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// eftersom vi använder 2G intervall // -2g kartor till ett råvärde på -32768 // +2g kartor till ett råvärde på 32767

flyta a = (aRaw * 2.0) / 32768.0;

returnera a; }

float convertRawGyro (int gRaw) {

// eftersom vi använder 250 grader/sekunder intervall // -250 kartor till ett råvärde på -32768 // +250 kartor till ett råvärde på 32767

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

retur g; }

static void eventCallback ()

{// Upptäck tryck i alla axlar om (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Tryck på upptäckt statusLamp:"); Serial.println (statusLamp);

// Ändra tillstånd

statusLamp ++;

// Ursprungligt tillstånd

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

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); ha sönder; fall 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); ha sönder; fall 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); ha sönder; fall 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); ha sönder;

}

}

Rekommenderad: