Sadržaj:
- Korak 1: Potreban materijal
- Korak 2: Dijagram kruga
- Korak 3: Arduino kod
- Korak 4: 3D ispis baze svjetiljke
- Korak 5: Led prilog
- Korak 6: Kućište lampe
- Korak 7: Postavljanje
Video: Pametna lampa (TCfD) - Rainbow + Glazbeni vizualizator: 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Ovaj je projekt urađen za kolegij Tehnologija za idejno projektiranje na TUDelftu
Konačni proizvod je osnovna LED svjetiljka ESP-32 i spojena je na poslužitelj. Za prototip, svjetiljka ima dvije funkcije; efekt duge koji emitira umirujući sjaj koji mijenja boju prema okolini i drugo vizualizator zvuka gdje LED pikseli "plešu" prema razinama zvuka. Sustav je spojen na wifi i korisnik može izabrati željeni učinak lampe putem WIFI -ja.
Jeftini mikročip ESP-32 pruža nam moćne procesore, ugrađeni senzor hodnika, osjetnik temperature, osjetnik na dodir, a također i mogućnost WiFi i bluetooth. Time su, iako su za ovaj projekt odabrana samo dva učinka, implikacija ove „pametne“lampe neograničena. Koristio bi se za označavanje vremena korisniku ili temperature prostorije, sama svjetiljka može djelovati kao okidač alarma ili može dati smirujući sjaj sunčeve svjetlosti pored vašeg kreveta simulirajući izlazak sunca za ugodan doživljaj buđenja.
Korak 1: Potreban materijal
Arduino esp32
Senzor zvuka
Četverosmjerni dvosmjerni pretvarač logičke razine
Neopixel LED 2m 60 led/m
Kratkospojne žice
Mikro USB kabel s adapterom
priključak za internet
Korak 2: Dijagram kruga
Nacrtan je dijagram kruga i prema tome je napravljeno kolo kako je dano u
donji dijagram.
Korak 3: Arduino kod
Ovdje je prvo napravljen kod vizualizatora. Zatim, dva primjera koda
; "Neoplxel RGBW starndtest"; i "simpleWebServerWifi" je izmijenjen i integriran unutar koda vizualizatora. Iako je kod s vremena na vrijeme još uvijek neispravan (nasumično LED svjetlo se pali s vremena na vrijeme). Sljedeća iteracija koda (kad dobijemo dovoljno vremena) bit će ažurirana.
#uključi
#ifdef _AVR_
#uključi
#završi ako
const int numReadings = 5;
int očitanja [numReadings];
int readIndex = 0;
int ukupno = 0;
int prosjek = 0;
int micPin = 33;
#definirajte PIN 4
#define NUM_LEDS 120
#definirajte SVJETLOST 100
Adafruit_NeoPixel traka = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);
bajt 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 };
#uključi
#uključi
char ssid = "vaša mreža"; // vaš mrežni SSID (naziv)
char pass = "secretPassword"; // vašu mrežnu lozinku
int keyIndex = 0; // vaš indeksni broj ključa mreže (potreban samo za WEP)
int status = WL_IDLE_STATUS;
WiFiServer poslužitelj (80);
void setup ()
{
Serial.begin (9600); // inicijalizacija serijske komunikacije
pinMode (9, OUTPUT); // postavljanje LED pin načina rada
// provjeriti prisutnost štita:
if (WiFi.status () == WL_NO_SHIELD) {{100} {101}
Serial.println ("WiFi štit nije prisutan");
while (istina); // ne nastavljaj
}
Niz fv = WiFi.firmwareVersion ();
if (fv! = "1.1.0") {
Serial.println ("Molimo nadogradite firmver");
}
// pokušaj povezivanja na Wifi mrežu:
while (status! = WL_CONNECTED) {
Serial.print ("Pokušaj povezivanja na mrežu pod nazivom:");
Serijski.println (ssid); // ispisati naziv mreže (SSID);
// Povezivanje na WPA/WPA2 mrežu. Promijenite ovaj redak ako koristite otvorenu ili WEP mrežu:
status = WiFi.početak (ssid, prolaz);
// pričekajte 10 sekundi za povezivanje:
kašnjenje (10000);
}
server.begin (); // pokretanje web poslužitelja na portu 80
printWifiStatus (); // sada ste povezani pa ispišite status
}
{
Serial.begin (9600);
strip.setBrightness (BRIGHTNESS);
strip.begin ();
strip.show (); // Pokretanje svih piksela na "isključeno"
pinMode (micPin, INPUT);
for (int thisReading = 0; thisReading <numReadings; thisReading ++) {
očitanja [thisReading] = 0;
}
}
void rainbow (uint8_t wait) {
uint16_t i, j;
za (j = 0; j <256; j ++) {
za (i = 0; i
strip.setPixelColor (i, kotačić ((i+j) & 255));
}
strip.show ();
odgoda (čekanje);
}
}
vizualizator praznina () {
ukupno = ukupno - očitanja [readIndex];
očitanja [readIndex] = analogRead (micPin);
ukupno = ukupno + očitanja [readIndex];
readIndex = readIndex + 1;
if (readIndex> = numReadings) {{100} {101}
readIndex = 0;
}
prosjek = ukupno / brojReadings;
odgoda (1);
int mikropiksela = (prosječno-100)/5;
Serijski.println (miksela);
if (miksela> 0) {
{
za (int j = 0; j <= mikpiksela; j ++)
strip.setPixelColor (j, (mik. piksela*2), 0, (90-mik. piksela), 0);
za (int j = mikropiksela; j <= NUM_LEDS; j ++)
strip.setPixelColor (j, 0, 0, 0, 0);
strip.show ();
}
}
if (miksela <0) {
za (int j = 0; j <= 20; j ++)
strip.setPixelColor (j, 0, 0, 50, 0);
strip.show ();
}
}
void loop () {{100} {101}
{
WiFiClient klijent = server.available (); // osluškivati dolazne klijente
if (client) {// ako dobijete klijenta, Serial.println ("novi klijent"); // ispis poruke putem serijskog porta
Niz currentLine = ""; // napraviti niz za čuvanje dolaznih podataka od klijenta
while (client.connected ()) {// petlja dok je klijent povezan
if (client.available ()) {// ako ima bajtova za čitanje s klijenta, char c = client.read (); // tada pročitajte bajt
Serial.write (c); // ispisati serijski monitor
if (c == '\ n') {// ako je bajt znak novog retka
// ako je trenutni redak prazan, imate dva znaka novog reda zaredom.
// to je kraj HTTP zahtjeva klijenta, pa pošaljite odgovor:
if (currentLine.length () == 0) {
// HTTP zaglavlja uvijek počinju kodom odgovora (npr. HTTP/1.1 200 OK)
// i vrstu sadržaja kako bi klijent znao što dolazi, a zatim prazan redak:
client.println ("HTTP/1.1 200 OK");
client.println ("Vrsta sadržaja: tekst/html");
client.println ();
// sadržaj HTTP odgovora slijedi zaglavlje:
client.print ("Kliknite ovdje Uključi Rainbow efekt");
client.print ("Kliknite ovdje Uključi vizualizator");
// HTTP odgovor završava drugim praznim retkom:
client.println ();
// probiti se iz while petlje:
pauza;
} else {// ako imate novi redak, izbrišite currentLine:
currentLine = "";
}
} else if (c! = '\ r') {// ako imate bilo što drugo osim znaka za vraćanje nosača, currentLine += c; // dodamo ga na kraj trenutne linije
}
// Provjerite je li zahtjev klijenta "GET /H" ili "GET /L":
if (currentLine.endsWith ("GET /R")) {
Duga (10); // Uključen efekt duge
}
if (currentLine.endsWith ("GET /V")) {
Vizualizator (); // Vizualizator je uključen
}
}
}
// prekida vezu:
client.stop ();
Serial.println ("klijent nije povezan");
}
}
void printWifiStatus () {
// ispisati SSID mreže na koju ste povezani:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// ispisati IP adresu vašeg WiFi štita:
IP adresa ip = WiFi.localIP ();
Serial.print ("IP adresa:");
Serijski.println (ip);
// ispisuje snagu primljenog signala:
dugi rssi = WiFi. RSSI ();
Serial.print ("snaga signala (RSSI):");
Serijski.ispis (rssi);
Serial.println ("dBm");
// ispisati gdje ići u pregledniku:
Serial.print ( Da biste vidjeli ovu stranicu na djelu, otvorite preglednik na
Serijski.println (ip);
}
}
uint32_t kotač (byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos <85) {
povratna traka. Boja (255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
if (WheelPos <170) {
WheelPos -= 85;
povratna traka. Boja (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
WheelPos -= 170;
povratna traka. Boja (WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t crveno (uint32_t c) {
return (c >> 16);
}
uint8_t zelena (uint32_t c) {
return (c >> 8);
}
uint8_t plavo (uint32_t c) {
return (c);
}
}
//Serial.println(micpixel);
}
Korak 4: 3D ispis baze svjetiljke
3D model baze svjetiljke je izmjeren, dizajniran i ispisan s dimenzijama dovoljno velikim da stanu u sve električne komponente unutar pretinca za bazu.
Korak 5: Led prilog
Led -ovi su namotani u kartonsku rolu i pričvršćeni dvostranom trakom, a u donjem dijelu izbušena je rupa za prolazak žice
Korak 6: Kućište lampe
Ograđivanje je napravljeno pronalaskom prozirne boce slične širine kao dno lampe i visine kao LED nastavak. Zatim je prekriven debelim papirom radi bolje difuzije svjetlosti. Alternativno, moguće je upotrijebiti matirano staklo ili prozirne plastične cijevi kao kućište svjetiljke.
Korak 7: Postavljanje
Sve je bilo zalijepljeno i sastavljeno. I lampa je bila spremna za neka testiranja !.
Preporučeni:
Juuke - RFID glazbeni player za starije i djecu: 10 koraka (sa slikama)
Juuke - RFID glazbeni player za starije i djecu: Ovo je Juuke kutija. Juuke box je vaš glazbeni prijatelj, napravljen da bude što lakši za korištenje. Posebno je dizajniran za upotrebu od strane starijih osoba i djece, ali naravno da ga mogu koristiti i sve ostale dobi. Razlog zašto smo ovo stvorili je
Učinite svoj vlastiti niskobudžetni Bluetooth glazbeni sustav: 5 koraka (sa slikama)
Učinite svoj vlastiti niskobudžetni Bluetooth glazbeni sustav: U ovom projektu pokazat ću vam kako sam " stopio " prljavi jeftini bluetooth glazbeni prijemnik sa mojim starim zvučnikom. Glavni fokus bit će na projektiranju jeftinog sklopa audio pojačala oko LM386 i NE5534. Bluetooth prijemnik
Glazbeni sastavljač: Integrirani virtualni glazbeni instrument s blok-osjetljivim dodirnim senzorom: 4 koraka
Glazbeni sastavljač: Integrirani virtualni glazbeni instrument s blok-osjetljivim dodirnim senzorom: Postoji mnogo ljudi koji žele naučiti svirati glazbeni instrument. Nažalost, neki od njih to ne započinju zbog visoke cijene instrumenata. Na temelju toga odlučili smo napraviti integrirani sustav virtualnih glazbenih instrumenata kako bismo smanjili proračun početnih ne
Glazbeni vizualizator s Arduinom: 5 koraka
Glazbeni vizualizator s Arduinom: Interaktivni glazbeni vizualizatorKomponenteLM338T x5Potenciometar x2 (1k i 10k) 1N4006 dioda x5Kondenzator x2 (1uF i 10uF) Otpornici x3 (416, 10k i 1k) Aux razdjelnik
Glazbeni vizualizator (osciloskop): 4 koraka (sa slikama)
Glazbeni vizualizator (osciloskop): Ovaj glazbeni vizualizator pruža izvrstan način za dodavanje veće dubine doživljaju vaše glazbe i vrlo je jednostavan za izradu. Također može biti koristan kao stvarni osciloskop za neke aplikacije, sve što je potrebno je: -stari crt (gotovo svi b & am