İçindekiler:
- Adım 1: Gerekli Malzeme
- Adım 2: Devre Şeması
- Adım 3: Arduino Kodu
- Adım 4: Lambanın Tabanını 3B Yazdırma
- Adım 5: Led Eklentisi
- Adım 6: Lamba Muhafazası
- 7. Adım: Kurulum
Video: Akıllı Lamba (TCfD) - Gökkuşağı + Müzik Görüntüleyici: 7 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
Bu proje, TUdelft'te Teknoloji için Konsept Tasarım dersi için yapılmıştır.
Nihai ürün bir ESP-32 taban LED lambasıdır ve sunucuya bağlıdır. Prototip için lambanın iki işlevi vardır; çevresine yatıştırıcı bir renk kayması yayan bir gökkuşağı efekti ve ikinci olarak, LED piksellerinin ses seviyelerine göre “dans ettiği” ses görselleştiricisi. Sistem wifi'ye bağlı ve kullanıcı WIFI üzerinden lambadan istediği etkiyi seçebiliyor.
Ucuz ESP-32 mikroçip bize güçlü işlemciler, dahili hall sensörü, sıcaklık sensörü, dokunmatik sensör ve ayrıca wifi ve bluetooth özelliği sağlıyor. Bununla, Bu proje için sadece iki efekt seçilirken, Bu “akıllı” lambanın anlamı sınırsızdır. Kullanıcıya hava durumunu veya odanın sıcaklığını belirtmek için kullanılır, lambanın kendisi bir alarm tetikleyicisi görevi görebilir veya güzel bir uyanma deneyimi için gün doğumunu simüle eden yatağınızın yanında sakinleştirici bir güneş ışığı verebilir.
Adım 1: Gerekli Malzeme
Arduino esp32
ses sensörü
Dört yollu Çift Yönlü Mantık Seviyesi dönüştürücü
Neopiksel led 2m 60 led/m
Atlama telleri
Adaptörlü mikro USB kablosu
internet bağlantısı
Adım 2: Devre Şeması
Devre şeması çizilmiş ve buna göre devre yapılmıştır.
aşağıdaki diyagram.
Adım 3: Arduino Kodu
Burada öncelikle görselleştirici kodu yapılmıştır. Ardından, iki örnek kod
;“neoplxel RGBW yıldız testi”; ve “simpleWebServerWifi” değiştirildi ve görselleştirici koduna entegre edildi. Kod zaman zaman hala sorunlu olsa da (rastgele led'ler zaman zaman yanar). Kodun bir sonraki yinelemesi (yeterli zamanımız olduğunda) güncellenecektir.
#Dahil etmek
#ifdef _AVR_
#Dahil etmek
#endif
const int numOkumalar = 5;
int okumalar[numReadings];
int readIndex = 0;
int toplam = 0;
int ortalama = 0;
int mikrofonPin = 33;
#define PIN 4
#define NUM_LEDS 120
#define PARLAKLIK 100
Adafruit_NeoPixel şeridi = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);
bayt 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 };
#Dahil etmek
#Dahil etmek
char ssid = "Ağınız"; // ağ SSID'niz (ad)
char pass = "secretPassword"; // ağ şifreniz
int anahtarIndex = 0; // ağ anahtarınız Dizin numarası (yalnızca WEP için gereklidir)
int durum = WL_IDLE_STATUS;
WiFiSunucu sunucusu(80);
geçersiz kurulum()
{
Seri.başla(9600); // seri iletişimi başlat
pinMode(9, ÇIKIŞ); // LED pin modunu ayarla
// kalkanın varlığını kontrol edin:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi kalkanı mevcut değil");
while (doğru); // devam etme
}
String fv = WiFi.firmwareVersion();
if (fv != "1.1.0") {
Serial.println("Lütfen ürün yazılımını yükseltin");
}
// Wifi ağına bağlanmayı deneyin:
while (durum != WL_CONNECTED) {
Serial.print("Adlı Ağa bağlanmaya çalışılıyor: ");
Serial.println(ssid); // ağ adını (SSID) yazdırın;
// WPA/WPA2 ağına bağlanın. Açık veya WEP ağı kullanıyorsanız bu satırı değiştirin:
durum = WiFi.begin(ssid, geçti);
// bağlantı için 10 saniye bekleyin:
gecikme (10000);
}
server.begin(); // web sunucusunu 80 numaralı bağlantı noktasından başlat
printWifiStatus(); // şimdi bağlısınız, bu yüzden durumu yazdırın
}
{
Seri.başla(9600);
strip.setBrightness(PARLAKLIK);
strip.begin();
şerit.göster(); // Tüm pikselleri 'kapalı' olarak başlat
pinMode(micPin, INPUT);
for (int thisReading = 0; thisReading < numReadings; thisReading++) {
okumalar[buOkuma] = 0;
}
}
void gökkuşağı(uint8_t bekleyin) {
uint16_t ben, j;
for(j=0; j<256; j++) {
for(i=0; ben
strip.setPixelColor(i, Wheel((i+j) & 255);
}
şerit.göster();
gecikme(bekle);
}
}
geçersiz görselleştirici(){
toplam = toplam - okumalar[readIndex];
okumalar[readIndex] = analogRead(micPin);
toplam = toplam + okumalar[readIndex];
readIndex = readIndex + 1;
if (readIndex >= numReadings) {
readIndex = 0;
}
ortalama = toplam / numOkumalar;
gecikme(1);
int mikro piksel = (ortalama-100)/5;
Seri.println(mikpiksel);
if (mikpiksel > 0){
{
for(int j=0; j<=mikpiksel; j++)
strip.setPixelColor(j, (mikpiksel*2), 0, (90 mikropiksel), 0);
for(int j=mikpiksel; j<=NUM_LEDS; j++)
strip.setPixelColor(j, 0, 0, 0, 0);
şerit.göster();
}
}
if (mikpiksel < 0) {
for(int j=0; j<=20; j++)
strip.setPixelColor(j, 0, 0, 50, 0);
şerit.göster();
}
}
boşluk döngüsü () {
{
WiFiClient istemcisi = server.available(); // gelen istemcileri dinle
if (istemci) { // bir müşteri alırsanız, Serial.println("yeni müşteri"); // seri porttan bir mesaj yazdır
String currentLine = ""; // istemciden gelen verileri tutmak için bir String yapın
while (client.connected()) { // istemci bağlıyken döngü
if (client.available()) { // istemciden okunacak bayt varsa, karakter c = client.read(); // bir bayt oku, sonra
Seri.write(c); // seri monitörden yazdır
if (c == '\n') { // bayt yeni satır karakteri ise
// geçerli satır boşsa, arka arkaya iki yeni satır karakteriniz olur.
// istemci HTTP isteğinin sonu budur, bu yüzden bir yanıt gönderin:
if (currentLine.length() == 0) {
// HTTP üstbilgileri her zaman bir yanıt koduyla başlar (ör. HTTP/1.1 200 OK)
// ve istemcinin ne olduğunu bilmesi için bir içerik türü, ardından boş bir satır:
client.println("HTTP/1.1 200 TAMAM");
client.println("İçerik tipi:metin/html");
client.println();
// HTTP yanıtının içeriği başlığı takip eder:
client.print("Buraya tıklayın Rainbow efektini açın");
client.print("Buraya tıklayın Görselleştiriciyi Açın");
// HTTP yanıtı başka bir boş satırla biter:
client.println();
// while döngüsünden çık:
kırmak;
} else { // yeni bir satırınız varsa, currentLine'ı temizleyin:
currentLine = "";
}
} else if (c != '\r') { // satır başı karakterinden başka bir şeyiniz varsa, akımLine += c; // bunu currentLine'ın sonuna ekleyin
}
// İstemci isteğinin "GET /H" veya "GET /L" olup olmadığını kontrol edin:
if (currentLine.endsWith("GET /R")) {
Gökkuşağı(10); // Gökkuşağı efekti açıldı
}
if (currentLine.endsWith("GET /V")) {
Görselleştirici(); // Görselleştirici açık
}
}
}
// bağlantıyı kapat:
istemci.durdur();
Serial.println("istemci bağlantısı kesildi");
}
}
geçersiz printWifiStatus() {
// bağlı olduğunuz ağın SSID'sini yazdırın:
Serial.print("SSID:");
Serial.println(WiFi. SSID());
// WiFi kalkanınızın IP adresini yazdırın:
IPAdresi ip = WiFi.localIP();
Serial.print("IP Adresi:");
Seri.println(ip);
// alınan sinyal gücünü yazdır:
uzun rssi = WiFi. RSSI();
Serial.print("sinyal gücü (RSSI):");
Serial.print(rssi);
Serial.println("dBm");
// bir tarayıcıda nereye gidileceğini yazdır:
Serial.print( Bu sayfayı çalışırken görmek için bir tarayıcı açın ve
Seri.println(ip);
}
}
uint32_t Tekerlek(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
dönüş şeridi. Renk(255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
if(WheelPos < 170) {
TekerlekPos -= 85;
dönüş şeridi. Color(0, WheelPos * 3, 255 - WheelPos * 3, 0);
}
TekerlekPos -= 170;
dönüş şeridi. Renk(WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t red(uint32_t c) {
dönüş (c >> 16);
}
uint8_t yeşil(uint32_t c) {
dönüş (c >> 8);
}
uint8_t mavi(uint32_t c) {
dönüş (c);
}
}
//Serial.println(mikpiksel);
}
Adım 4: Lambanın Tabanını 3B Yazdırma
Lamba tabanının 3 boyutlu modeli ölçüldü, tasarlandı ve taban bölmesinin içindeki tüm elektrikli bileşenlere sığacak büyüklükte boyutlarla basıldı.
Adım 5: Led Eklentisi
Led'ler karton ruloya sarılmış ve çift taraflı bant ile yapıştırılmış, alt kısımda telin geçmesi için bir delik açılmıştır.
Adım 6: Lamba Muhafazası
Lamba tabanı ile aynı genişlikte ve LED ataşmanı ile aynı yükseklikte şeffaf bir şişe bulunarak muhafaza yapılmıştır. Bu daha sonra ışığın daha iyi yayılması için kalın kağıtla kaplandı. Alternatif olarak, lamba muhafazası olarak buzlu cam veya yarı saydam plastik tüpler kullanmak mümkündür.
7. Adım: Kurulum
Her şey birbirine yapıştırılmış ve monte edilmiştir. Ve lamba bazı testler için hazırdı!.
Önerilen:
Lazer Müzik Görüntüleyici: 5 Adım
Laser Music Visualizer: En sevdiğiniz şarkıların kulağa nasıl geldiğini bilirsiniz. Artık bir görselleştirici yapabilir ve nasıl göründüklerini görebilirsiniz. Şu şekilde çalışır: Hoparlörünüzden ses çaldığınızda, hoparlörün diyaframı titrer. Bu titreşimler, bağlı olan aynayı hareket ettirir
Müzik Birleştirici: Blok Tipi Dokunmatik Sensörlü Entegre Sanal Müzik Enstrümanı: 4 Adım
Müzik Birleştirici: Blok Tipi Dokunmatik Sensörlü Entegre Sanal Müzik Aleti: Müzik aleti çalmayı öğrenmek isteyen birçok kişi var. Ne yazık ki, bazıları yüksek enstrüman fiyatları nedeniyle başlayamıyor. Buna dayanarak, başlangıç bütçesini azaltmak için entegre sanal müzik enstrümanı sistemi yapmaya karar verdik
Translightion Board (Kontrol Edilebilir Müzik Görüntüleyici): 5 Adım
Translightion Board (Kontrol Edilebilir Müzik Görüntüleyici): Bu özelleştirilebilir ışık denetleyicisi projesiyle müziği göz kamaştırıcı bir ışık gösterisine dönüştürün. DJ'ler, partiler ve 1:1 gösteriler için harika! Aşağıdaki demo güncellendi
LightBox Müzik Görüntüleyici: 5 Adım (Resimlerle)
LightBox Müzik Görselleştirici: LightBox, müziğe uyan güzel ışık desenleri oluşturmak için müziği analiz etmek için telefonunuzun veya tabletinizin yerleşik mikrofonunu kullanır. Uygulamayı başlatmanız, telefonunuzu veya tabletinizi bir ses kaynağının yakınına yerleştirmeniz yeterlidir; kutunuz aşağıdakileri görselleştirecektir
Müzik Görüntüleyici (osiloskop): 4 Adım (Resimlerle)
Müzik Görselleştirici (osiloskop): Bu müzik görselleştirici, müziğinizin deneyimine daha fazla derinlik katmanın mükemmel bir yolunu sunar ve oluşturulması oldukça kolaydır. Ayrıca bazı uygulamalar için gerçek bir osiloskop olarak da faydalı olabilir: - eski bir crt (neredeyse hepsi b&am