Мазмуну:

Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 кадам (Сүрөттөр менен)
Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 кадам (Сүрөттөр менен)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 кадам (Сүрөттөр менен)

Video: Smart Lamp (TCfD) - Rainbow + Music Visualizer: 7 кадам (Сүрөттөр менен)
Video: LG Life’s Good Award : Conference - Full | LG 2024, Июль
Anonim
Image
Image
Райондук диаграмма
Райондук диаграмма

Бул долбоор TUDelftтеги Концепт Дизайн технологиясы курсу үчүн жасалган

Акыркы продукт-бул ESP-32 базалык LED чырагы жана серверге туташкан. Прототип үчүн чырактын эки функциясы бар; асан -үсөн эффекти, анын тегерегине карай жылтырак түс берет, экинчиден, LED пикселдери үн деңгээлине жараша "бийлейт". Система Wi -Fiга туташкан жана колдонуучу чырактан WIFI аркылуу каалаган эффектти тандай алат.

Арзан ESP-32 микрочипи бизге күчтүү процессорлорду, камтылган зал сенсорун, температура сенсорун, сенсордук сенсорду, ошондой эле wifi жана bluetooth мүмкүнчүлүктөрүн берет. Муну менен, бул долбоорго эки гана эффект тандалганына карабастан, бул "акылдуу" чырактын таасири чексиз. Бул колдонуучуга аба ырайын же бөлмө температурасын көрсөтүү үчүн колдонулат, чырак өзү ойготкуч катары иштей алат же керебеттин жанында күндүн чыгышын окшоштуруп, күндүн жарыгын жакшы ойготуу үчүн берет.

1 -кадам: Материал керек

Arduino esp32

Үн сенсору

Төрт тараптуу эки багыттуу логикалык деңгээлди алмаштыргыч

Neopixel 2м 60 лед/м жетти

Өткөргүч зымдар

Адаптери бар микро USB кабели

Интернет байланышы

2 -кадам: Райондук диаграмма

Райондук диаграмма түзүлүп, мында берилгендей схема түзүлдү

төмөндөгү диаграмма.

3 -кадам: Arduino коду

Бул жерде биринчи кезекте визуализатор коду жасалган. Андан кийин, эки мисал коду

; "Neoplxel RGBW starndtest"; жана "simpleWebServerWifi" визуализатор кодунун ичинде өзгөртүлүп, интеграцияланган. Код дагы деле кээде ката болсо да (туш келди LEDдин жарыгы маал -маалы менен). Коддун кийинки кайталанышы (биз жетиштүү убакыт алгандан кийин) жаңыртылат.

#кошуу

#ifdef _AVR_

#кошуу

#endif

const int numReadings = 5;

int readings [numReadings];

int readIndex = 0;

int total = 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 = "yourNetwork"; // сиздин тармак SSID (аты)

char pass = "secretPassword"; // сиздин тармак сырсөзүңүз

int keyIndex = 0; // тармак ачкычы Индекстин номери (WEP үчүн гана керек)

int абалы = WL_IDLE_STATUS;

WiFiServer сервери (80);

жараксыз орнотуу ()

{

Serial.begin (9600); // сериялык байланышты баштоо

pinMode (9, OUTPUT); // LED пин режимин коюңуз

// калкан бар экенин текшерүү:

эгер (WiFi.status () == WL_NO_SHIELD) {

Serial.println ("WiFi калканы жок");

while (true); // улантпа

}

String fv = WiFi.firmwareVersion ();

эгер (fv! = "1.1.0") {

Serial.println ("Камтылган программаны жаңыртыңыз");

}

// Wifi тармагына туташуу аракети:

while (status! = WL_CONNECTED) {

Serial.print ("Бул тармакка туташуу аракети:");

Serial.println (ssid); // тармактын атын (SSID) басып чыгаруу;

// WPA/WPA2 тармагына туташуу. Ачык же WEP тармагын колдонсоңуз, бул линияны өзгөртүңүз:

status = WiFi.begin (ssid, pass);

// туташуу үчүн 10 секунд күтө туруңуз:

кечигүү (10000);

}

server.begin (); // 80 -портунда веб -серверди баштоо

printWifiStatus (); // сиз азыр туташтыңыз, андыктан статусту басып чыгарыңыз

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Бардык пикселдерди "өчүрүү" үчүн баштоо

pinMode (micPin, INPUT);

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

окуулар [thisReading] = 0;

}

}

бош асан -үсөн (uint8_t күтүү) {

uint16_t i, j;

үчүн (j = 0; j <256; j ++) {

үчүн (i = 0; i

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

}

strip.show ();

кечиктирүү (күтүү);

}

}

жараксыз визуализатор () {

total = total - окуулар [readIndex];

окуулар [readIndex] = analogRead (micPin);

total = total + readings [readIndex];

readIndex = readIndex + 1;

if (readIndex> = numReadings) {

readIndex = 0;

}

орточо = жалпы / numReadings;

кечигүү (1);

int micpixel = (орточо-100)/5;

Serial.println (микс пиксел);

эгер (микс пиксел> 0) {

{

үчүн (int j = 0; j <= микпиксел; j ++)

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

үчүн (int j = micpixel; j <= NUM_LEDS; j ++)

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

strip.show ();

}

}

эгер (микс <0) {

үчүн (int j = 0; j <= 20; j ++)

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

strip.show ();

}

}

void loop () {

{

WiFiClient клиенти = server.available (); // келген кардарларды угуңуз

if (клиент) {// эгерде сиз кардар алсаңыз, Serial.println ("жаңы кардар"); // сериялык порттон билдирүү басып чыгаруу

String currentLine = ""; // кардардан келген маалыматтарды кармап туруу үчүн Стринг жасаңыз

while (client.connected ()) {// loop кардар туташып турганда

if (client.available ()) {// эгерде кардардан окула турган байттар болсо, char c = client.read (); // анда бир байтты окуңуз

Serial.write (c); // сериялык мониторду басып чыгарыңыз

if (c == '\ n') {// if byte a newline character

// эгерде учурдагы сап бош болсо, сизде эки жаңы сап белгиси бар.

// бул кардар 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 ("Бул жерге чыкылдатып, Rainbow эффектин күйгүзүңүз");

client.print ("Бул жерди чыкылдатыңыз Visualizerди күйгүзүңүз");

// HTTP жообу башка бош сап менен аяктайт:

client.println ();

// while циклинен чыгуу:

тыныгуу;

} else {// эгер сизде жаңы сап болсо, анда CurrentLine'ди тазалаңыз:

currentLine = "";

}

} else if (c! = '\ r') {// эгерде сизде вагондун артка кайтуу белгисинен башка эч нерсе жок болсо, currentLine += c; // аны currentLine аягына кошуу

}

// Кардардын суранычы "GET /H" же "GET /L" болгонун текшериңиз:

эгер (currentLine.endsWith ("Get /R")) {

Радуга (10); // Радуга таасири күйгүзүлдү

}

эгер (currentLine.endsWith ("GET /V")) {

Visualizer (); // Визуализатор күйгүзүлдү

}

}

}

// байланышты жабуу:

client.stop ();

Serial.println ("кардар ажыратылды");

}

}

жараксыз 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) {

return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0);

}

эгер (WheelPos <170) {

WheelPos -= 85;

return strip. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0);

}

WheelPos -= 170;

кайра тилке. Color (WheelPos * 3, 255 - WheelPos * 3, 0, 0);

}

uint8_t кызыл (uint32_t c) {

кайтуу (c >> 16);

}

uint8_t жашыл (uint32_t c) {

кайтуу (c >> 8);

}

uint8_t көк (uint32_t c) {

кайтуу (с);

}

}

//Serial.println(micpixel);

}

4 -кадам: Чырактын базасын 3d басып чыгаруу

3d лампанын базасын басып чыгаруу
3d лампанын базасын басып чыгаруу

Чырак базасынын 3d модели өлчөнүп, иштелип чыккан жана базалык бөлүмдүн ичиндеги бардык электр компоненттерине туура келгидей өлчөмдө басылган.

5 -кадам: Жетектөөчү тиркеме

Жетектөөчү тиркеме
Жетектөөчү тиркеме

Леддер картон түрмөккө оролуп, эки тараптуу скотч менен бекитилген, астынкы бөлүгүндө зымды өткөрүү үчүн тешик бургуланган

6 -кадам: Лампа корпусу

Лампа корпусу
Лампа корпусу

Тиркеме LED тиркемесинин туурасы чырактын негизине жана бийиктигине окшош тунук бөтөлкөнү табуу аркылуу жасалды. Бул жарыктын жакшы таралышы үчүн калың кагаз менен жабылган. Же болбосо, лампа корпусу катары аяздуу айнекти же тунук пластикалык түтүктөрдү колдонсо болот.

7 -кадам: Орнотуу

Жайгашуу
Жайгашуу

Бардыгы жабыштырылып, чогултулду. Ал эми лампа кээ бир сыноолорго даяр болчу!

Сунушталууда: