Isi kandungan:

Lampu Pintar (TCfD) - Pelangi + Muzik Visualizer: 7 Langkah (dengan Gambar)
Lampu Pintar (TCfD) - Pelangi + Muzik Visualizer: 7 Langkah (dengan Gambar)

Video: Lampu Pintar (TCfD) - Pelangi + Muzik Visualizer: 7 Langkah (dengan Gambar)

Video: Lampu Pintar (TCfD) - Pelangi + Muzik Visualizer: 7 Langkah (dengan Gambar)
Video: WEBINAR PENDIDIKAN: Kabupaten Banjarnegara 2024, Julai
Anonim
Image
Image
Rajah Litar
Rajah Litar

Projek ini dilakukan untuk kursus Teknologi untuk Reka Bentuk Konsep di TUDelft

Produk Akhir adalah lampu LED asas ESP-32 dan disambungkan ke pelayan. Untuk prototaip, lampu mempunyai dua fungsi; kesan pelangi yang memancarkan warna yang menenangkan beralih cahaya ke persekitarannya dan kedua visualiser suara di mana piksel LED "menari" mengikut tahap bunyi. Sistem ini disambungkan ke wifi dan pengguna dapat memilih kesan apa yang mereka inginkan dari lampu melalui WIFI.

Microchip ESP-32 yang murah menyediakan kita dengan pemproses yang kuat, sensor ruang dalaman, sensor suhu, sensor sentuh dan juga kemampuan wifi dan bluetooth. Dengan ini, Walaupun hanya dua kesan yang dipilih untuk projek ini, Implikasi lampu "pintar" ini tidak terbatas. Ini akan digunakan untuk menunjukkan cuaca kepada pengguna, atau suhu ruangan, lampu itu sendiri dapat berfungsi sebagai pencetus penggera atau dapat memberikan cahaya matahari yang menenangkan di sebelah tempat tidur anda yang meniru matahari terbit untuk pengalaman bangun tidur yang menyenangkan.

Langkah 1: Bahan Diperlukan

Arduino esp32

Sensor bunyi

Penukar Tahap Logik Dua Hala empat arah

Neopixel led 2m 60 led / m

Wayar pelompat

Kabel USB mikro dengan penyesuai

sambungan internet

Langkah 2: Rajah Litar

Gambarajah litar dilukis dan litar dibuat sesuai seperti yang diberikan di

rajah di bawah.

Langkah 3: Kod Arduino

Di sini, kod visualisasi pertama dibuat. Kemudian, dua contoh kod

; "Neoplxel RGBW starndtest"; dan "simpleWebServerWifi" telah diubah dan disatukan dalam kod visualizer. Walaupun kodnya kadang-kadang masih banyak kereta (lampu led secara rawak dari semasa ke semasa). Pengulangan kod seterusnya (setelah kita mendapat cukup masa) akan dikemas kini.

#sertakan

#ifdef _AVR_

#sertakan

#endif

const int numReadings = 5;

bacaan int [numReadings];

int readIndex = 0;

jumlah int = 0;

rata-rata int = 0;

int micPin = 33;

#tentukan PIN 4

#tentukan NUM_LEDS 120

#tentukan KECERGASAN 100

Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

bait 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 };

#sertakan

#sertakan

char ssid = "yourNetwork"; // SSID rangkaian anda (nama)

char pass = "secretPassword"; // kata laluan rangkaian anda

int keyIndex = 0; // nombor indeks kunci rangkaian anda (hanya diperlukan untuk WEP)

status int = WL_IDLE_STATUS;

Pelayan WiFiServer (80);

persediaan tidak sah ()

{

Serial.begin (9600); // memulakan komunikasi bersiri

pinMode (9, OUTPUT); // tetapkan mod pin LED

// periksa kehadiran perisai:

jika (WiFi.status () == WL_NO_SHIELD) {

Serial.println ("Perisai WiFi tidak ada");

sementara (benar); // jangan teruskan

}

Rentetan fv = WiFi.firmwareVersion ();

jika (fv! = "1.1.0") {

Serial.println ("Sila tingkatkan firmware");

}

// percubaan untuk menyambung ke rangkaian Wifi:

sementara (status! = WL_CONNECTED) {

Serial.print ("Mencuba untuk menyambung ke Rangkaian bernama:");

Serial.println (ssid); // cetak nama rangkaian (SSID);

// Sambungkan ke rangkaian WPA / WPA2. Tukar baris ini jika menggunakan rangkaian terbuka atau WEP:

status = WiFi.begin (ssid, lulus);

// tunggu 10 saat untuk sambungan:

kelewatan (10000);

}

pelayan.begin (); // mulakan pelayan web di port 80

printWifiStatus (); // anda berhubung sekarang, jadi cetak statusnya

}

{

Serial.begin (9600);

strip.setBrightness (CERAH);

jalur.begin ();

strip.show (); // Memulakan semua piksel untuk 'mati'

pinMode (micPin, INPUT);

untuk (int thisReading = 0; thisReading <numReadings; thisReading ++) {

bacaan [thisReading] = 0;

}

}

kekosongan pelangi (uint8_tunggu) {

uint16_t i, j;

untuk (j = 0; j <256; j ++) {

untuk (i = 0; i

strip.setPixelColor (i, Wheel ((i + j) & 255));

}

strip.show ();

kelewatan (tunggu);

}

}

visualizer kekosongan () {

total = total - bacaan [readIndex];

bacaan [readIndex] = analogRead (micPin);

total = jumlah + bacaan [readIndex];

readIndex = readIndex + 1;

jika (readIndex> = numReadings) {

bacaIndex = 0;

}

purata = jumlah / bilanganBacaan;

kelewatan (1);

int micpixel = (purata-100) / 5;

Serial.println (micpixel);

jika (micpixel> 0) {

{

untuk (int j = 0; j <= micpixel; j ++)

strip.setPixelColor (j, (micpixel * 2), 0, (90-micpixel), 0);

untuk (int j = micpixel; j <= NUM_LEDS; j ++)

strip.setPixelColor (j, 0, 0, 0, 0);

strip.show ();

}

}

jika (micpixel <0) {

untuk (int j = 0; j <= 20; j ++)

strip.setPixelColor (j, 0, 0, 50, 0);

strip.show ();

}

}

gelung kosong () {

{

Pelanggan WiFiClient = server.available (); // dengarkan pelanggan yang masuk

jika (pelanggan) {// jika anda mendapat pelanggan, Serial.println ("pelanggan baru"); // mencetak mesej keluar dari port bersiri

String currentLine = ""; // buat String untuk menyimpan data masuk dari klien

while (client.connected ()) {// gelung semasa pelanggan bersambung

if (client.available ()) {// jika ada bait untuk dibaca dari klien, char c = client.read (); // baca bait, kemudian

Serial.write (c); // mencetak monitor bersiri

if (c == '\ n') {// jika bait adalah watak barisan baru

// jika baris semasa kosong, anda mendapat dua watak baris baru berturut-turut.

// itulah akhir permintaan HTTP klien, jadi kirimkan respons:

jika (currentLine.length () == 0) {

// Header HTTP selalu bermula dengan kod respons (mis. HTTP / 1.1 200 OK)

// dan jenis kandungan supaya pelanggan tahu apa yang akan datang, kemudian baris kosong:

client.println ("HTTP / 1.1 200 OK");

client.println ("Jenis kandungan: teks / html");

pelanggan.println ();

// kandungan respons HTTP mengikuti tajuk:

client.print ("Klik di sini Hidupkan kesan Pelangi");

client.print ("Klik di sini Hidupkan Visualizer");

// Respons HTTP diakhiri dengan baris kosong yang lain:

pelanggan.println ();

// keluar dari gelung sementara:

rehat;

} lain {// jika anda mendapat talian baru, kemudian kosongkan currentLine:

currentLine = "";

}

} lain jika (c! = '\ r') {// jika anda mendapat apa-apa selain watak pengembalian kereta, currentLine + = c; // tambahkannya ke hujung talian semasa

}

// Periksa untuk mengetahui apakah permintaan pelanggan adalah "GET / H" atau "GET / L":

jika (currentLine.endsWith ("GET / R")) {

Pelangi (10); // Kesan pelangi dihidupkan

}

jika (currentLine.endsWith ("GET / V")) {

Visualizer (); // Visualizer dihidupkan

}

}

}

// tutup sambungan:

pelanggan.stop ();

Serial.println ("pelanggan terputus");

}

}

batal cetakWifiStatus () {

// cetak SSID rangkaian yang dilampirkan kepada anda:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// cetak alamat IP perisai WiFi anda:

IPAddress ip = WiFi.localIP ();

Serial.print ("Alamat IP:");

Bersiri.println (ip);

// cetak kekuatan isyarat yang diterima:

panjang rssi = WiFi. RSSI ();

Serial.print ("kekuatan isyarat (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// mencetak tempat untuk pergi dalam penyemak imbas:

Serial.print ( Untuk melihat halaman ini beraksi, buka penyemak imbas ke

Bersiri.println (ip);

}

}

uint32_t Wheel (byte WheelPos) {

WheelPos = 255 - WheelPos;

jika (WheelPos <85) {

jalur balik. Warna (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

jika (WheelPos <170) {

WheelPos - = 85;

jalur pengembalian. Warna (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos - = 170;

jalur balik. Color (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t merah (uint32_t c) {

kembali (c >> 16);

}

uint8_t hijau (uint32_t c) {

kembali (c >> 8);

}

uint8_t biru (uint32_t c) {

pulangan (c);

}

}

//Serial.println(micpixel);

}

Langkah 4: 3d Mencetak Pangkalan Lampu

3d Mencetak Pangkalan Lampu
3d Mencetak Pangkalan Lampu

Model 3d dari dasar lampu diukur, dirancang dan dicetak dengan dimensi yang cukup besar untuk memuat semua komponen elektrik di dalam ruang asas.

Langkah 5: Lekapan Led

Lampiran Led
Lampiran Led

Led digulung dalam gulungan kadbod dan dilampirkan menggunakan pita dua sisi, lubang digerudi di bahagian bawah untuk melewati wayar

Langkah 6: Penutup Lampu

Penutup Lampu
Penutup Lampu

Penutup dibuat dengan mencari botol lutsinar dengan lebar yang sama dengan dasar lampu dan tinggi seperti lampiran LED. Ini kemudian ditutup dengan kertas tebal untuk penyebaran cahaya yang lebih baik. Sebagai alternatif, adalah mungkin untuk menggunakan kaca buram atau tiub plastik lut sebagai penutup lampu.

Langkah 7: Persediaan

Persediaan
Persediaan

Semuanya dilekatkan dan dipasang. Lampu sudah siap untuk beberapa ujian !.

Disyorkan: