Sadržaj:
- Korak 1: Zahtjevi
- Korak 2: Razumijevanje hardvera i softvera
- Korak 3: Postavljanje komponenti
- Korak 4: Kodiranje
Video: Promjena boje noćnog svjetla pomoću Ardruina 101: 4 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
U ovom ćete projektu izrađivati noćnu svjetiljku koristeći ardruino, Adafruit neo rgb trake i 3D pisač.
Imajte na umu da je ovo uljez čisto za moj školski projekt. Kôd za ovaj projekt temelji se na drugom projektu. S tim da nisam stručnjak što se tiče Ardruina.
Korak 1: Zahtjevi
Za ovaj projekt trebat će vam sljedeći hardver i alati
Hardver:
1 - Ardruino101 (u SAD -u) ili Genuino101 (za izvan SAD -a).
2 - NeoPixel rgb LED trake od adafruit -a (5 volti).
3 - Ardruino USB priključak (konektor tipa B do A).
4 - Softver iz Ardruina, Ardruino IDE U ovom vodiču koristit ćemo verziju 1.8.5. Zahtjevi za biblioteku softvera su: 101, Adafruit NeoPixel i Madgwick.
5 -I objekt za smještaj vašeg hardvera. U ovom slučaju koristit ću 3D pisač. Datoteka za ovaj 3D ispis nalazi se u opisima pod nazivom "Lamp Head". Imajte na umu da ovaj format datoteke nije spreman za 3D ispis. Ovisno o vašim 3D pisačima, najprije morate prethodno pokrenuti određeni softver za 3D ispis na 3D objektu. Ponekad će se skala 3D ispisa poništiti. pa provjerite je li promjer postavljen na 11 cm na 11 cm.
6 - Osnovni komplet za lemljenje.
Korak 2: Razumijevanje hardvera i softvera
Ardruin/Genuino101
Samo da pojasnimo Ardruino101 i genuino101 su potpuno isti uz imena. Obje imaju iste specifikacije i koriste isti softver.
Ardruino101 posjeduje osnovne specifikacije poput ardruino UNO i više. Glavna značajka ardruino101 je akcelerometar i žiroskop koje ćemo koristiti u svom projektu. Također ova vrsta ardruina ima svoju jedinstvenu biblioteku kodova pod nazivom CurrieIMU (Interne mjerne jedinice) koja je uključena u bibliotečko proširenje 101.
Uz to, razgovarajmo o softveru.
Softver i knjižnice
Ardruino IDE koristi python kao glavni izvorni kod. to je ujedno i glavna platforma za šifriranje većine ardruina. Na internetu postoji mnogo uputstava o korištenju ovog softvera pa vam preporučujem da prvo istražite ako ste tek započeli s ovim programom.
Uz to, knjižnice koje koristimo su sljedeće:
Na izborniku Sketch> Include Library> Manage Libraries … U okvir za unos teksta upišite
- 101 Standardno, ardruino 101 nije automatski uključen u ardruino IDE. Ovo nam je proširenje knjižnice potrebno za kodiranje našeg tipa ardruino.
-Adafruit NeoPixel za kodiranje naših Neo piksela.
-Madgwick Kako biste pročitali neobrađene podatke i izračunali te podatke u sirovo, pitch and roll.
Neo RGB trake
Tip koji ću koristiti je naponski ili 5v. S ovim 5V ne treba mi prošireni izvor napajanja za kontrolu mojih traka. Umjesto toga, ja ću koristiti svoj ardruino kao izvor napajanja za kontrolu i osvjetljavanje traka.
Evo nekoliko savjeta koje morate znati prije nego počnete s ovim trakama.
Prvo će vam trebati Neodigital RGB LED trake od adafruta. Ova vrsta traka može se kontrolirati pomoću kodova. Sljedeće što trebate znati je da se na ovim trakama nalaze stražnja i prednja strana. Ova stražnja i prednja strana važna su za lemljenje. Pazite da lemite prednju stranu gdje je tipka sa strelicom okrenuta od vrha.
Evo vodiča kako ih koristiti.
Postoje tri točke lemljenja koje morate imati na umu Uzemljenje (GND), Napon (V) i Pin (DIN).
Korak 3: Postavljanje komponenti
Prvo ćete morati 3D ispisati komponentu koju možete pronaći u zahtjevima. U ovom slučaju koristit ću PLA. Pobrinite se da promjer općeg predmeta bude 11 x 11 cm. To će osigurati da ardruino i trake stanu u špeku. Imajte na umu da svaki 3D pisač koristi različite softvere za izračun procesa ispisa. S obzirom na to da bi se datoteka koju koristite mogla različito skalirati pa to imajte na umu.
Drugo nakon ispisa, provjerite mogu li se komponente zatvoriti. 3D ispisi zajedno čine sferu. Trebali bi se lijepo uklopiti. Ako želite izgubiti komponentu, nalijepite traku na unutarnju stranu tako da je kapa ispunjena. A ako je riječ o debelom, upotrijebite brusni papir.
Treće, skematići za ardruino i trake su prilično laki. Za spajanje traka na ardruino upotrijebit ćete 3 žice. Imajte na umu da jedino mjesto gdje lemim je na trakama. ne na samom Ardruinu.
GND ide u GND
DIN ide na pin (u našem slučaju pin6 na ardruinu)
5V ide na 5V
Provjerite je li količina LED traka koju koristite ograničena na 30. Više od toga i neće uspjeti pravilno izvršiti kôd. Možete jednostavno izrezati sve nepotrebne trake prikazane znakom škara.
Četvrto bi se sve trebalo lijepo uklopiti u sferu. Moglo bi vam se svidjeti da sam napravio raskrižje između 1 3D ispisa kako bih vidio korita i na vrh postavio plastično korito.
Korak 4: Kodiranje
Dakle, do sada biste trebali imati sve potrebne komponente u svojoj knjižnici.
Evo koda koji će vam trebati za pokretanje projekta. Rezultat bi trebao izgledati kao video veza koju šaljem na ovoj stranici.
Izvor ovog koda možete pronaći ovdje. Ovaj projekt također uključuje i manje važne korake za bolje razumijevanje koda i algarita iza upotreba.
#include #include #include #include
#define PIN 6 // NeoPixel Strip od 11 piksela
#define PIN1 7 // NeoPixel Strip od 1 piksela #define NUMPIXELS 30 // Broj piksela #define SAMPLE_RATE 25 // Brzina uzorkovanja za akcelerometar i žiroskop
// Madgwickova konfiguracija
Madgwick filter; nepotpisano dugo microsPerReading, microsPrevious; float accelScale, gyroScale;
// NeoPixel konfiguracija
Adafruit_NeoPixel pikseli = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);
// Prostori boja
RGBConverter rgbConverter; dvostruki h = 1; dvostruki s = 1; dvostruki v = 1; bajt rgb [3];
// Status Motion Lamp
// Stanje 0 -> Odabir nijanse -Pitch // Stanje 1 -> Odabir zasićenja -Roll // Stanje 2 -> Odabir vrijednosti -Jaw // Stanje 3 -> Ispravljanje promjenjive boje int statusLamp = 0;
void setup () {
Serial.begin (9600);
// pokretanje IMU -a i filtriranje
CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);
// Podesite raspon akcelerometra na 2G
CurieIMU.setAccelerometerRange (2); // Postavite raspon žiroskopa na 250 stupnjeva/sekundu 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.prekida (CURIE_IMU_TAP);
// inicijalizirati varijable za usklađivanje ažuriranja radi ispravne stope
microsPerReading = 1000000 / SAMPLE_RATE; microsPrevious = micros ();
// Init NeoPixel 11
pikseli.begin (); pikseli.show ();
// Pokreni NeoPixel 1
pixelsStatus.begin (); pikseli.show ();
// Prikaži status u px
setStatusPixel (statusna svjetiljka); }
void loop () {{100} {101}
int aix, aiy, aiz; // akcelerometar int gix, giy, giz; plovak sjekira, ay, az; float gx, gy, gz; float roll, pitch, yaw; statički nepotpisani dugi microsNow;
// provjeravamo je li vrijeme za čitanje podataka i ažuriranje filtra
microsNow = micros (); if (microsNow - microsPrevious> = microsPerReading) {
// čita neobrađene podatke iz CurieIMU -a
CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);
// pretvaranje iz sirovih podataka u gravitaciju i stupnjeve/sekundu
ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);
// ažuriranje filtra koji izračunava orijentaciju
filter.updateIMU (gx, gy, gz, ax, ay, az);
// ispis naslova, pitch and roll
roll = filter.getRoll (); pitch = filter.getPitch (); yaw = filter.getYaw ();
// povećavamo prethodni put, pa držimo pravilan tempo
microsPrevious = microsPrevious + microsPerReading;
// Samo ako promijenite Hue, Saturation ili Value
if (statusLamp odaberite Hue ako (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Pretvorite pitch angle = pitch + 90; // Dobiva kordinate boje iz kutova h = pitch / 180.0;}
// Ograničenja kutova
// samo kotrljajte -90º do 90º = 180º // Stanje 1 -> odaberite zasićenje ako (rola>> -90 && roll <= 90 && statusLamp == 1) {// Pretvorite kutni kotrljaj = roll + 90; // Dobiva kordinate boje iz kutova s = roll / 180,0; }
// Stanje 2 -> odaberite vrijednost
if (statusLamp == 2) {// zakretanje 0º do 360º v = zavijanje / 360,0; }
// Pretvori u rgb
rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Boja:"); Serijski.tisak (h); Serial.print (" -"); Serijski.ispis (i); Serial.print (" -"); Serijski.ispis (v); Serial.println ("");
Serial.print ("Orijentacija:");
Serijski.tisak (zakrivljenje); Serial.print (""); Serijski.ispis (visina); Serial.print (""); Serial.println (rola); */
// Promjena boje piksela
for (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pikseli. Boja (rgb [0], rgb [1], rgb [2])); pikseli.show (); }}
// Prikaži status u px
setStatusPixel (statusna svjetiljka); }}
float convertRawAcceleration (int aRaw) {
// budući da koristimo 2G raspon // -2g karte do sirove vrijednosti -32768 // +2g karte do sirove vrijednosti 32767
float a = (aRaw * 2.0) / 32768.0;
vratiti a; }
float convertRawGyro (int gRaw) {
// budući da koristimo raspon od 250 stupnjeva/sekundi // -250 karata do neobrađene vrijednosti -32768 // +250 karata do sirove vrijednosti od 32767
plovak g = (gRaw * 250,0) / 32768,0;
povrat g; }
static void eventCallback ()
{// Otkrivanje dodira na svim osama if (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Dodirnite otkriveno statusno svjetlo:"); Serial.println (statusLamp);
// Promjena stanja
statusLamp ++;
// Init stanje
if (statusLamp> 3) {statusLamp = 0; }}}
void setStatusPixel (int statusPx)
{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); pauza; slučaj 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); pauza; slučaj 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); pauza; slučaj 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); pauza;
}
}
Preporučeni:
Popravljanje i poboljšanje noćnog svjetla: 5 koraka (sa slikama)
Popravljanje i poboljšanje noćnog svjetla: Bok svima, Danas na klupi za ozdravljenje imamo ovu malu noćnu svjetiljku koja pripada mojoj kćeri. Više ne radi pa ćemo ga pokušati popraviti i također poboljšati jer ima užasno treperenje. Ovaj popravak bavi se mrežnim naponom. Ako se pogrešno postupi
Kako napraviti jednostavan automatski sklop noćnog svjetla pomoću LDR -a: 4 koraka
Kako napraviti jednostavan automatski sklop noćnog svjetla pomoću LDR -a: Zdravo, đavoli, danas ću vam pokazati kako napraviti jednostavan automatski sklop noćnog svjetla pomoću LDR -a (otpornika ovisno o svjetlu) i MOSFET -a, stoga slijedite u sljedećim koracima. pronaći automatsku shemu noćnog svjetla, kao i t
Izrada LED noćnog svjetla sa uzorkom zvijezde: 8 koraka (sa slikama)
Izrada LED noćnog svjetla W/ Star Pattern: Ovo LED noćno svjetlo ima zvjezdasti uzorak i osvjetljava tamnu sobu na čaroban način. Koristio sam ipe za drvo, no bilo koje tamno drvo ili, na primjer, obojeni MDF dobro bi radili. Ovo je zaista zabavan projekt i bio bi izvrstan kao naglašeno svjetlo
Promjena miša u tri boje: 5 koraka
Preinaka miša u tri boje: Zamijenite dosadnu crvenu LED lampicu u mišu s trobojnom bljeskajućom LED diodom u boji. Napomena: ova zamjena je za LED koji se koristi za osvjetljavanje kraja miša, na optičkom mišu druga LED u sredini koju smo koristili za praćenje, nemojte zamjenjivati
RGB LED jeftino i jednostavno mijenjanje boje noćnog svjetla: 3 koraka
RGB LED jeftino i jednostavno mijenjanje boje noćnog svjetla: Ovaj projekt je bio prilično jednostavan nakon što sam se poigrao i shvatio, što je potrajalo. Ideja je da se boja može promijeniti prekidačem i led opcije & zatamnjivanja također. Ovo su stavke koje ćete morati c