Spisu treści:
- Krok 1: Potrzebny materiał
- Krok 2: Schemat obwodu
- Krok 3: Kod Arduino
- Krok 4: drukowanie 3d podstawy lampy
- Krok 5: Załącznik Led
- Krok 6: Obudowa lampy
- Krok 7: Konfiguracja
Wideo: Inteligentna lampa (TCfD) - Rainbow + Wizualizator muzyki: 7 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
Ten projekt jest wykonywany na kursie Technologia projektowania koncepcyjnego w TUDelft
Produktem końcowym jest podstawowa lampa LED ESP-32 i jest podłączona do serwera. W przypadku prototypu lampa pełni dwie funkcje; efekt tęczy, który emituje kojący, zmieniający kolor blask w kierunku otoczenia, a po drugie wizualizator dźwięku, w którym piksele LED „tańczą” zgodnie z poziomem dźwięku. System jest podłączony do Wi-Fi, a użytkownik może wybrać, jaki efekt chce uzyskać od lampy za pośrednictwem WIFI.
Tani mikrochip ESP-32 zapewnia nam potężne procesory, wbudowany czujnik Halla, czujnik temperatury, czujnik dotykowy, a także możliwość Wi-Fi i bluetooth. Dzięki temu, podczas gdy do tego projektu wybrano tylko dwa efekty, wpływ tej „inteligentnej” lampy jest nieograniczony. Służyłby do wskazywania użytkownikowi pogody lub temperatury w pomieszczeniu, sama lampa może działać jako wyzwalacz alarmu lub może dawać uspokajającą poświatę słońca obok łóżka, symulując wschód słońca, zapewniając przyjemne przebudzenie.
Krok 1: Potrzebny materiał
Arduino esp32
Czujnik dźwięku
Czterokierunkowy dwukierunkowy konwerter poziomów logicznych
Neopikselowa dioda LED 2m 60 diod/m
Przewody połączeniowe
Kabel micro USB z adapterem
połączenie internetowe
Krok 2: Schemat obwodu
Schemat obwodu został narysowany i obwód został wykonany zgodnie z podanymi w
schemat poniżej.
Krok 3: Kod Arduino
Tutaj najpierw powstał kod wizualizera. Następnie dwa przykładowe kody
;„test początkowy neoplxel RGBW”; oraz „simpleWebServerWifi” został zmodyfikowany i zintegrowany z kodem wizualizera. Chociaż kod wciąż jest czasami wadliwy (od czasu do czasu zapala się losowa dioda). Kolejna iteracja kodu (gdy zdążymy) zostanie zaktualizowana.
#włączać
#ifdef _AVR_
#włączać
#endif
const int numReadings = 5;
odczyty int[numReadings];
int odczyt indeksu = 0;
całkowita = 0;
średnia int = 0;
int micPin = 33;
#zdefiniuj PIN 4
#define NUM_LEDS 120
#define JASNOŚĆ 100
Pasek Adafruit_NeoPixel = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);
bajt 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 };
#włączać
#włączać
char ssid = "twojaSieć"; // SSID sieci (nazwa)
char pass = "tajne hasło"; // twoje hasło sieciowe
int keyIndex = 0; // Twój klucz sieciowy Numer indeksu (potrzebny tylko dla WEP)
stan int = WL_IDLE_STATUS;
Serwer WiFiServer(80);
pusta konfiguracja()
{
Serial.początek(9600); // zainicjuj komunikację szeregową
pinMode(9, WYJŚCIE); // ustaw tryb pinów LED
// sprawdź obecność tarczy:
jeśli (WiFi.status() == WL_NO_SHIELD) {
Serial.println("Brak osłony WiFi");
podczas (prawda); // nie kontynuuj
}
Ciąg fv = WiFi. Wersja oprogramowania układowego();
if (fv != "1.1.0") {
Serial.println("Proszę zaktualizować oprogramowanie");
}
// próba połączenia z siecią Wifi:
while (stan != WL_CONNECTED) {
Serial.print("Próba połączenia z siecią o nazwie: ");
Serial.println(ssid); // drukuj nazwę sieci (SSID);
// Połącz z siecią WPA/WPA2. Zmień tę linię, jeśli używasz sieci otwartej lub WEP:
status = WiFi.begin(ssid, pass);
// poczekaj 10 sekund na połączenie:
opóźnienie (10000);
}
serwer.początek(); // uruchom serwer WWW na porcie 80
printWifiStatus(); // masz teraz połączenie, więc wydrukuj status
}
{
Serial.początek(9600);
strip.setJasność(JASNOŚĆ);
strip.początek();
strip.pokaż(); // Zainicjuj wszystkie piksele na „wyłączone”
pinMode (micPin, INPUT);
for (int toCzytanie = 0; toCzytanie < numReadings; toCzytanie++) {
odczyty[tenOdczyt] = 0;
}
}
void rainbow(uint8_t czekaj) {
uint16_ti, j;
for(j=0; j<256; j++) {
dla(i=0; i
strip.setPixelColor(i, Wheel((i+j) & 255));
}
strip.pokaż();
opóźnienie (czekaj);
}
}
wizualizator pustki(){
total = total - odczyty[readIndex];
odczyty[odczytIndeks] = analogRead(micPin);
suma = suma + odczyty[odczytIndeks];
czytajIndeks = czytajIndeks + 1;
if (readIndex >= numReadings) {
odczyt indeksu = 0;
}
średnia = suma / liczbaOdczytów;
opóźnienie(1);
int mikpiksel = (średnia-100)/5;
Serial.println(mikpiksel);
jeśli (mikropiksel > 0){
{
for(int j=0; j<=mikpiksel; j++)
strip.setPixelColor(j, (mikpiksel*2), 0, (90-mikropikseli), 0);
for(int j=mikpiksel; j<=LICZBA_LED; j++)
strip.setPixelColor(j, 0, 0, 0, 0);
strip.pokaż();
}
}
jeśli (mikropiksel < 0) {
for(int j=0; j<=20; j++)
strip.setPixelColor(j, 0, 0, 50, 0);
strip.pokaż();
}
}
pusta pętla () {
{
Klient WiFiClient = serwer.dostępny(); // nasłuchuj przychodzących klientów
if (client) { // jeśli masz klienta, Serial.println("nowy klient"); // wypisz wiadomość na porcie szeregowym
Ciąg currentLine = ""; // utwórz ciąg do przechowywania danych przychodzących od klienta
while (client.connected()) { // pętla, gdy klient jest podłączony
if (client.available()) { // jeśli są bajty do odczytania z klienta, char c = klient.odczyt(); // odczytaj bajt, to
Serial.zapis(c); // wydrukuj to na monitorze szeregowym
if (c == '\n') { // jeśli bajt jest znakiem nowej linii
// jeśli bieżąca linia jest pusta, otrzymujesz dwa znaki nowej linii z rzędu.
// to koniec żądania HTTP klienta, więc wyślij odpowiedź:
if (bieżącaLinia.length() == 0) {
// Nagłówki HTTP zawsze zaczynają się od kodu odpowiedzi (np. HTTP/1.1 200 OK)
// i typ zawartości, aby klient wiedział, co nadchodzi, a następnie pusta linia:
klient.println("HTTP/1.1 200 OK");
client.println("Typ-treści:tekst/html");
klient.println();
// treść odpowiedzi HTTP następuje po nagłówku:
client.print("Kliknij tutaj Włącz efekt tęczy");
client.print("Kliknij tutaj Włącz wizualizator");
// Odpowiedź HTTP kończy się kolejną pustą linią:
klient.println();
// wyrwij się z pętli while:
przerwa;
} else { // jeśli masz znak nowej linii, wyczyść bieżący wiersz:
bieżącaLinia = "";
}
} else if (c != '\r') { // jeśli masz cokolwiek innego niż znak powrotu karetki, bieżącaLinia += c; // dodaj go na koniec bieżącej linii
}
// Sprawdź, czy żądanie klienta to „GET /H” czy „GET /L”:
if (currentLine.endsWith("GET /R")) {
Tęcza(10); // Efekt tęczy włączony
}
if (currentLine.endsWith("GET /V")) {
Wizualizator(); // Wizualizator jest włączony
}
}
}
// zamknij połączenie:
klient.stop();
Serial.println("klient odłączony");
}
}
void printWifiStatus() {
// wydrukuj identyfikator SSID sieci, do której jesteś podłączony:
Serial.print("SSID: ");
Serial.println(WiFi. SSID());
// wydrukuj adres IP tarczy WiFi:
AdresIP ip = WiFi.localIP();
Serial.print("Adres IP: ");
Serial.println(ip);
// drukuj siłę odbieranego sygnału:
długi rssi = WiFi. RSSI();
Serial.print("siła sygnału (RSSI):");
Serial.print(rssi);
Serial.println("dBm");
// drukuj gdzie iść w przeglądarce:
Serial.print( Aby zobaczyć tę stronę w akcji, otwórz przeglądarkę na
Serial.println(ip);
}
}
uint32_t Wheel(byte WheelPos) {
Pozycja koła = 255 - Pozycja koła;
if(Pozycja Koła < 85) {
return strip. Color(255 - WheelPos * 3, 0, WheelPos * 3, 0);
}
if(Pozycja Koła < 170) {
Pozycja koła -= 85;
return strip. Color(0, Poz.koła * 3, 255 - Poz.koła * 3, 0);
}
Pozycja koła -= 170;
return strip. Color(WheelPos * 3, 255 - WheelPos * 3, 0, 0);
}
uint8_t czerwony(uint32_t c) {
powrót (c >> 16);
}
uint8_t zielony(uint32_t c) {
powrót (c >> 8);
}
uint8_t niebieski(uint32_t c) {
powrót (c);
}
}
//Serial.println(mikpiksel);
}
Krok 4: drukowanie 3d podstawy lampy
Zmierzono, zaprojektowano i wydrukowano trójwymiarowy model podstawy lampy o wymiarach wystarczająco dużych, aby zmieścić wszystkie elementy elektryczne w komorze podstawy.
Krok 5: Załącznik Led
Ledy zostały nawinięte w tekturową rolkę i przymocowane taśmą dwustronną, w dolnej części wywiercony został otwór na przewód
Krok 6: Obudowa lampy
Obudowa została wykonana poprzez znalezienie przezroczystej butelki o podobnej szerokości co podstawa lampy i wysokości co nasadka LED. Następnie pokryto go grubym papierem dla lepszego rozproszenia światła. Alternatywnie jako obudowa lampy można użyć matowego szkła lub półprzezroczystych plastikowych rurek.
Krok 7: Konfiguracja
Wszystko zostało sklejone i zmontowane. A lampa była gotowa do testów!.
Zalecana:
Wizualizator audio z nieadresowalną taśmą LED RGB: 6 kroków (ze zdjęciami)
Wizualizator dźwiękowy nieadresowalnej taśmy LED RGB: Przez jakiś czas miałem wokół szafki telewizyjnej taśmę LED 12V RGB, którą steruje nudny sterownik LED, który pozwala mi wybrać jeden z 16 wstępnie zaprogramowanych kolorów! dużo muzyki, która mnie motywuje, ale oświetlenie po prostu nie
Wizualizator sygnału kieszonkowego (oscyloskop kieszonkowy): 10 kroków (ze zdjęciami)
Wizualizator sygnału kieszonkowego (oscyloskop kieszonkowy): Witam wszystkich, wszyscy robimy tak wiele rzeczy każdego dnia. Do każdej pracy tam, gdzie potrzebne są narzędzia. To jest do robienia, mierzenia, wykańczania itp. Tak więc pracownicy elektronicy potrzebują narzędzi, takich jak lutownica, multimetr, oscyloskop itp
Wizualizator serca - Zobacz bicie serca: 8 kroków (ze zdjęciami)
Wizualizator serca | Zobacz bicie serca: Wszyscy albo czuliśmy, albo słyszeliśmy bicie naszego serca, ale niewielu z nas to widziało. To była myśl, która sprawiła, że zacząłem ten projekt. Prosty sposób, aby wizualnie zobaczyć bicie serca za pomocą czujnika serca, a także nauczyć Cię podstaw o
Wizualizator muzyki z Arduino: 5 kroków
Wizualizator muzyki z Arduino: interaktywny wizualizator muzyki Elementy LM338T x5Potencjometr x2 (1k i 10k)Dioda 1N4006 x5Kondensator x2 (1uF i 10uF)Rezystory x3 (416, 10k i 1k)Rozdzielacz Aux
Wizualizator muzyki Nixie Tube: 10 kroków (ze zdjęciami)
Wizualizator muzyki Nixie Tube: hipnotyzujący wizualizator muzyki inspirowany tymi małymi paskami na górze iTunes. Jako wyświetlacz zastosowano czternaście rosyjskich rurek barografowych IN-13 Nixie. Długość, na jaką zapala się każda rurka nixie, reprezentuje objętość określonej częstotliwości w mu