Daftar Isi:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 Langkah (dengan Gambar)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 Langkah (dengan Gambar)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 Langkah (dengan Gambar)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 Langkah (dengan Gambar)
Video: LG Life’s Good Award : Conference - Full | LG 2024, Juli
Anonim
Image
Image
Diagram Sirkuit
Diagram Sirkuit

Proyek ini dilakukan untuk kursus Teknologi untuk Desain Konsep di TUDelft

Produk akhir adalah lampu LED dasar ESP-32 dan terhubung ke server. Untuk prototipe, lampu memiliki dua fungsi; efek pelangi yang memancarkan cahaya pergeseran warna yang menenangkan ke sekelilingnya dan kedua, visualisator suara di mana piksel LED "menari" sesuai dengan tingkat suara. Sistem terhubung ke wifi dan pengguna dapat memilih efek apa yang mereka inginkan dari lampu melalui WIFI.

Microchip ESP-32 yang murah memberi kami prosesor yang kuat, sensor hall inbuilt, sensor suhu, sensor sentuh dan juga kemampuan wifi dan bluetooth. Dengan ini, Sementara hanya dua efek yang dipilih untuk proyek ini, Implikasi dari lampu "pintar" ini tidak terbatas. Ini akan digunakan untuk menunjukkan cuaca kepada pengguna, atau suhu ruangan, lampu itu sendiri dapat bertindak sebagai pemicu alarm atau dapat memberikan cahaya matahari yang menenangkan di sebelah tempat tidur Anda yang mensimulasikan matahari terbit untuk pengalaman bangun yang menyenangkan.

Langkah 1: Bahan yang Dibutuhkan

Arduino esp32

Sensor suara

Konverter Level Logika Dua Arah empat arah

Neopiksel dipimpin 2m 60 led/m

Kabel jumper

Kabel USB mikro dengan adaptor

koneksi internet

Langkah 2: Diagram Sirkuit

Sebuah diagram sirkuit digambar dan sirkuit dibuat sesuai seperti yang diberikan dalam

diagram di bawah ini.

Langkah 3: Kode Arduino

Di sini, pertama-tama kode visualizer dibuat. Kemudian, dua contoh kode

;“pengujian bintang neoplxel RGBW”; dan “simpleWebServerWifi” telah dimodifikasi dan diintegrasikan dalam kode visualizer. Meskipun kodenya kadang-kadang masih bermasalah (led secara acak menyala dari waktu ke waktu). Iterasi kode berikutnya (setelah kami mendapatkan cukup waktu) akan diperbarui.

#termasuk

#ifdef _AVR_

#termasuk

#berakhir jika

const int numBacaan = 5;

int bacaan[numReadings];

int indeks baca = 0;

int jumlah = 0;

int rata-rata = 0;

int micPin = 33;

#tentukan PIN 4

#tentukan NUM_LEDS 120

#menentukan KECERAHAN 100

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

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

#termasuk

#termasuk

char ssid = "Jaringan Anda"; // SSID jaringan Anda (nama)

char pass = "kata sandi rahasia"; // kata sandi jaringan Anda

int indeks kunci = 0; // Nomor indeks kunci jaringan Anda (hanya diperlukan untuk WEP)

int status = WL_IDLE_STATUS;

Server WiFiServer (80);

batalkan pengaturan()

{

Serial.begin(9600); // inisialisasi komunikasi serial

pinMode(9, OUTPUT); // atur mode pin LED

// periksa keberadaan perisai:

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

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

sementara (benar); // jangan lanjutkan

}

String fv = WiFi.firmwareVersion();

jika (fv != "1.1.0") {

Serial.println("Mohon upgrade firmware");

}

// coba sambungkan ke jaringan Wifi:

sementara (status != WL_CONNECTED) {

Serial.print("Mencoba terhubung ke Jaringan bernama: ");

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

// Hubungkan ke jaringan WPA/WPA2. Ubah baris ini jika menggunakan jaringan terbuka atau WEP:

status = WiFi.begin(ssid, pass);

// tunggu 10 detik untuk koneksi:

penundaan (10000);

}

server.mulai(); // mulai server web pada port 80

printWifiStatus(); // Anda terhubung sekarang, jadi cetak statusnya

}

{

Serial.begin(9600);

strip.setBrightness(KECERAHAN);

strip.mulai();

strip.tampilkan(); // Inisialisasi semua piksel ke 'mati'

pinMode(micPin, INPUT);

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

bacaan[Bacaan ini] = 0;

}

}

void pelangi(uint8_t tunggu) {

uint16_t i, j;

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

untuk(i=0; i

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

}

strip.tampilkan();

tunda (tunggu);

}

}

