Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
Selles projektis valmistate öölampi, kasutades ardruino, Adafruit neo rgb ribasid ja 3D -printerit.
Pange tähele, et see integreeritav on puhtalt minu kooliprojekti jaoks. Selle projekti kood põhineb teisest projektist. Sellega seoses ei ole ma Ardruino osas ekspert.
Samm: nõuded
Selle projekti jaoks vajate järgmist riistvara ja tööriistu
Riistvara:
1 - ardruino101 (USA -s) või Genuino101 (väljaspool USA -d).
2 - NeoPixel rgb led ribad adafruitist (5 volti).
3 - Ardruino USB -pistik (B -tüüpi pistik).
4 - Ardruino tarkvara, Ardruino IDE Selles õpetuses kasutame versiooni 1.8.5. Tarkvararaamatukogu nõuded on järgmised: 101, Adafruit NeoPixel ja Madgwick.
5 -Ja objekt riistvara paigutamiseks. Sel juhul kasutan 3D -printerit. Selle 3D -printimise fail asub kirjeldustes nimega "Lamp Head". Pange tähele, et see failivorming ei ole 3D -printimiseks valmis. Sõltuvalt teie 3D -printeritest peate esmalt 3D -objektil käivitama määratud 3D -printimistarkvara. Mõnikord lähtestatakse 3D -printimise skaala. nii et veenduge, et läbimõõt on seatud 11 cm x 11 cm.
6 - põhiline jootekomplekt.
2. samm: riistvara ja tarkvara mõistmine
Ardruin/Genuino101
Ardruino101 ja genuino101 on nimede kõrval täpselt samad. Mõlemal on samad andmed ja sama tarkvara.
Ardruino101 -l on põhilised spetsifikatsioonid, nagu ardruino UNO ja palju muud. Ardruino101 peamine omadus on kiirendusmõõtur ja güroskoop, mida me oma projektis kasutama hakkame. Ka sellel ardruino tüübil on ainulaadne kooditeek CurrieIMU (sisemised mõõtühikud), mis sisaldub raamatukogu laienduses 101.
Sellega seoses räägime tarkvarast.
Tarkvara ja raamatukogud
Ardruino IDE kasutab peamist lähtekoodi pythonit. see on ka peamine koodvormvorm, kus enamik ardruino jookseb. Internetis on selle tarkvara kasutamise kohta palju õpetusi, nii et kui olete selle programmiga uus, soovitan teil need kõigepealt uurida.
Sellega seoses on meie kasutatavad raamatukogud järgmised:
Valige visandimenüüst> Kaasa raamatukogu> Halda teeke … Sisestage tekstisisestuskasti
- 101 Standardi ardruino 101 ei kuulu ardruino IDE -sse automaatselt. Vajame seda teegilaiendit, et kodeerida oma ardruino tüüpi.
-Adafruit NeoPixel meie Neo piksliribade kodeerimiseks.
-Madgwick Toorandmete lugemiseks ja nende töötlemata, pigi ja rullimiseks arvutamiseks.
Ei RGB ribasid
Tüüp, mida ma kasutan, on 5 või 5 V. Selle 5v abil ei vaja ma ribade juhtimiseks pikemat toiteallikat. Selle asemel kasutan ribade juhtimiseks ja valgustamiseks toiteallikana oma ardruinot.
Siin on mõned näpunäited, mida peate teadma enne, kui alustate nende ribade kasutamist.
Kõigepealt vajate Adafruitist pärit Neodigital RGB LED -ribasid. Seda tüüpi ribasid saab koodide abil kohandada. Järgmisena peate teadma, et sellel ribal on tagakülg ja esikülg. See tagakülg ja esikülg on jootmise jaoks olulised. Jootke kindlasti esikülg, kus nooleklahv on otsast eemale suunatud.
Siin on juhend nende kasutamiseks.
Peate meeles pidama kolme jootmispunkti. Maandusühendus (GND), pingeühendus (V) ja tihvtühendus (DIN).
3. samm: komponentide seadistamine
Esmalt peate 3D -printima komponendi, mille leiate nõuetest. Sel juhul kasutan PLA -d. Veenduge, et üldobjekti läbimõõt on 11 x 11 cm. See tagab, et ardruino ja ribad sobituvad shperega. Pange tähele, et iga 3D -printer kasutab oma printimisprotsessi arvutamiseks erinevaid tarkvara. Sellega seoses võib teie kasutatavat faili skaleerida erinevalt, nii et pidage seda meeles.
Teiseks pärast printimist veenduge, et komponendid suudavad sulgeda. 3D -prindid koos moodustavad kera. Need peaksid kenasti sobima. Kui kompositsioon kaotab, lisage siseküljele teip, nii et kork oleks täidetud. Ja kui see on paks, kasutage liivapaberit.
Kolmandaks on ardruino ja ribade skematichs üsna lihtne. Ribade ühendamiseks ardruinoga kasutate kolme juhtmest. Pange tähele, et ainsad kohad, kus ma jootan, on ribadel. mitte Ardruino enda peal.
GND läheb GND -le
DIN läheb nööpnõelale (meie puhul ardruino pin6)
5V läheb 5V peale
Veenduge, et kasutatavate LED -ribade kogus oleks maksimaalselt 30. Enamgi veel, siis ei õnnestu koodi õigesti täita. Kõiki lõikamata ribasid saate lihtsalt lõigata käärimärgiga.
Neljas kõik peaks ilusti sfääri mahtuma. Teile võiks meeldida, et tegin ristmiku ühe 3D -printimise vahel, et näha küna ja asetada selle kohale küna plastik.
4. samm: kodeerimine
Nii et praeguseks peaksid teil olema oma raamatukogus kõik vajalikud komponendid.
Siin on kood, mida vajate projekti käivitamiseks. Tulemus peaks välja nägema nagu sellel lehel saadetud videolink.
Selle koodi allika leiate siit. See projekt hõlmab ka esmaseid samme, et paremini mõista kasutusalade koodi ja algaritmi.
#kaasamine #kaasamine #kaasamine #kaasamine
#define PIN 6 // 11 pikslit NeoPixel Strip
#define PIN1 7 // 1 piksline NeoPixel Strip #define NUMPIXELS 30 // Pikslite arv #define SAMPLE_RATE 25 // Kiirendusmõõturi ja güroskoobi proovivõtu sagedus
// Madgwicki konfiguratsioon
Madgwicki filter; allkirjastamata pikad microsPerReading, microsPrevious; float accelScale, gyroScale;
// NeoPixeli konfiguratsioon
Adafruit_NeoPixel pikslid = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);
// Värviruumid
RGBConverter rgbConverter; kahekordne h = 1; kahekordne s = 1; kahekordne v = 1; bait rgb [3];
// Staatuse liikumislamp
// Olek 0 -> Vali Hue -Pitch // State 1 -> Select Saturation -Roll // State 2 -> Select Value -Yaw // State 3 -> Fix color volatile int statusLamp = 0;
tühine seadistus () {
Seriaalne algus (9600);
// käivitage IMU ja filtreerige
CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);
// Määra kiirendusmõõturi vahemik 2G
CurieIMU.setAccelerometerRange (2); // Seadke güroskoobi vahemik 250 kraadi sekundis 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.katkestab (CURIE_IMU_TAP);
// initsialiseerida muutujad, et kiirendada värskendusi õigeks kiiruseks
microsPerReading = 1000000 / SAMPLE_RATE; microsPrevious = micros ();
// Init NeoPixel 11
pixels.begin (); pixels.show ();
// Init NeoPixel 1
pixelsStatus.begin (); pixels.show ();
// Näita olekut pikslites
setStatusPixel (olekulamp); }
void loop () {
int aix, aiy, aiz; // kiirendusmõõtur int gix, giy, giz; ujukirves, ay, az; ujuk gx, gy, gz; ujukirull, pigi, nihkumine; staatiline allkirjastamata pikk microsNow;
// kontrollige, kas on aeg andmeid lugeda ja filtrit värskendada
microsNow = micros (); if (microsNow - microsPrevious> = microsPerReading) {
// lugeda CurieIMU lähteandmeid
CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);
// teisendada algandmetest gravitatsiooni ja kraadide/sekundi ühikuteks
ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = teisendadaRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);
// värskendage filtrit, mis arvutab orientatsiooni
filter.updateIMU (gx, gy, gz, ax, ay, az);
// trükkida pealkiri, samm ja rull
rull = filter.getRoll (); samm = filter.getPitch (); yaw = filter.getYaw ();
// juurdekasv eelmisel korral, nii et hoiame õiget tempot
microsPrevious = microsPrevious + microsPerReading;
// Ainult tooni, küllastuse või väärtuse muutmisel
if (statusLamp vali Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// nurkade sammu teisendamine = samm + 90; // hangib värvikoordinaadid nurkadest h = samm / 180,0;}
// Nurkade piirangud
// veerema ainult -90º kuni 90º = 180º // Olek 1 -> valige Küllastus, kui (rull> = -90 && rull <= 90 && statusLamp == 1) {// Teisendusnurga rull = rull + 90; // Saab nurga alt värvikoordinaadid s = rull / 180.0; }
// Osariik 2 -> valige väärtus
if (olekulamp == 2) {// kaldumine 0º kuni 360º v = pöördumine / 360,0; }
// Teisenda rgb -ks
rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Värv:"); Seeriatrükk (h); Serial.print (" -"); Seeria.print (id); Serial.print (" -"); Serial.print (v); Serial.println ("");
Serial.print ("Orientation:");
Serial.print (yaw); Serial.print (""); Jadajälg (samm); Serial.print (""); Serial.println (rull); */
// Pikslite värvi muutmine
for (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2]))); pixels.show (); }}
// Näita olekut pikslites
setStatusPixel (olekulamp); }}
float convertRawAcceleration (int aRaw) {
// kuna kasutame 2G vahemikku // -2g kaarte toorväärtusele -32768 // +2g kaarte toorväärtusele 32767
ujuk a = (aRaw * 2,0) / 32768,0;
tagasta a; }
float convertRawGyro (int gRaw) {
// kuna me kasutame vahemikku 250 kraadi/sekundit // -250 kaarti toorväärtusele -32768 // +250 kaarti toorväärtusele 32767
ujuk g = (gRaw * 250,0) / 32768,0;
tagasitulek g; }
staatiline tühine sündmusCallback ()
{// Tuvasta puudutus kõikidel telgedel, kui (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Puudutage tuvastatud olekulampi:"); Serial.println (statusLamp);
// Muuda olekut
statusLamp ++;
// Algseisund
if (olekulamp> 3) {olekulamp = 0; }}}
void setStatusPixel (int statusPx)
{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); murda; juhtum 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); murda; juhtum 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); murda; juhtum 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); murda;
}
}