Sadržaj:
- Korak 1: Potreban materijal
- Korak 2: Dijagram kola
- Korak 3: Arduino kod
- Korak 4: 3D štampanje osnove lampe
- Korak 5: Led dodatak
- Korak 6: Kućište lampe
- Korak 7: Postavljanje
Video: Pametna lampa (TCfD) - Rainbow + muzički vizualizator: 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Ovaj projekat je urađen za predmet Tehnologija za konceptualni dizajn na TUDelft -u
Konačni proizvod je osnovna LED lampa ESP-32 i povezana je sa serverom. Za prototip, lampa ima dvije funkcije; efekat duge koji emituje umirujući sjaj koji menja boju prema okolini i drugo vizualizator zvuka gde LED pikseli „plešu“u skladu sa nivoima zvuka. Sistem je spojen na wifi i korisnik može izabrati željeni efekat lampe putem WIFI -ja.
Jeftini mikročip ESP-32 pruža nam moćne procesore, ugrađeni senzor hodnika, senzor temperature, senzor dodira, kao i mogućnost WiFi i bluetooth. Ovim, iako su za ovaj projekt odabrana samo dva efekta, implikacija ove „pametne“lampe je neograničena. Koristilo bi se za označavanje vremena korisniku ili temperature prostorije, sama lampa 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 ugodno iskustvo buđenja.
Korak 1: Potreban materijal
Arduino esp32
Senzor zvuka
Četverosmjerni dvosmjerni pretvarač logičkih nivoa
Neopixel LED 2m 60 LED/m
Žice za kratkospojnike
Mikro USB kabl sa adapterom
priključak za internet
Korak 2: Dijagram kola
Dijagram kola je nacrtan i kolo je napravljeno prema tome kako je dato 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 u kod 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 (kada dobijemo dovoljno vremena) bit će ažurirana.
#include
#ifdef _AVR_
#include
#endif
const int numReadings = 5;
int očitanja [numReadings];
int readIndex = 0;
int ukupno = 0;
int prosjek = 0;
int micPin = 33;
#define PIN 4
#define NUM_LEDS 120
#define BRIGHTNESS 100
Adafruit_NeoPixel strip = 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 };
#include
#include
char ssid = "vaša mreža"; // vaš mrežni SSID (ime)
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 server (80);
void setup ()
{
Serial.begin (9600); // inicijalizacija serijske komunikacije
pinMode (9, OUTPUT); // postavljanje LED pin načina rada
// provjerite 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:");
Serial.println (ssid); // ispisuje naziv mreže (SSID);
// Povezivanje na WPA/WPA2 mrežu. Promijenite ovu liniju ako koristite otvorenu ili WEP mrežu:
status = WiFi.begin (ssid, pass);
// čekati 10 sekundi na vezu:
kašnjenje (10000);
}
server.begin (); // pokrećemo web server 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čitavanja [thisReading] = 0;
}
}
void rainbow (uint8_t wait) {
uint16_t i, j;
za (j = 0; j <256; j ++) {
za (i = 0; i
strip.setPixelColor (i, Točak ((i+j) & 255));
}
strip.show ();
kašnjenje (čekanje);
}
}
vizualizator praznina () {
ukupno = ukupno - očitanja [readIndex];
očitanja [readIndex] = analogRead (micPin);
ukupno = ukupno + očitavanja [readIndex];
readIndex = readIndex + 1;
if (readIndex> = numReadings) {
readIndex = 0;
}
prosek = ukupno / brojČitanja;
kašnjenje (1);
int mikropiksela = (prosječno-100)/5;
Serial.println (mikpiksela);
if (mik. piksela> 0) {
{
za (int j = 0; j <= mikpiksela; j ++)
strip.setPixelColor (j, (mik. piksela*2), 0, (90-mik. piksela), 0);
za (int j = mikpiksela; 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škivanje dolaznih klijenata
if (client) {// ako dobijete klijenta, Serial.println ("novi klijent"); // ispisuje poruku sa serijskog porta
String 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 sa klijenta, char c = client.read (); // tada čitajte bajt
Serial.write (c); // odštampajte serijski monitor
if (c == '\ n') {// ako je bajt znak novog reda
// ako je trenutni red 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 tip sadržaja kako bi klijent znao šta dolazi, zatim prazan red:
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 još jednim praznim redom:
client.println ();
// probiti se iz while petlje:
break;
} else {// ako imate novi red, izbrišite currentLine:
currentLine = "";
}
} else if (c! = '\ r') {// ako imate bilo šta drugo osim znaka za vraćanje nosača, currentLine += c; // dodajemo ga na kraj trenutne linije
}
// Provjerite je li zahtjev klijenta "GET /H" ili "GET /L":
if (currentLine.endsWith ("GET /R")) {
Duga (10); // Uključen Rainbow efekt
}
if (currentLine.endsWith ("GET /V")) {
Vizualizator (); // Vizualizator je uključen
}
}
}
// zatvorite vezu:
client.stop ();
Serial.println ("klijent nije povezan");
}
}
void printWifiStatus () {
// ispisuje SSID mreže na koju ste povezani:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// ispisuje IP adresu vašeg WiFi štita:
IP adresa ip = WiFi.localIP ();
Serial.print ("IP adresa:");
Serial.println (ip);
// ispisuje jačinu primljenog signala:
long rssi = WiFi. RSSI ();
Serial.print ("jačina signala (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
// ispisati gdje ići u pregledniku:
Serial.print ( Da biste vidjeli ovu stranicu na djelu, otvorite preglednik na
Serial.println (ip);
}
}
uint32_t Wheel (bajt 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 štampanje osnove lampe
3D model osnove lampe je izmjeren, dizajniran i odštampan sa dimenzijama dovoljno velikim da stanu u sve električne komponente unutar pretinca za bazu.
Korak 5: Led dodatak
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
Kućište je napravljeno pronalaskom prozirne boce slične širine kao osnova lampe i visine kao LED dodatak. Ovo je zatim prekriveno debelim papirom radi bolje difuzije svjetlosti. Alternativno, moguće je upotrijebiti matirano staklo ili prozirne plastične cijevi kao kućište lampe.
Korak 7: Postavljanje
Sve je bilo zalijepljeno i sastavljeno. I lampa je bila spremna za neko testiranje !.
Preporučuje se:
Laserski muzički vizualizator: 5 koraka
Laserski muzički vizualizator: Znate kako zvuče vaše omiljene pjesme. Sada možete napraviti vizualizator i vidjeti kako izgledaju. Radi ovako: Kada reproducirate zvuk kroz zvučnik, membrana zvučnika vibrira. Ove vibracije pomiču ogledalo pričvršćeno na
Muzički asembler: Integrisani virtuelni muzički instrument sa senzorom dodira u obliku bloka: 4 koraka
Muzički sastavljač: Integrisani virtuelni muzički instrument sa senzorom dodira u obliku bloka: Postoji mnogo ljudi koji žele da nauče svirati muzički instrument. Nažalost, neki od njih to ne započinju zbog visoke cijene instrumenata. Na osnovu toga odlučili smo napraviti integrirani sistem virtualnih muzičkih instrumenata kako bismo smanjili budžet za početak
LightBox muzički vizualizator: 5 koraka (sa slikama)
LightBox Music Visualizer: LightBox koristi ugrađeni mikrofon vašeg telefona ili tableta za analizu muzike radi generisanja prelepih svetlosnih uzoraka koji odgovaraju muzici. Samo pokrenite aplikaciju, postavite telefon ili tablet negdje blizu izvora zvuka i vaša će kutija vizualizirati
Muzički vizualizator (osciloskop): 4 koraka (sa slikama)
Muzički vizualizator (osciloskop): Ovaj muzički vizualizator pruža odličan način za dodavanje dubine doživljaju vaše muzike i prilično je jednostavan za izgradnju. Također može biti koristan kao stvarni osciloskop za neke aplikacije. Sve što je potrebno je: -stari crt (gotovo svi b & am
Muzički vizualizator Nixie Tube: 10 koraka (sa slikama)
Muzički vizualizator Nixie Tube: Hipnotizirajući vizualizator muzike inspirisan tim malim trakama na vrhu iTunes -a. Četrnaest ruskih IN-13 Nixie bargrafskih cijevi koristi se kao ekran. Dužina koju svaka nixie cijev svijetli predstavlja volumen određene frekvencije u mu