Turinys:
- 1 žingsnis: reikalinga medžiaga
- 2 žingsnis: grandinės schema
- 3 žingsnis: „Arduino“kodas
- 4 žingsnis: 3d lempos pagrindo spausdinimas
- 5 žingsnis: LED priedas
- 6 žingsnis: lempos gaubtas
- 7 veiksmas: sąranka
Video: Išmanioji lempa (TCfD) - vaivorykštė + muzikos vizualizatorius: 7 žingsniai (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
Šis projektas buvo atliktas kursui „Technology for Concept Design“TUDelfte
Galutinis produktas yra ESP-32 bazinė LED lemputė ir prijungta prie serverio. Prototipui lempa turi dvi funkcijas; vaivorykštės efektas, skleidžiantis raminantį spalvų keitimo švytėjimą savo aplinkos link, ir, antra, garso vizualizatorius, kuriame LED pikseliai „šoka“pagal garso lygį. Sistema prijungta prie „Wi -Fi“ir vartotojas gali pasirinkti, kokio efekto nori iš lempos per WIFI.
Pigi ESP-32 mikroschema suteikia mums galingus procesorius, įmontuotą salės jutiklį, temperatūros jutiklį, jutiklinį jutiklį, taip pat „Wi-Fi“ir „Bluetooth“galimybes. Taigi, nors šiam projektui buvo pasirinkti tik du efektai, šios „protingos“lempos reikšmė yra beribė. Jis būtų naudojamas vartotojui parodyti orą ar kambario temperatūrą, pati lempa gali veikti kaip pavojaus signalas, arba ji gali suteikti raminančią saulės šviesą šalia jūsų lovos, imituojančią saulėtekį, kad būtų malonu pažadinti.
1 žingsnis: reikalinga medžiaga
Arduino esp32
Garso jutiklis
Keturių krypčių dvikryptis loginio lygio keitiklis
„Neopixel“šviesos diodas 2 m 60 led/m
Jumperio laidai
Mikro USB kabelis su adapteriu
interneto ryšys
2 žingsnis: grandinės schema
Buvo sudaryta grandinės schema ir atitinkamai sudaryta grandinė, kaip nurodyta
diagrama žemiau.
3 žingsnis: „Arduino“kodas
Čia pirmiausia buvo sukurtas vizualizatoriaus kodas. Tada du kodo pavyzdžiai
; „Neoplxel RGBW starndtest“; ir „simpleWebServerWifi“buvo modifikuotas ir integruotas į vizualizatoriaus kodą. Nors kodas kartais vis dar yra klaidingas (atsitiktinės šviesos diodai kartais užsidega). Kitas kodo kartojimas (kai turėsime pakankamai laiko) bus atnaujintas.
#įtraukti
#ifdef _AVR_
#įtraukti
#endif
const int numReadings = 5;
int rodmenys [numReadings];
int readIndex = 0;
int viso = 0;
int vidurkis = 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);
baitas 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 };
#įtraukti
#įtraukti
char ssid = "jūsų tinklas"; // jūsų tinklo SSID (pavadinimas)
char pass = "secretPassword"; // jūsų tinklo slaptažodis
int keyIndex = 0; // jūsų tinklo raktas Indekso numeris (reikalingas tik WEP)
int būsena = WL_IDLE_STATUS;
„WiFiServer“serveris (80);
negaliojanti sąranka ()
{
Serial.begin (9600); // inicijuoti nuoseklųjį ryšį
pinMode (9, OUTPUT); // nustatyti LED kaiščio režimą
// patikrinkite, ar nėra skydo:
jei („WiFi.status () == WL_NO_SHIELD“{
Serial.println („WiFi skydo nėra“);
o (tiesa); // netęsk
}
Eilutė fv = WiFi.firmwareVersion ();
jei (fv! = "1.1.0") {
Serial.println ("Prašome atnaujinti programinę -aparatinę įrangą");
}
// bandymas prisijungti prie „Wifi“tinklo:
while (būsena! = WL_CONNECTED) {
Serial.print ("Bandoma prisijungti prie tinklo pavadinimu:");
Serial.println (ssid); // spausdinti tinklo pavadinimą (SSID);
// Prisijunkite prie WPA/WPA2 tinklo. Pakeiskite šią eilutę, jei naudojate atvirą arba WEP tinklą:
status = WiFi.begin (ssid, pass);
// palaukite 10 sekundžių, kol prisijungsite:
vėlavimas (10000);
}
server.begin (); // paleiskite žiniatinklio serverį 80 prievade
printWifiStatus (); // dabar esate prisijungę, todėl išspausdinkite būseną
}
{
Serial.begin (9600);
strip.setBrightness (BRIGHTNESS);
strip.begin ();
strip.show (); // Inicijuokite visus taškus į „išjungtą“
pinMode („micPin“, INPUT);
for (int thisReading = 0; thisReading <numReadings; thisReading ++) {
rodmenys [thisReading] = 0;
}
}
void rainbow (uint8_t wait) {
uint16_t i, j;
(j = 0; j <256; j ++) {
už (i = 0; t
strip.setPixelColor (i, ratas ((i+j) ir 255));
}
strip.show ();
atidėti (laukti);
}
}
void visualizer () {
total = total - rodmenys [readIndex];
rodmenys [readIndex] = analogRead (micPin);
iš viso = iš viso + rodmenys [readIndex];
readIndex = readIndex + 1;
if (readIndex> = numReadings) {
readIndex = 0;
}
vidurkis = bendras / numReadings;
uždelsimas (1);
int micpixel = (vidurkis-100)/5;
Serial.println (mikropikselių);
jei (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 ();
}
}
jei (mikropikselių <0) {
(int j = 0; j <= 20; j ++)
strip.setPixelColor (j, 0, 0, 50, 0);
strip.show ();
}
}
void loop () {
{
„WiFiClient“klientas = serveris.pasiekiamas (); // klausytis atvykstančių klientų
if (klientas) {// jei gausite klientą, Serial.println („naujas klientas“); // išspausdinkite pranešimą iš nuoseklaus prievado
String currentLine = ""; // padaryti eilutę, kad būtų galima laikyti gaunamus duomenis iš kliento
while (client.connected ()) {// kilpa, kol klientas prijungtas
if (client.available ()) {// jei yra baitų skaityti iš kliento, char c = client.read (); // tada skaityk baitą
Serial.write (c); // atsispausdinkite serijinį monitorių
if (c == '\ n') {// jei baitas yra naujos eilutės simbolis
// jei dabartinė eilutė tuščia, iš eilės turite du naujos eilutės simbolius.
// tai kliento HTTP užklausos pabaiga, todėl atsiųskite atsakymą:
if (currentLine.length () == 0) {
// HTTP antraštės visada prasideda nuo atsakymo kodo (pvz., HTTP/1.1 200 Gerai)
// ir turinio tipas, kad klientas žinotų, kas ateina, tada tuščia eilutė:
client.println („HTTP/1.1 200 OK“);
client.println ("Turinio tipas: tekstas/html");
klientas.println ();
// HTTP atsakymo turinys seka po antraštės:
client.print („Spustelėkite čia Įjungti vaivorykštės efektą“);
client.print („Spustelėkite čia Įjungti vizualizatorių“);
// HTTP atsakymas baigiasi kita tuščia eilute:
klientas.println ();
// išsiveržti iš ciklo:
pertrauka;
} else {// jei gavote naują eilutę, išvalykite currentLine:
CurrentLine = "";
}
} else if (c! = '\ r') {// jei turite ką nors kita, išskyrus vežimo grąžinimo simbolį, CurrentLine += c; // pridėti jį prie dabartinės eilutės pabaigos
}
// Patikrinkite, ar kliento užklausa buvo „GET /H“ar „GET /L“:
if (currentLine.endsWith ("GET /R")) {
Vaivorykštė (10); // Vaivorykštės efektas įjungtas
}
if (currentLine.endsWith ("GET /V")) {
Vizualizatorius (); // Vizualizatorius įjungtas
}
}
}
// uždaryti ryšį:
client.stop ();
Serial.println ("klientas atjungtas");
}
}
void printWifiStatus () {
// spausdinkite tinklo, prie kurio esate prisijungę, SSID:
Serial.print ("SSID:");
Serial.println (WiFi. SSID ());
// atspausdinkite „WiFi“skydo IP adresą:
IPAddress ip = WiFi.localIP ();
Serial.print („IP adresas:“);
Serial.println (ip);
// spausdinti gauto signalo stiprumą:
ilgas rssi = WiFi. RSSI ();
Serial.print ("signalo stiprumas (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
// spausdinti, kur eiti naršyklėje:
Serial.print ( Norėdami pamatyti šį puslapį veikiant, atidarykite naršyklę adresu
Serial.println (ip);
}
}
uint32_t ratas (baitas „WheelPos“) {
WheelPos = 255 - WheelPos;
jei („WheelPos <85“) {
grąžinimo juostelė. Spalva (255 - „WheelPos“* 3, 0, „WheelPos“* 3, 0);
}
jei („WheelPos <170“) {
„WheelPos“-= 85;
grąžinimo juostelė. Spalva (0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
„WheelPos“-= 170;
grąžinimo juostelė. Spalva („WheelPos“* 3, 255 - „WheelPos“* 3, 0, 0);
}
uint8_t raudona (uint32_t c) {
grįžimas (c >> 16);
}
uint8_t žalia (uint32_t c) {
grįžimas (c >> 8);
}
uint8_t blue (uint32_t c) {
grąžinimas (c);
}
}
// Serijinis.println (mikropikselis);
}
4 žingsnis: 3d lempos pagrindo spausdinimas
Buvo išmatuotas, suprojektuotas ir atspausdintas 3D lempos pagrindo modelis, kurio matmenys yra pakankamai dideli, kad tilptų visi pagrindo skyriaus viduje esantys elektriniai komponentai.
5 žingsnis: LED priedas
Ledai buvo suvynioti į kartoninį ritinį ir pritvirtinti naudojant dvipusę juostą, apatinėje dalyje buvo išgręžta skylė vielai praleisti
6 žingsnis: lempos gaubtas
Dangtelis buvo pagamintas radus skaidrų butelį, kurio plotis panašus į lempos pagrindą, o aukštis - kaip LED priedas. Tada jis buvo padengtas storu popieriumi, kad būtų geriau skleidžiama šviesa. Arba kaip lempos gaubtą galima naudoti matinį stiklą arba permatomus plastikinius vamzdelius.
7 veiksmas: sąranka
Viskas buvo suklijuota ir surinkta. Ir lempa buvo paruošta tam tikriems bandymams !.
Rekomenduojamas:
Lazerinis muzikos vizualizatorius: 5 žingsniai
Lazerinis muzikos vizualizatorius: žinote, kaip skamba jūsų mėgstamos dainos. Dabar galite sukurti vizualizatorių ir pamatyti, kaip jie atrodo. Tai veikia taip: kai leidžiate garsą per garsiakalbį, garsiakalbio diafragma vibruoja. Šios vibracijos perkelia veidrodį, pritvirtintą prie
Translightion lenta (valdomas muzikos vizualizatorius): 5 žingsniai
„Translightion Board“(valdomas muzikos vizualizatorius): išverskite muziką į akinantį šviesos šou naudodami šį pritaikomą šviesos valdiklio projektą. Puikiai tinka didžėjams, vakarėliams ir 1: 1 pasirodymams! Žemiau atnaujinta demonstracija
„LightBox“muzikos vizualizatorius: 5 žingsniai (su paveikslėliais)
„LightBox“muzikos vizualizatorius: „LightBox“naudoja jūsų telefone ar planšetiniame kompiuteryje įmontuotą mikrofoną muzikai analizuoti, kad sukurtų gražius muzikos modelius, atitinkančius muziką. Tiesiog paleiskite programą, padėkite telefoną ar planšetinį kompiuterį kažkur šalia garso šaltinio, o dėžutė vizualizuos
Muzikos vizualizatorius su „Arduino“: 5 žingsniai
Muzikos vizualizatorius su „Arduino“: interaktyvus muzikos vizualizatorius Komponentai LM338T x5 Potenciometras x2 (1k ir 10k) 1N4006 diodas x5Kondensatorius x2 (1uF ir 10uF) Rezistoriai x3 (416, 10k ir 1k) Aux skirstytuvas
„Nixie Tube“muzikos vizualizatorius: 10 žingsnių (su paveikslėliais)
„Nixie Tube“muzikos vizualizatorius: hipnotizuojantis muzikos vizualizatorius, įkvėptas tų mažų juostų „iTunes“viršuje. Keturiolika rusiškų IN-13 „Nixie“juostinių grafikų vamzdžių naudojami kaip ekranas. Ilgis, kurį užsidega kiekvienas „nixie“vamzdelis, atspindi tam tikro dažnio tūrį