İçindekiler:

Akıllı Lamba (TCfD) - Gökkuşağı + Müzik Görüntüleyici: 7 Adım (Resimlerle)
Akıllı Lamba (TCfD) - Gökkuşağı + Müzik Görüntüleyici: 7 Adım (Resimlerle)

Video: Akıllı Lamba (TCfD) - Gökkuşağı + Müzik Görüntüleyici: 7 Adım (Resimlerle)

Video: Akıllı Lamba (TCfD) - Gökkuşağı + Müzik Görüntüleyici: 7 Adım (Resimlerle)
Video: BİM'den 65 TL'ye aldığımız akıllı ampul, Xiaomi devrini bitirebilir! 2024, Temmuz
Anonim
Image
Image
Devre şeması
Devre şeması

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

Lambanın Tabanını 3d Yazdırma
Lambanın Tabanını 3d 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 Eki
Led Eki

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 Muhafazası
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

Kurmak
Kurmak

Her şey birbirine yapıştırılmış ve monte edilmiştir. Ve lamba bazı testler için hazırdı!.

Önerilen: