Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
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 !.