kekosongan visualisator(){

total = total - bacaan[readIndex];

bacaan[readIndex] = analogRead(micPin);

total = total + bacaan[readIndex];

readIndex = readIndex + 1;

if (readIndex >= numReadings) {

bacaIndeks = 0;

}

rata-rata = total / angkaBacaan;

penundaan (1);

int micpixel = (rata-rata-100)/5;

Serial.println(mikpiksel);

if (mikpiksel > 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.tampilkan();

}

}

if (mikpiksel < 0) {

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

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

strip.tampilkan();

}

}

lingkaran kosong() {

{

Klien WiFiClient = server.available(); // dengarkan klien yang masuk

if (klien) { // jika Anda mendapatkan klien, Serial.println("klien baru"); // mencetak pesan dari port serial

String arusLine = ""; // membuat String untuk menampung data yang masuk dari klien

while (client.connected()) { // loop saat klien terhubung

if (client.available()) { // jika ada byte untuk dibaca dari klien, char c = klien.baca(); // baca satu byte, lalu

Serial.tulis(c); // print di serial monitor

if (c == '\n') { // jika byte adalah karakter baris baru

// jika baris saat ini kosong, Anda mendapatkan dua karakter baris baru berturut-turut.

// itulah akhir dari permintaan HTTP klien, jadi kirim tanggapan:

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

// Header HTTP selalu dimulai dengan kode respons (mis. HTTP/1.1 200 OK)

// dan tipe konten sehingga klien tahu apa yang akan terjadi, lalu baris kosong:

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

client.println("Tipe-konten:teks/html");

klien.println();

// isi dari respon HTTP mengikuti header:

client.print("Klik disini Nyalakan efek Pelangi");

client.print("Klik disini Nyalakan Visualizer");

// Respons HTTP diakhiri dengan baris kosong lainnya:

klien.println();

// keluar dari perulangan while:

merusak;

} else { // jika Anda mendapatkan baris baru, hapus baris saat ini:

baris saat ini = "";

}

} else if (c != '\r') { // jika Anda mendapatkan yang lain selain karakter carriage return, garis saat ini += c; // tambahkan ke akhir baris saat ini

}

// Periksa untuk melihat apakah permintaan klien adalah "GET /H" atau "GET /L":

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

Pelangi (10); // Efek pelangi diaktifkan

}

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

Visualisasi(); // Visualizer dihidupkan

}

}

}

// tutup koneksi:

klien.berhenti();

Serial.println("klien terputus");

}

}

batal printWifiStatus() {

// cetak SSID jaringan tempat Anda terhubung:

Serial.print("SSID: ");

Serial.println(WiFi. SSID());

// cetak alamat IP pelindung WiFi Anda:

IPaddress ip = WiFi.localIP();

Serial.print("Alamat IP: ");

Serial.println(ip);

// cetak kekuatan sinyal yang diterima:

rssi panjang = WiFi. RSSI();

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

Serial.print(rssi);

Serial.println("dBm");

// cetak ke mana harus pergi di browser:

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

Serial.println(ip);

}

}

Roda uint32_t(byte WheelPos) {

WheelPos = 255 - WheelPos;

if(Pos Roda < 85) {

kembali strip. Warna(255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

if(Pos Roda < 170) {

WheelPos -= 85;

kembali strip. Warna(0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

kembali strip. Warna(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) {

kembali (c);

}

}

//Serial.println(micpixel);

}

Langkah 4: Mencetak Dasar Lampu 3d

3d Mencetak Dasar Lampu
3d Mencetak Dasar Lampu

Model dasar lampu 3d diukur, dirancang, dan dicetak dengan dimensi yang cukup besar untuk memuat semua komponen listrik di dalam kompartemen dasar.

Langkah 5: Led Lampiran

Lampiran Led
Lampiran Led

Led digulung dalam gulungan karton dan direkatkan menggunakan selotip dua sisi, sebuah lubang dibor di bagian bawah untuk melewati kawat

Langkah 6: Kandang Lampu

Kandang Lampu
Kandang Lampu

Sebuah enklosur dibuat dengan menemukan botol transparan dengan lebar yang sama sebagai dasar lampu dan tinggi sebagai lampiran LED. Ini kemudian ditutup dengan kertas tebal untuk difusi cahaya yang lebih baik. Sebagai alternatif, dimungkinkan untuk menggunakan kaca buram atau tabung plastik tembus pandang sebagai penutup lampu.

Langkah 7: Pengaturan

Mempersiapkan
Mempersiapkan

Semuanya direkatkan dan dirakit. Dan lampu sudah siap untuk beberapa pengujian!.

Direkomendasikan: