Tartalomjegyzék:

Színváltó éjszakai fény az Ardruino használatával 101: 4 lépés (képekkel)
Színváltó éjszakai fény az Ardruino használatával 101: 4 lépés (képekkel)

Videó: Színváltó éjszakai fény az Ardruino használatával 101: 4 lépés (képekkel)

Videó: Színváltó éjszakai fény az Ardruino használatával 101: 4 lépés (képekkel)
Videó: Установка приложения ArduBlock 2024, November
Anonim
Image
Image
Színt váltó éjszakai fény az Ardruino 101 használatával
Színt váltó éjszakai fény az Ardruino 101 használatával

Ebben a projektben éjszakai lámpát fog készíteni ardruino, Adafruit neo rgb szalagok és 3D nyomtató használatával.

Ne feledje, hogy ez a megmunkálhatatlan csak az iskolai projektemre vonatkozik. A projekt kódja egy másik projektből származik. Ezzel azt mondtam, hogy nem vagyok szakértő Ardruino esetében.

1. lépés: Követelmények

Követelmények
Követelmények
Követelmények
Követelmények
Követelmények
Követelmények

Ehhez a projekthez a következő hardverekre és eszközökre lesz szüksége

Hardver:

1 - Egy ardruino101 (az Egyesült Államokban) vagy a Genuino101 (az Egyesült Államokon kívül).

2 - NeoPixel rgb led csíkok adafruitból (5 volt).

3 - A ardruino usb csatlakozó (B -A típusú csatlakozó).

4 - Ardruino szoftver, Ardruino IDE Ebben az oktatóanyagban az 1.8.5 verziót fogjuk használni. A szoftverkönyvtár követelményei: 101, Adafruit NeoPixel és Madgwick.

5 -És egy tárgy a hardver elhelyezésére. Ebben az esetben 3D nyomtatót fogok használni. A 3D nyomtatáshoz tartozó fájl a "Lámpafej" nevű leírásban található. Ne feledje, hogy ez a fájlformátum nem alkalmas 3D nyomtatásra. A 3D nyomtatóktól függően először futtatnia kell a kijelölt 3D nyomtatási szoftvert a 3D objektumon. Néha a 3D nyomtatás skálája visszaáll. ezért győződjön meg arról, hogy az átmérő 11 x 11 cm -re van állítva.

6 - Alap forrasztó készlet.

2. lépés: A hardver és a szoftver megértése

Ardruin/Genuino101

Csak tisztázni kell, hogy az Ardruino101 és a genuino101 pontosan ugyanaz a nevek mellett. Mindkettő ugyanazokkal a specifikációkkal rendelkezik, és ugyanazt a szoftvert használja.

Az Ardruino101 rendelkezik az alapvető specifikációkkal, mint az ardruino UNO és még sok más. Az ardruino101 fő jellemzője a gyorsulásmérő és a giroszkóp, amelyeket projektünkben használni fogunk. Az ilyen típusú ardruino egyedi kódkönyvtára CurrieIMU (belső mérési egységek), amely a 101 könyvtárbővítményben található.

Ennek megfelelően beszéljünk a szoftverről.

Szoftverek és könyvtárak

Az Ardruino IDE fő forráskódként python -t használ. ez a fő platvorm kód is, ahol a legtöbb ardruino fut. Rengeteg oktatóanyag található az interneten ennek a szoftvernek a használatáról, ezért azt javaslom, hogy először tanulmányozza ezeket, ha még nem ismeri ezt a programot.

Ezzel együtt a következő könyvtárakat használjuk:

A Vázlat menüben válassza a Könyvtár felvétele> Könyvtárak kezelése… parancsot. A szövegbeviteli mezőbe írja be

- 101 A szabvány szerint az ardruino 101 nem szerepel automatikusan az ardruino IDE -n. Szükségünk van erre a könyvtárbővítményre az ardruino típus kódolásához.

-Adafruit NeoPixel a Neo pixel csíkjaink kódolásához.

-Madgwick Annak érdekében, hogy a nyers adatokat ki lehessen olvasni és kiszámítani nyers, pitch és roll módra.

Neo RGB csíkok

Az I -es típus 5 vagy 5 V -os típusú lesz. Ennél az 5V -nál nem kell hosszabb áramforrás a csíkok vezérléséhez. Ehelyett az ardruino -t használom áramforrásként a csíkok vezérléséhez és megvilágításához.

Íme néhány tipp, amit tudnia kell, mielőtt elkezdi használni ezeket a csíkokat.

Először is szüksége lesz egy Neodigital RGB led csíkra az adafruitból. Ez a fajta csík kódokkal kódolható. Ezután tudnia kell, hogy ezen a csíkon van egy hátoldal és egy elülső oldal. Ez a hát és az elülső oldal fontos a forrasztáshoz. Győződjön meg arról, hogy az elülső oldalt forrasztja, ahol a nyíl gomb a hegyétől távol van.

Íme egy útmutató a használatukhoz.

Három forrasztási pontot kell szem előtt tartania: földelés (GND), feszültségcsatlakozás (V) és tűcsatlakozás (DIN).

3. lépés: Az összetevők beállítása

Az alkatrészek beállítása
Az alkatrészek beállítása
Az alkatrészek beállítása
Az alkatrészek beállítása
Az alkatrészek beállítása
Az alkatrészek beállítása

Először ki kell nyomtatnia a követelményeket tartalmazó összetevőt. Ebben az esetben PLA -t fogok használni. Győződjön meg arról, hogy az átfogó tárgy átmérője 11 x 11 cm. Ez biztosítja, hogy az ardruino és a csíkok illeszkedjenek a shpere -be. Ne feledje, hogy minden 3D nyomtató különböző szoftvereket használ a nyomtatási folyamat kiszámításához. Ezzel azt mondhatja, hogy az Ön által használt fájl különböző mértékben méretezhető, ezért ezt tartsa szem előtt.

Másodszor a nyomtatás után győződjön meg arról, hogy az alkatrészek zárhatók. A 3D nyomatok együtt gömböt alkotnak. Szépen illeszkedniük kell. Ha a csomag elveszik, akkor ragasztószalagot kell ragasztani a belső oldalra, hogy a kupak betöltődjön. És ha vastag, használjon csiszolópapírt.

Harmadszor, az ardruino és a csíkok skematichjai meglehetősen egyszerűek. Három vezetéket fog használni a csíkok csatlakoztatásához az ardruino -hoz. Ne feledje, hogy az egyetlen hely, ahol forrasztom, a csíkokon van. nem magán az Ardruino -n.

A GND a GND -hez megy

A DIN egy csaphoz megy (esetünkben a pin6 az ardruino -n)

5V megy 5V -ra

Győződjön meg arról, hogy a felhasznált LED csíkok mennyisége 30 -as. Egyszerűen levághatja a levágott csíkokat olló jelzéssel.

Negyedik Minden jól illeszkedjen a szférába. Lehet, hogy kereszteztem a 3D -s nyomtatás 1 -e között, hogy lássam a vályút, és a tetejére egy lágy műanyagot helyezzek.

4. lépés: Kódolás

Így mostanra rendelkeznie kell a könyvtárában az összes szükséges összetevővel.

Itt van a kód, amire szüksége lesz a projekt futtatásához. Az eredménynek úgy kell kinéznie, mint az ezen az oldalon küldött videó link.

A kód forrása itt található. Ez a projekt magában foglalja az elhanyagolható lépéseket is annak érdekében, hogy jobban megértsük a felhasználások mögött rejlő kódot és algritmust.

#befoglalás #befoglalás #befoglalás #befoglalás

#define PIN 6 // 11 pixel NeoPixel Strip

#define PIN1 7 // 1 képpontos NeoPixel Strip #define NUMPIXELS 30 // Pikselek száma #define SAMPLE_RATE 25 // Mintavételi arány gyorsulásmérőhöz és giroszkóphoz

// Madgwick konfiguráció

Madgwick szűrő; unsigned long microsPerReading, microsPrevious; float accelScale, gyroScale;

// NeoPixel konfiguráció

Adafruit_NeoPixel pixelek = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelekStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Színes terek

