Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Tässä projektissa aiot tehdä yölampun käyttämällä ardruinoa, Adafruit neo rgb -liuskoja ja 3D -tulostinta.
Huomaa, että tämä käsittämätön on tarkoitettu vain kouluprojektilleni. Tämän projektin koodi perustuu toiseen projektiin. Näin ollen en ole asiantuntija Ardruinon suhteen.
Vaihe 1: Vaatimukset
Tätä projektia varten tarvitset seuraavat laitteistot ja työkalut
Laitteisto:
1 - Ardruino101 (Yhdysvalloissa) tai Genuino101 (Yhdysvaltojen ulkopuolella).
2 - NeoPixel rgb led -nauhat adafruitista (5 volttia).
3 - A ardruino -usb -liitin (tyyppi B - A -liitin).
4 - Ohjelmisto Ardruinosta, Ardruino IDE Tässä opetusohjelmassa aiomme käyttää versiota 1.8.5. Ohjelmistokirjaston vaatimukset ovat: 101, Adafruit NeoPixel ja Madgwick.
5 -Ja esine laitteistosi tallentamiseen. Tässä tapauksessa käytän 3D -tulostinta. Tämän 3D -tulostuksen tiedosto sijaitsee kuvauksissa nimeltä "Lampun pää". Huomaa, että tämä tiedostomuoto ei ole 3D -tulostusvalmis. 3D -tulostimistasi riippuen sinun on ensin suoritettava 3D -objektille tarkoitettu 3D -tulostusohjelmisto etukäteen. Joskus 3D -tulosteen asteikko nollautuu. joten varmista, että halkaisijaksi on asetettu 11 cm x 11 cm.
6 - Perusjuotosarja.
Vaihe 2: Laitteiston ja ohjelmiston ymmärtäminen
Ardruin/Genuino101
Selvennykseksi Ardruino101 ja genuino101 ovat nimenomaan samoja nimien vieressä. Molemmilla on samat tekniset tiedot ja sama ohjelmisto.
Ardruino101: llä on perustiedot, kuten ardruino UNO ja paljon muuta. Ardruino101: n tärkein ominaisuus on kiihtyvyysmittari ja gyroskooppi, joita aiomme käyttää projektissamme. Myös tämän tyyppisillä ardruinoilla on ainutlaatuinen koodikirjasto nimeltä CurrieIMU (sisäiset mittausyksiköt), joka sisältyy kirjastolaajennukseen 101.
Sanotaan, että puhutaan ohjelmistosta.
Ohjelmistot ja kirjastot
Ardruino IDE käyttää pythonia pääasiallisena lähdekoodina. se on myös tärkein koodi platvorm, jossa suurin osa ardruinoista juoksee. Verkossa on paljon opetusohjelmia tämän ohjelmiston käytöstä, joten suosittelen tutustumaan niihin ensin, jos olet uusi tässä ohjelmassa.
Näin ollen käyttämämme kirjastot ovat seuraavat:
Valitse Luonnos -valikosta> Sisällytä kirjasto> Hallitse kirjastoja… Kirjoita tekstinsyöttökenttään
- 101 Standardissa ardruino 101 ei sisälly automaattisesti ardruino IDE -laitteeseen. Tarvitsemme tätä kirjastolaajennusta ardruino -tyypin koodaamiseen.
-Adafruit NeoPixel Neo -pikselinauhojen koodaamiseen.
-Madgwick Raakadatan lukemiseksi ja näiden tietojen laskemiseksi raaka-, piki- ja rulla -arvoiksi.
Ei RGB -nauhoja
Tyyppi I, jota käytän, on 5 tai 5 voltin tyyppi. Tämän 5v: n avulla en tarvitse laajennettua virtalähdettä nauhojen ohjaamiseen. Sen sijaan aion käyttää ardruinoani virtalähteenä nauhojen ohjaamiseen ja sytyttämiseen.
Tässä on muutamia vinkkejä, jotka sinun on tiedettävä, ennen kuin aloitat tämän nauhan käytön.
Ensin tarvitset Neodigital RGB -led -nauhat adafruitista. Tällaiset nauhat ovat koodattavissa koodien avulla. Seuraavaksi sinun on tiedettävä, että nauhoissa on taka- ja etupuoli. Tämä selkä ja etupuoli ovat tärkeitä juottamisen kannalta. Varmista, että juotat etupuolen, jossa nuolinäppäin osoittaa poispäin kärjestä.
Tässä on opas niiden käyttämiseen.
Sinun on pidettävä mielessä kolme juotoskohtaa Maadoitusliitäntä (GND), jänniteliitäntä (V) ja nastaliitäntä (DIN).
Vaihe 3: Komponenttien asentaminen
Ensin sinun on tulostettava 3D -komponentti, joka löytyy vaatimuksista. Tässä tapauksessa käytän PLA: ta. Varmista, että koko esineen halkaisija on 11 cm x 11 cm. Tämä varmistaa, että ardruino ja nauhat sopivat shpereen. Huomaa, että jokainen 3D -tulostin käyttää eri ohjelmistoja tulostusprosessinsa laskemiseen. Näin ollen käyttämäsi tiedosto voidaan skaalata eri tavalla, joten pidä se mielessä.
Varmista tulostamisen jälkeen, että osat voivat sulkeutua. 3D -tulosteet muodostavat yhdessä pallon. Niiden pitäisi sopia nätisti. Jos paketti häviää, kiinnitä teippi sisäpuolelle, jotta korkki täyttyy. Ja jos se on paksu, käytä hiekkapaperia.
Kolmanneksi ardruinon ja nauhojen skematichit ovat melko helppoja. Käytät kolmea johtoa liittämään nauhat ardruinoon. Huomaa, että juottamisen ainoat paikat ovat nauhoissa. ei itse Ardruinossa.
GND menee GND: lle
DIN menee nastaan (tässä tapauksessa pin6 ardruinoon)
5V menee 5V
Varmista, että käyttämiesi led -nauhojen määrä on yläraja 30. Tämän jälkeen koodi ei toimi oikein. Voit yksinkertaisesti leikata leikkaamattomat nauhat pois saksimerkillä.
Neljännen kaiken pitäisi sopia hienosti palloon. Saatat pitää siitä, että tein risteyksen yhden 3D -tulosteen välillä nähdäkseni aallonpohjan ja laittaaksesi läpinäkyvän muovin päälle.
Vaihe 4: Koodaus
Joten sinulla pitäisi olla nyt kaikki tarvittavat komponentit kirjastossasi.
Tässä on koodi, jota tarvitset projektin suorittamiseen. Tuloksen pitäisi näyttää videolinkiltä, jonka lähetän tällä sivulla.
Koodin lähde löytyy täältä. Tämä projekti sisältää myös vähäiset vaiheet, joiden tarkoituksena on ymmärtää paremmin käyttökoodin koodi ja algaritme.
#Sisällytä #Sisällytä #Sisällytä #Sisällytä
#define PIN 6 // 11 pikseliä NeoPixel Strip
#define PIN1 7 // 1 pikselin NeoPixel Strip #define NUMPIXELS 30 // Pikselien lukumäärä #define SAMPLE_RATE 25 // Näytteenottotaajuus kiihtyvyysanturille ja gyroskoopille
// Madgwickin kokoonpano
Madgwickin suodatin; allekirjoittamaton pitkä microsPerReading, microsPrevious; float accelScale, gyroScale;
// NeoPixel -kokoonpano
Adafruit_NeoPixel pikselit = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);
// Väritilat
RGBConverter rgbConverter; kaksinkertainen h = 1; kaksinkertainen s = 1; kaksinkertainen v = 1; tavu rgb [3];
// Status Motion Lamp
// Tila 0 -> Valitse sävy -Pitch // Tila 1 -> Valitse kylläisyys -rulla // Tila 2 -> Valitse arvo -kääntyminen // Tila 3 -> Korjaa väri haihtuva int statusLamp = 0;
void setup () {
Sarja.alku (9600);
// käynnistä IMU ja suodatin
CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);
// Aseta kiihtyvyysanturin alue 2G: ksi
CurieIMU.setAccelerometerRange (2); // Aseta gyroskoopin alue 250 asteeseen sekunnissa 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.katkokset (CURIE_IMU_TAP);
// alustetaan muuttujat nopeuttaakseen päivityksiä oikeaan nopeuteen
microsPerReading = 1000000 / SAMPLE_RATE; microsEdellinen = micros ();
// Init NeoPixel 11
pixels.begin (); pixels.show ();
// Init NeoPixel 1
pixelsStatus.begin (); pixels.show ();
// Näytä tila kuvapisteinä
setStatusPixel (statusLamp); }
void loop () {
int aix, aiy, aiz; // kiihtyvyysmittari int gix, giy, giz; kelluva kirves, ay, az; kellua gx, gy, gz; kelluva rulla, piki, kääntö; staattinen allekirjoittamaton pitkä microsNow;
// tarkista, onko aika lukea tiedot ja päivittää suodatin
microsNow = micros (); if (microsNow - microsPrevious> = microsPerReading) {
// lukea raakadataa CurieIMU: sta
CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);
// muuntaa raakadatasta painovoimaksi ja asteiksi/sekunnin yksiköiksi
ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);
// päivitä suodatin, joka laskee suunnan
filter.updateIMU (gx, gy, gz, ax, ay, az);
// tulosta otsikko, sävelkorkeus ja rulla
roll = filter.getRoll (); piki = suodatin.getPitch (); yaw = filter.getYaw ();
// lisäys edellisen kerran, joten pidämme oikeaa vauhtia
microsPrevious = microsPrevious + microsPerReading;
// Vain jos muutat värisävyä, kylläisyyttä tai arvoa
if (statusLamp valitse sävy if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transform kulmakulma = pitch + 90; // hakee värikoordinaatit kulmista h = pitch / 180.0;}
// Kulmien rajoitukset
// rullaa vain -90º -90º = 180º // Tila 1 -> valitse Kylläisyys, jos (rulla> = -90 && rulla <= 90 && statusLamp == 1) {// Muunnoskulma rulla = rulla + 90; // Hakee värikoordinaatit kulmista s = rulla / 180.0; }
// Tila 2 -> valitse Arvo
if (statusLamp == 2) {// kääntyminen 0º - 360º v = kääntyminen / 360,0; }
// Muunna rgb: ksi
rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Väri:"); Sarjanjälki (h); Serial.print (" -"); Sarjanjälki (s); Serial.print (" -"); Sarjanjälki (v); Serial.println ("");
Serial.print ("Suunta:");
Sarjajälki (kääntö); Serial.print (""); Sarjajälki (piki); Serial.print (""); Sarja.println (rulla); */
// Muuta pikselien väriä
for (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2]))); pixels.show (); }}
// Näytä tila kuvapisteinä
setStatusPixel (statusLamp); }}
float convertRawAcceleration (int aRaw) {
// koska käytämme 2G -aluetta // -2g karttoja raaka -arvoon -32768 // +2g karttoja raaka -arvoon 32767
float a = (aRaw * 2,0) / 32768,0;
palauta a; }
float convertRawGyro (int gRaw) {
// koska käytämme 250 asteen/sekunnin aluetta // -250 karttaa raaka -arvoon -32768 // +250 karttaa raaka -arvoon 32767
float g = (gRaw * 250,0) / 32768,0;
paluu g; }
staattinen void eventCallback ()
{// Tunnista napautus kaikilla akseleilla, jos (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Napauta havaittu statusLamp:"); Serial.println (statusLamp);
// Muuta tilaa
statusLamp ++;
// Alkutila
if (statusLamp> 3) {statusLamp = 0; }}}
void setStatusPixel (int statusPx)
{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); tauko; tapaus 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); tauko; tapaus 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); tauko; tapaus 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); tauko;
}
}