Sisällysluettelo:
- Vaihe 1: Tarvittava materiaali
- Vaihe 2: Piirikaavio
- Vaihe 3: Arduino -koodi
- Vaihe 4: 3d -lampun pohjan tulostaminen
- Vaihe 5: LED -lisälaite
- Vaihe 6: Lampun kotelo
- Vaihe 7: Asennus
Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
Tämä projekti on tehty kurssille Technology for Concept Design TUDelftissä
Lopputuote on ESP-32-pohjainen LED-lamppu, joka on kytketty palvelimeen. Prototyyppiä varten lampulla on kaksi toimintoa; sateenkaaritehoste, joka lähettää rauhoittavaa värinsiirtoa kohti ympäristöään ja toiseksi äänen visualisoija, jossa LED -pikselit "tanssivat" äänitason mukaan. Järjestelmä on yhdistetty wifi -verkkoon ja käyttäjä voi valita lampusta haluamansa tehon WIFI -yhteyden kautta.
Halpa ESP-32-mikrosiru tarjoaa meille tehokkaita suorittimia, sisäänrakennetun hallitunnistimen, lämpötila-anturin, kosketusanturin sekä wifi- ja bluetooth-ominaisuuden. Vaikka tähän projektiin valittiin vain kaksi tehostetta, tämän”älykkään” lampun vaikutus on rajaton. Sitä käytetään ilmoittamaan käyttäjälle säästä tai huoneen lämpötilasta, lamppu itsessään voi toimia hälytyksen laukaisimena tai se voi antaa rauhoittavan auringonvalon sängyn vieressä simuloimalla auringonnousua mukavan herätyskokemuksen saavuttamiseksi.
Vaihe 1: Tarvittava materiaali
Arduino esp32
Äänianturi
Nelisuuntainen kaksisuuntainen logiikan tasomuunnin
Neopixel led 2m 60 led/m
Hyppyjohdot
Micro -USB -kaapeli sovittimella
Internet-yhteys
Vaihe 2: Piirikaavio
Piirustuskaavio piirrettiin ja piiri tehtiin sen mukaisesti, kuten on annettu
alla oleva kaavio.
Vaihe 3: Arduino -koodi
Tässä tehtiin ensin visualisointikoodi. Sitten kaksi esimerkkikoodia
; "Neoplxel RGBW starndtest"; ja "simpleWebServerWifi" muutettiin ja integroitiin visualisointikoodiin. Vaikka koodi on edelleen ajoittain viallinen (satunnaisen ledin valo syttyy ajoittain). Seuraava koodin iterointi (kun saamme tarpeeksi aikaa) päivitetään.
#sisältää
#ifdef _AVR_
#sisältää
#loppu Jos
const int numReadings = 5;
int lukemat [numReadings];
int readIndex = 0;
int yhteensä = 0;
int keskiarvo = 0;
int micPin = 33;
#määritä PIN 4
#määrittele NUM_LEDS 120
#määrittele KIRKKAUS 100
Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);
tavu neopix_gamma = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101, 102, 104, 105, 107, 109, 110, 112, 114, 115, 117, 119, 120, 122, 124, 126, 127, 129, 131, 133, 135, 137, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 167, 169, 171, 173, 175, 177, 180, 182, 184, 186, 189, 191, 193, 196, 198, 200, 203, 205, 208, 210, 213, 215, 218, 220, 223, 225, 228, 231, 233, 236, 239, 241, 244, 247, 249, 252, 255 };
#sisältää
#sisältää
char ssid = "oma verkko"; // verkkosi SSID (nimi)
char pass = "secretPassword"; // verkkosi salasana
int keyIndex = 0; // verkkoavaimesi Indeksinumero (tarvitaan vain WEP: lle)
int -tila = WL_IDLE_STATUS;
WiFi -palvelinpalvelin (80);
mitätön asennus ()
{
Sarja.alku (9600); // sarjaliikenteen alustaminen
pinMode (9, LÄHTÖ); // aseta LED -nastatila
// tarkista kilven läsnäolo:
jos (WiFi.status () == WL_NO_SHIELD) {
Serial.println ("WiFi -suojaa ei ole");
kun taas (totta); // älä jatka
}
Merkkijono fv = WiFi.firmwareVersion ();
jos (fv! = "1.1.0") {
Serial.println ("Päivitä laiteohjelmisto");
}
// yritä muodostaa yhteys Wifi -verkkoon:
while (tila! = WL_CONNECTED) {
Serial.print ("Yritetään muodostaa yhteys verkkoon nimeltä:");
Sarja.println (ssid); // tulosta verkon nimi (SSID);
// Yhdistä WPA/WPA2 -verkkoon. Vaihda tämä rivi, jos käytät avointa tai WEP -verkkoa:
tila = WiFi.begin (ssid, pass);
// odota 10 sekuntia yhteyden muodostamiseen:
viive (10000);
}
server.begin (); // käynnistä verkkopalvelin portista 80
printWifiStatus (); // olet nyt yhteydessä, joten tulosta tila
}
{
Sarja.alku (9600);
strip.setBrightness (KIRKKAUS);
strip.begin ();
strip.show (); // Alusta kaikki pikselit pois päältä
pinMode (micPin, INPUT);
for (int thisReading = 0; thisReading <numReadings; thisReading ++) {
lukemat [thisReading] = 0;
}
}
mitätön sateenkaari (uint8_t wait) {
uint16_t i, j;
(j = 0; j <256; j ++) {
varten (i = 0; i
strip.setPixelColor (i, Pyörä ((i+j) & 255));
}
strip.show ();
viive (odota);
}
}
void visualizer () {
yhteensä = yhteensä - lukemat [readIndex];
lukemat [readIndex] = analoginen lukema (micPin);
yhteensä = yhteensä + lukemat [readIndex];
readIndex = lukuindeksi + 1;
if (readIndex> = numReadings) {
lukuindeksi = 0;
}
keskiarvo = yhteensä / lukemattomat lukemat;
viive (1);
int mikpikseli = (keskiarvo-100)/5;
Serial.println (mikropikseli);
jos (mikropikseli> 0) {
{
(int j = 0; j <= mikropikseli; j ++)
strip.setPixelColor (j, (mikropikseli*2), 0, (90 mikropikseliä), 0);
(int j = mikropikseli; j <= NUM_LEDS; j ++)
strip.setPixelColor (j, 0, 0, 0, 0);
strip.show ();
}
}
jos (mikropikseli <0) {
(int j = 0; j <= 20; j ++)
strip.setPixelColor (j, 0, 0, 50, 0);
strip.show ();
}
}
void loop () {
{
WiFiClient -asiakas = server.available (); // kuuntele saapuvia asiakkaita
if (client) {// jos saat asiakkaan, Serial.println ("uusi asiakas"); // tulosta viesti sarjaportista
Merkkijono currentLine = ""; // tee merkkijono pitääksesi asiakkaan saapuvat tiedot
while (client.connected ()) {// silmukka, kun asiakas on yhteydessä
if (client.available ()) {// jos tavulta on luettavissa tavua, char c = asiakas.luku (); // lue sitten tavu
Serial.write (c); // tulosta se sarjamonitorista
if (c == '\ n') {// jos tavu on uuden rivin merkki
// jos nykyinen rivi on tyhjä, sinulla on kaksi uuden rivin merkkiä peräkkäin.
// se on asiakkaan HTTP -pyynnön loppu, joten lähetä vastaus:
jos (currentLine.length () == 0) {
// HTTP -otsikot alkavat aina vastauskoodilla (esim. HTTP/1.1 200 OK)
// ja sisältötyyppi, jotta asiakas tietää mitä on tulossa, sitten tyhjä rivi:
client.println ("HTTP/1.1 200 OK");
client.println ("Sisältötyyppi: teksti/html");
client.println ();
// HTTP -vastauksen sisältö seuraa otsikkoa:
client.print ("Napsauta tätä Ota Rainbow -tehoste käyttöön");
client.print ("Napsauta tätä Käynnistä visualisoija");
// HTTP -vastaus päättyy toiseen tyhjään riviin:
client.println ();
// murtautua while -silmukasta:
tauko;
} else {// jos sinulla on uusi rivi, poista currentLine:
currentLine = "";
}
} else if (c! = '\ r') {// jos sinulla on muuta kuin vaunun palautusmerkki, currentLine += c; // lisää se nykyisen rivin loppuun
}
// Tarkista, onko asiakaspyyntö "GET /H" tai "GET /L":
if (currentLine.endsWith ("GET /R")) {
Sateenkaari (10); // Sateenkaaritehoste käytössä
}
if (currentLine.endsWith ("GET /V")) {
Visualisoija (); // Visualizer on päällä
}
}
}
// sulje yhteys:
client.stop ();
Serial.println ("asiakas katkaistu");
}
}
void printWifiStatus () {
// tulosta sen verkon SSID, johon olet liitetty:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// tulosta WiFi -kilven IP -osoite:
IPAdd ip = WiFi.localIP ();
Serial.print ("IP -osoite:");
Sarja.println (ip);
// tulostaa vastaanotetun signaalin voimakkuuden:
pitkä rssi = WiFi. RSSI ();
Serial.print ("signaalin voimakkuus (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
// tulosta minne mennä selaimessa:
Serial.print ( Jos haluat nähdä tämän sivun toiminnassa, avaa selain osoitteeseen
Sarja.println (ip);
}
}
uint32_t Wheel (tavu WheelPos) {
WheelPos = 255 - WheelPos;
jos (WheelPos <85) {
palautusliuska. Väri (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
jos (WheelPos <170) {
WheelPos -= 85;
palautusliuska. Väri (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WheelPos -= 170;
palautusliuska. Väri (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t punainen (uint32_t c) {
paluu (c >> 16);
}
uint8_t vihreä (uint32_t c) {
paluu (c >> 8);
}
uint8_t sininen (uint32_t c) {
palautus (c);
}
}
//Sarja.println (mikropikseli);
}
Vaihe 4: 3d -lampun pohjan tulostaminen
Lampun pohjan kolmiulotteinen malli mitattiin, suunniteltiin ja painettiin riittävän suurilla mitoilla, jotta se mahtuu kaikkiin sähköosiin pohjaosan sisällä.
Vaihe 5: LED -lisälaite
Ledit käärittiin pahvirullaan ja kiinnitettiin kaksipuolisella teipillä, alaosaan porattiin reikä langan johtamiseksi
Vaihe 6: Lampun kotelo
Kotelo tehtiin etsimällä läpinäkyvä pullo, jonka leveys oli samanlainen kuin lampun kanta ja korkeus kuin LED -kiinnike. Tämä peitettiin sitten paksulla paperilla paremman valon leviämisen vuoksi. Vaihtoehtoisesti lampun kotelona on mahdollista käyttää himmeää lasia tai läpikuultavia muoviputkia.
Vaihe 7: Asennus
Kaikki liimattiin yhteen ja koottiin. Ja lamppu oli valmis testaukseen !.
Suositeltava:
Tobias - Arduino Music Box TVoutoutilla: 5 vaihetta (kuvilla)
Tobias - Arduino Music Box TVoutoutilla: Ensinnäkin haluan esitellä Tobiasin, tyttöystäväni jättimäisen nallekarhun, joka on tämän projektin inspiraatio. kun hän on poissa töistä
LightBox Music Visualizer: 5 vaihetta (kuvilla)
LightBox Music Visualizer: LightBox käyttää puhelimen tai tabletin sisäänrakennettua mikrofonia musiikin analysointiin ja luo musiikkia vastaavia kauniita valokuvioita. Käynnistä vain sovellus, aseta puhelin tai tabletti jonnekin äänilähteen lähelle, ja laatikko visualisoi
Laser Box Music Laser Light Show: 18 vaihetta (kuvilla)
Laser Box Music Laser Light Show: Julkaisin aikaisemmin Instructable -ohjelman, jossa kerrottiin, kuinka tietokoneen kiintolevyjä käytetään musiikkilaservalon esityksen tekemiseen. Päätin tehdä kompaktin version käyttämällä sähkölaatikkoa ja RC -automoottoreita. Ennen kuin aloitan, minun pitäisi luultavasti kertoa teille, että lase
Music Reactive LED Strip (moderni työtila): 5 vaihetta (kuvilla)
Music Reactive LED Strip (moderni työtila): Tämä on todellinen pikaopas LED -salamoista työtilassa. Tässä erityistapauksessa opit asentamaan musiikkiin reagoivan LED -nauhan (matalataajuus), audion rytmiset valot, jotta voit nauttia elokuvista, musiikista ja peleistä toisella tasolla
Nixie Tube Music Visualizer: 10 vaihetta (kuvilla)
Nixie Tube Music Visualizer: Hypnotisoiva musiikin visualisoija, jonka innoittamana ovat iTunesin yläosan pienet palkit. Neljätoista venäläistä IN-13 Nixie -pylväsputkea käytetään näyttönä. Pituus, jonka jokainen nixie -putki syttyy, edustaa tietyn taajuuden äänenvoimakkuutta