RGBConverter rgbConverter; kettős h = 1; kettős s = 1; kettős v = 1; bájt rgb [3];

// Állapot mozgáslámpa

// Állapot 0 -> Válassza ki a Színárnyalat -Hangmagasság // Állapot 1 -> Válassza ki a Telítettséget -Roll // Állapot 2 -> Érték kiválasztása -Hajlítás // Állapot 3 -> Rögzítse a színt ill. Int állapotLamp = 0;

void setup () {

Sorozat.kezdet (9600);

// indítsa el az IMU -t és a szűrőt

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

// Állítsa a gyorsulásmérő tartományát 2G -ra

CurieIMU.setAccelerometerRange (2); // Állítsa a giroszkóp tartományát 250 fokra/másodpercre 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.megszakítja (CURIE_IMU_TAP);

// inicializálja a változókat a frissítések ütemezéséhez a megfelelő arányhoz

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

// Init NeoPixel 11

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

// Init NeoPixel 1

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

// Állapot megjelenítése képpontban

setStatusPixel (állapotLámpa); }

void loop () {

int aix, aiy, aiz; // gyorsulásmérő int gix, giy, giz; úszóbalta, ay, az; float gx, gy, gz; úszótekercs, szurok, billegés; statikus előjel nélküli hosszú microsNow;

// ellenőrizze, hogy ideje -e olvasni az adatokat és frissíteni a szűrőt

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

// nyers adatok olvasása a CurieIMU -ból

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

// nyers adatok konvertálása gravitációs és fok/másodperces egységekre

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

// frissítse a tájolást kiszámító szűrőt

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

// kinyomtatja a címsort, a pályát és a tekercset

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

// növekmény előző alkalommal, tehát megfelelő tempót tartunk

microsPrevious = microsPrevious + microsPerReading;

// Csak akkor, ha megváltoztatja az árnyalatot, a telítettséget vagy az értéket

if (statusLamp válassza a Hue lehetőséget, ha (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// szögmagasság átalakítása = pitch + 90; // Színkoordinátákat kap a h = pitch / 180.0;} szögekből

// Szögkorlátozások

// csak tekerés -90º -tól 90º -ig = 180º // 1. állapot -> válassza ki a Telítettséget, ha (roll> = -90 && roll <= 90 && statusLamp == 1) {// Transform szögtekercs = roll + 90; // Színkoordinátákat kap szögből s = roll / 180.0; }

// 2. állapot -> válassza az Érték lehetőséget

if (állapotLámpa == 2) {// elfordulás 0º -tól 360º -ig v = elfordul / 360,0; }

// konvertálás rgb -re

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Szín:"); Soros.nyomat (h); Soros.nyomtatás (" -"); Sorozatnyomat (ok); Soros.nyomtatás (" -"); Sorozatnyomat (v); Serial.println ("");

Serial.print ("Tájolás:");

Soros.nyomtatás (elfordulás); Serial.print (""); Soros.nyomat (hangmagasság); Serial.print (""); Soros.println (tekercs); */

// A képpontok színének megváltoztatása

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

// Állapot megjelenítése képpontban

setStatusPixel (állapotLámpa); }}

float convertRawAcceleration (int aRaw) {

// mivel 2G tartományt használunk -2 -2g térképeket nyers értékre -32768 // +2g térképeket 32767 nyers értékre

úszó a = (aRaw * 2,0) / 32768,0;

vissza a; }

float convertRawGyro (int gRaw) {

// mivel 250 fok/másodperc tartományt használunk // -250 térkép -32768 nyers értékre // +250 térkép 32767 nyers értékre

úszó g = (gRaw * 250,0) / 32768,0;

visszatérés g; }

static void eventCallback ()

{// Érintés észlelése minden tengelyen, ha (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Érintse meg az észlelt állapotlámpát:"); Serial.println (statusLamp);

// Állapot megváltoztatása

állapotLámpa ++;

// Kezdeti állapot

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

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); szünet; 1. eset: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); szünet; 2. eset: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); szünet; 3. eset: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); szünet;

}

}

Ajánlott: