Სარჩევი:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 ნაბიჯი (სურათებით)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 ნაბიჯი (სურათებით)

ვიდეო: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 ნაბიჯი (სურათებით)

ვიდეო: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 ნაბიჯი (სურათებით)
ვიდეო: LG Life’s Good Award : Conference - Full | LG 2024, ნოემბერი
Anonim
Image
Image
Წრიული დიაგრამა
Წრიული დიაგრამა

ეს პროექტი კეთდება კურსისთვის ტექნოლოგია კონცეფციის დიზაინში TUDelft– ში

საბოლოო პროდუქტი არის ESP-32 ბაზის LED ნათურა და დაკავშირებულია სერვერთან. პროტოტიპისთვის ნათურას აქვს ორი ფუნქცია; ცისარტყელას ეფექტი, რომელიც ასხივებს დამამშვიდებელ ფერს, რომელიც ანათებს მის გარემოს და მეორეც ხმის ვიზუალიზატორი, სადაც LED პიქსელები "ცეკვავენ" ხმის დონის შესაბამისად. სისტემა დაკავშირებულია wifi– სთან და მომხმარებელს შეუძლია აირჩიოს რა ეფექტი სურს ნათურისგან WIFI– ს საშუალებით.

იაფი ESP-32 მიკროჩიპი გვაძლევს მძლავრ პროცესორებს, ჩაშენებული დარბაზის სენსორს, ტემპერატურის სენსორს, შეხების სენსორს და ასევე wifi და bluetooth შესაძლებლობებს. ამასთან, მიუხედავად იმისა, რომ ამ პროექტისთვის მხოლოდ ორი ეფექტი იქნა არჩეული, ამ "ჭკვიანი" ნათურის მნიშვნელობა უსაზღვროა. ის გამოიყენებოდა მომხმარებლისთვის ამინდის ან ოთახის ტემპერატურის დასანიშნად, თავად ნათურა შეიძლება მოქმედებდეს როგორც განგაშის გამომწვევი, ან მისცეს დამამშვიდებელი მზის შუქი თქვენი საწოლის გვერდით, მზის ამოსვლის სიმულაციისთვის სასიამოვნო გაღვიძებისთვის.

ნაბიჯი 1: საჭირო მასალა

Arduino esp32

ხმის სენსორი

ოთხმხრივი ორმხრივი ორმხრივი ლოგიკური დონის კონვერტორი

ნეოპიქსელი led 2m 60 led/m

ჯუმბერის მავთულები

მიკრო USB კაბელი ადაპტერთან ერთად

ინტერნეტ კავშირი

ნაბიჯი 2: სქემის დიაგრამა

სქემის დიაგრამა შედგენილია და სქემა შედგენილია შესაბამისად, როგორც ეს მოცემულია

დიაგრამა ქვემოთ.

ნაბიჯი 3: Arduino კოდი

აქ, პირველ რიგში, ვიზუალიზატორის კოდი გაკეთდა. შემდეგ, ორი მაგალითი კოდი

; "Neoplxel RGBW starndtest"; და “simpleWebServerWifi” შეიცვალა და ინტეგრირებულია ვიზუალიზატორის კოდში. მიუხედავად იმისა, რომ კოდი ჯერ კიდევ შეცდომაშია (შემთხვევითი led ნათურა დროდადრო ანათებს). კოდის მომდევნო გამეორება (მას შემდეგ რაც საკმარისი დრო გვექნება) განახლდება.

#ჩართეთ

#ifdef _AVR_

#ჩართეთ

#დაასრულე თუ

const int numReadings = 5;

int საკითხები [numReadings];

int readIndex = 0;

int სულ = 0;

int საშუალო = 0;

int micPin = 33;

#განსაზღვრეთ PIN 4

#განსაზღვრეთ NUM_LEDS 120

#განსაზღვრეთ სიკაშკაშე 100

Adafruit_NeoPixel ზოლები = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

ბაიტი 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 };

#ჩართეთ

#ჩართეთ

char ssid = "თქვენი ქსელი"; // თქვენი ქსელის SSID (სახელი)

char pass = "secretPassword"; // თქვენი ქსელის პაროლი

int keyIndex = 0; // თქვენი ქსელის გასაღების ინდექსის ნომერი (საჭიროა მხოლოდ WEP– ისთვის)

int სტატუსი = WL_IDLE_STATUS;

WiFiServer სერვერი (80);

ბათილად დაყენება ()

{

სერიული.დაწყება (9600); // სერიული კომუნიკაციის ინიციალიზაცია

pinMode (9, OUTPUT); // დააყენეთ LED pin რეჟიმი

// შეამოწმეთ ფარის არსებობა:

თუ (WiFi.status () == WL_NO_SHIELD) {

Serial.println ("WiFi ფარი არ არის");

ხოლო (ჭეშმარიტი); // არ გააგრძელე

}

სიმებიანი fv = WiFi.firmwareVersion ();

თუ (fv! = "1.1.0") {

Serial.println ("გთხოვთ განაახლოთ firmware");

}

// Wifi ქსელთან დაკავშირების მცდელობა:

ხოლო (სტატუსი! = WL_CONNECTED) {

Serial.print ("ქსელთან დაკავშირების მცდელობა დასახელებულია:");

Serial.println (ssid); // დაბეჭდეთ ქსელის სახელი (SSID);

// დაუკავშირდით WPA/WPA2 ქსელს. შეცვალეთ ეს ხაზი, თუ იყენებთ ღია ან WEP ქსელს:

სტატუსი = WiFi.bigin (ssid, pass);

// დაელოდეთ 10 წამი კავშირისთვის:

დაგვიანება (10000);

}

server.begin (); // ვებ სერვერის დაწყება 80 პორტზე

printWifiStatus (); // თქვენ ახლა დაკავშირებული ხართ, ასე რომ დაბეჭდეთ სტატუსი

}

{

სერიული.დაწყება (9600);

strip.setBrightness (BRIGHTNESS);

ზოლები. დაწყება ();

ზოლები. ჩვენება (); // ყველა პიქსელის ინიციალიზაცია "გამორთვის"

pinMode (micPin, INPUT);

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

საკითხავი [thisReading] = 0;

}

}

ბათილი ცისარტყელა (uint8_t ლოდინი) {

uint16_t i, j;

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

for (i = 0; i

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

}

ზოლები. ჩვენება ();

დაგვიანება (ლოდინი);

}

}

void visualizer () {

სულ = სულ - კითხვები [readIndex];

კითხვები [readIndex] = analogRead (micPin);

სულ = სულ + კითხვა [readIndex];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {

readIndex = 0;

}

საშუალო = სულ / რიცხვი;

დაგვიანება (1);

int micpixel = (საშუალოდ -100)/5;

Serial.println (მიკპიქსელი);

თუ (მიკპიქსელი> 0) {

{

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

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

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

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

ზოლები. ჩვენება ();

}

}

თუ (მიკპიქსელი <0) {

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

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

ზოლები. ჩვენება ();

}

}

ბათილი მარყუჟი () {

{

WiFiClient client = server.available (); // მოუსმინეთ შემომავალ კლიენტებს

თუ (კლიენტი) {// თუ მიიღებთ კლიენტს, Serial.println ("ახალი კლიენტი"); // დაბეჭდეთ შეტყობინება სერიული პორტიდან

სიმებიანი currentLine = ""; // გააკეთეთ სიმები კლიენტისგან შემოსული მონაცემების შესანახად

while (client.connected ()) {// მარყუჟი სანამ კლიენტი დაკავშირებულია

if (client.available ()) {// თუ კლიენტისგან წაკითხული ბაიტია, char c = client.read (); // წაიკითხე ბაიტი, მაშინ

სერიული. დაწერეთ (გ); // დაბეჭდე სერიული მონიტორი

if (c == '\ n') {// თუ ბაიტი ახალი ხაზის სიმბოლოა

// თუ მიმდინარე ხაზი ცარიელია, თქვენ მიიღეთ ორი ახალი ხაზის სიმბოლო ზედიზედ.

// ეს არის კლიენტის HTTP მოთხოვნის დასასრული, ასე რომ გამოაგზავნეთ პასუხი:

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

// HTTP სათაურები ყოველთვის იწყება პასუხის კოდით (მაგ. HTTP/1.1 200 OK)

// და შინაარსის ტიპი, რათა კლიენტმა იცოდეს რა მოდის, შემდეგ ცარიელი ხაზი:

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

client.println ("შინაარსის ტიპი: ტექსტი/html");

client.println ();

// HTTP პასუხის შინაარსი მიჰყვება სათაურს:

client.print ("დააწკაპუნეთ აქ ჩართეთ ცისარტყელას ეფექტი");

client.print ("დააწკაპუნეთ აქ ჩართეთ ვიზუალიზატორი");

// HTTP პასუხი მთავრდება სხვა ცარიელი ხაზით:

client.println ();

// გარღვევა while მარყუჟიდან:

შესვენება;

} else {// თუ თქვენ გაქვთ ახალი ხაზი, მაშინ გაასუფთავეთ currentLine:

currentLine = "";

}

} else if (c! = '\ r') {// თუ თქვენ გაქვთ რაიმე სხვა გარდა ვაგონის დაბრუნების სიმბოლო, currentLine += c; // დაამატე მიმდინარე ხაზის ბოლოს

}

// შეამოწმეთ კლიენტის მოთხოვნა იყო "GET /H" ან "GET /L":

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

ცისარტყელა (10); // ცისარტყელას ეფექტი ჩართულია

}

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

ვიზუალიზატორი (); // ვიზუალიზატორი ჩართულია

}

}

}

// კავშირის დახურვა:

client.stop ();

Serial.println ("კლიენტი გათიშულია");

}

}

void printWifiStatus () {

// დაბეჭდეთ ქსელის SSID, რომელთანაც ხართ დაკავშირებული:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// დაბეჭდეთ თქვენი WiFi ფარის IP მისამართი:

IPAddress ip = WiFi.localIP ();

Serial.print ("IP მისამართი:");

Serial.println (ip);

// დაბეჭდეთ მიღებული სიგნალის სიძლიერე:

გრძელი rssi = WiFi. RSSI ();

Serial.print ("სიგნალის სიძლიერე (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// დაბეჭდეთ სად წავიდეთ ბრაუზერში:

Serial.print ("ამ გვერდის მოქმედების სანახავად გახსენით ბრაუზერი https://" - ზე);

Serial.println (ip);

}

}

uint32_t ბორბალი (ბაიტი WheelPos) {

WheelPos = 255 - WheelPos;

თუ (WheelPos <85) {

დაბრუნების ზოლები. ფერი (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

თუ (WheelPos <170) {

WheelPos -= 85;

დაბრუნების ზოლი. ფერი (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

დაბრუნების ზოლი. ფერი (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t წითელი (uint32_t გ) {

დაბრუნება (c >> 16);

}

uint8_t მწვანე (uint32_t გ) {

დაბრუნება (c >> 8);

}

uint8_t ლურჯი (uint32_t გ) {

დაბრუნება (გ);

}

}

// სერიული. ბეჭდვა (მიკპიქსელი);

}

ნაბიჯი 4: ლამპარის ბაზის 3D ბეჭდვა

ლამპის ბაზის 3D ბეჭდვა
ლამპის ბაზის 3D ბეჭდვა

ნათურის ბაზის 3D მოდელი გაზომეს, შეიმუშავეს და დაბეჭდეს იმ ზომებით, რომელიც საკმარისად დიდია იმისათვის, რომ მოთავსდეს ყველა ელექტრო კომპონენტი ბაზის განყოფილებაში.

ნაბიჯი 5: Led დანართი

Led დანართი
Led დანართი

Led's იყო ჩასმული მუყაოს რულეტში და მიმაგრებული იყო ორმხრივი ლენტის გამოყენებით, ქვედა ნაწილში გაბურღული იყო ხვრელი მავთულის გასავლელად

ნაბიჯი 6: ლამპარის დანართი

ლამპარის დანართი
ლამპარის დანართი

დანართი გაკეთდა გამჭვირვალე ბოთლის პოვნით, რომლის სიგანეა ნათურის ფუძე და სიმაღლე, როგორც LED დანართი. შემდეგ იგი დაფარული იყო სქელი ქაღალდით სინათლის უკეთესი გავრცელებისთვის. როგორც ალტერნატივა, შესაძლებელია გამოიყენოთ ყინვაგამძლე მინა ან გამჭვირვალე პლასტმასის მილები, როგორც ნათურა.

ნაბიჯი 7: დაყენება

Აწყობა
Აწყობა

ყველაფერი შეკრული და აწყობილი იყო. და ნათურა მზად იყო გამოცდისთვის !.

გირჩევთ: