Πίνακας περιεχομένων:

Έξυπνος λαμπτήρας (TCfD) - Rainbow + Music Visualizer: 7 βήματα (με εικόνες)
Έξυπνος λαμπτήρας (TCfD) - Rainbow + Music Visualizer: 7 βήματα (με εικόνες)

Βίντεο: Έξυπνος λαμπτήρας (TCfD) - Rainbow + Music Visualizer: 7 βήματα (με εικόνες)

Βίντεο: Έξυπνος λαμπτήρας (TCfD) - Rainbow + Music Visualizer: 7 βήματα (με εικόνες)
Βίντεο: TechOn GR έξυπνος λαμπτήρας Wi-Fi LED TAPO L510E στα 10 ευρώ!! 2024, Νοέμβριος
Anonim
Image
Image
Διάγραμμα κυκλώματος
Διάγραμμα κυκλώματος

Αυτό το έργο γίνεται για το μάθημα Technology for Concept Design στο TUDelft

Το τελικό προϊόν είναι μια λυχνία LED βάσης ESP-32 και είναι συνδεδεμένη με το διακομιστή. Για το πρωτότυπο, η λάμπα έχει δύο λειτουργίες. ένα εφέ ουράνιου τόξου που εκπέμπει μια καταπραϋντική λάμψη που μετατοπίζει τη λάμψη προς το περιβάλλον του και δεύτερον οπτικοποιεί τον ήχο όπου τα εικονοστοιχεία LED «χορεύουν» ανάλογα με τα επίπεδα ήχου. Το σύστημα είναι συνδεδεμένο σε wifi και ο χρήστης μπορεί να επιλέξει το αποτέλεσμα που θέλει από τη λάμπα μέσω WIFI.

Το φθηνό μικροτσίπ ESP-32 μας παρέχει ισχυρούς επεξεργαστές, ενσωματωμένο αισθητήρα αίθουσας, αισθητήρα θερμοκρασίας, αισθητήρα αφής και επίσης δυνατότητα wifi και bluetooth. Με αυτό, Ενώ επιλέχθηκαν μόνο δύο εφέ για αυτό το έργο, η σημασία αυτής της «έξυπνης» λάμπας είναι απεριόριστη. Θα χρησιμοποιηθεί για να δείξει τον καιρό στον χρήστη ή τη θερμοκρασία του δωματίου, η ίδια η λάμπα μπορεί να λειτουργήσει ως έναυσμα συναγερμού ή μπορεί να δώσει μια χαλαρωτική λάμψη δίπλα στο κρεβάτι σας προσομοιώνοντας την ανατολή για μια ωραία εμπειρία αφύπνισης.

Βήμα 1: Απαιτείται υλικό

Arduino esp32

Αισθητήρας ήχου

Μετατροπέας επιπέδου λογικής τεσσάρων κατευθύνσεων

Neopixel led 2m 60 led/m

Καλώδια βραχυκυκλωτήρων

Καλώδιο Micro USB με προσαρμογέα

σύνδεση στο Internet

Βήμα 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

#define NUM_LEDS 120

#define BRIGHTNESS 100

Λωρίδα Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

byte 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).

void setup ()

{

Serial.begin (9600); // αρχικοποίηση σειριακής επικοινωνίας

pinMode (9, OUTPUT); // ρυθμίστε τη λειτουργία καρφίτσας LED

// ελέγξτε για την παρουσία της ασπίδας:

εάν (WiFi.status () == WL_NO_SHIELD) {

Serial.println ("Δεν υπάρχει ασπίδα WiFi");

ενώ (αληθινό)? // μην συνεχίσεις

}

String fv = WiFi.firmwareVersion ();

εάν (fv! = "1.1.0") {

Serial.println ("Αναβαθμίστε το υλικολογισμικό");

}

// προσπάθεια σύνδεσης στο δίκτυο Wifi:

ενώ (κατάσταση! = WL_CONNECTED) {

Serial.print ("Προσπάθεια σύνδεσης στο δίκτυο με όνομα:");

Serial.println (ssid); // εκτυπώστε το όνομα δικτύου (SSID).

// Συνδεθείτε στο δίκτυο WPA/WPA2. Αλλάξτε αυτήν τη γραμμή εάν χρησιμοποιείτε ανοιχτό ή WEP δίκτυο:

κατάσταση = WiFi.begin (ssid, pass);

// περιμένετε 10 δευτερόλεπτα για σύνδεση:

καθυστέρηση (10000)?

}

server.begin (); // ξεκινήστε τον διακομιστή ιστού στη θύρα 80

printWifiStatus (); // είστε συνδεδεμένοι τώρα, οπότε εκτυπώστε την κατάσταση

}

{

Serial.begin (9600);

strip.setBrightness (BRIGHTNESS);

strip.begin ();

strip.show (); // Αρχικοποίηση όλων των εικονοστοιχείων σε "απενεργοποίηση"

pinMode (micPin, INPUT);

για (int thisReading = 0; thisReading <numReadings; thisReading ++) {

αναγνώσεις [thisReading] = 0;

}

}

void rainbow (uint8_t αναμονή) {

uint16_t i, j;

για (j = 0; j <256; j ++) {

για (i = 0; i

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

}

strip.show ();

καθυστέρηση (αναμονή)?

}

}

void visualizer () {

σύνολο = σύνολο - αναγνώσεις [readIndex];

αναγνώσεις [readIndex] = analogRead (micPin);

σύνολο = σύνολο + αναγνώσεις [readIndex];

readIndex = readIndex + 1;

εάν (readIndex> = numReadings) {

readIndex = 0;

}

μέσος όρος = σύνολο / numReadings;

καθυστέρηση (1)?

int micpixel = (μέσος όρος-100)/5;

Serial.println (micpixel);

αν (micpixel> 0) {

{

για (int j = 0; j <= micpixel; 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 ();

}

}

αν (micpixel <0) {

για (int j = 0; j <= 20; j ++)

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

strip.show ();

}

}

void loop () {

{

WiFiClient client = server.available (); // ακούστε για εισερχόμενους πελάτες

εάν (πελάτης) {// εάν αποκτήσετε έναν πελάτη, Serial.println ("νέος πελάτης"); // εκτυπώστε ένα μήνυμα από τη σειριακή θύρα

String currentLine = ""; // δημιουργήστε μια συμβολοσειρά για να κρατήσει τα εισερχόμενα δεδομένα από τον πελάτη

while (client.connected ()) {// βρόχος ενώ ο πελάτης είναι συνδεδεμένος

if (client.available ()) {// εάν υπάρχουν byte για ανάγνωση από τον πελάτη, char c = client.read (); // διαβάστε ένα byte, λοιπόν

Serial.write (c); // εκτυπώστε τη σειριακή οθόνη

if (c == '\ n') {// αν το byte είναι χαρακτήρας νέας γραμμής

// εάν η τρέχουσα γραμμή είναι κενή, έχετε δύο χαρακτήρες νέας γραμμής στη σειρά.

// αυτό είναι το τέλος του αιτήματος HTTP -πελάτη, οπότε στείλτε μια απάντηση:

εάν (currentLine.length () == 0) {

// Οι κεφαλίδες HTTP ξεκινούν πάντα με έναν κωδικό απόκρισης (π.χ. HTTP/1.1 200 OK)

// και ένας τύπος περιεχομένου, ώστε ο πελάτης να γνωρίζει τι έρχεται, και στη συνέχεια μια κενή γραμμή:

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

client.println ("Τύπος περιεχομένου: text/html");

client.println ();

// το περιεχόμενο της απόκρισης HTTP ακολουθεί την κεφαλίδα:

client.print ("Κάντε κλικ εδώ Ενεργοποίηση εφέ Rainbow");

client.print ("Κάντε κλικ εδώ Ενεργοποίηση Visualizer");

// Η απάντηση 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")) {

Οραματιστής(); // Το Visualizer είναι ενεργοποιημένο

}

}

}

// κλείστε τη σύνδεση:

client.stop ();

Serial.println ("πελάτης αποσυνδέθηκε");

}

}

void printWifiStatus () {

// εκτυπώστε το SSID του δικτύου στο οποίο είστε συνδεδεμένοι:

Serial.print ("SSID:");

Serial.println (WiFi. SSID ());

// εκτυπώστε τη διεύθυνση IP της ασπίδας WiFi:

IPAddress ip = WiFi.localIP ();

Serial.print ("Διεύθυνση IP:");

Serial.println (ip);

// εκτυπώστε τη λαμβανόμενη ισχύ σήματος:

long rssi = WiFi. RSSI ();

Serial.print ("ισχύς σήματος (RSSI):");

Serial.print (rssi);

Serial.println ("dBm");

// εκτυπώστε πού να πάτε σε ένα πρόγραμμα περιήγησης:

Serial.print ( Για να δείτε αυτήν τη σελίδα σε δράση, ανοίξτε ένα πρόγραμμα περιήγησης στο

Serial.println (ip);

}

}

uint32_t Τροχός (byte 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) {

επιστροφή (c >> 16)?

}

uint8_t πράσινο (uint32_t c) {

επιστροφή (c >> 8)?

}

uint8_t μπλε (uint32_t c) {

επιστροφή (γ)?

}

}

//Serial.println(micpixel);

}

Βήμα 4: Τρισδιάστατη εκτύπωση της βάσης της λάμπας

3d Εκτύπωση της βάσης της λάμπας
3d Εκτύπωση της βάσης της λάμπας

Ένα τρισδιάστατο μοντέλο της βάσης του λαμπτήρα μετρήθηκε, σχεδιάστηκε και εκτυπώθηκε με διαστάσεις αρκετά μεγάλες ώστε να χωράει όλα τα ηλεκτρικά εξαρτήματα στο εσωτερικό του διαμερίσματος βάσης.

Βήμα 5: Led Attachment

Led Attachment
Led Attachment

Τα Led's τυλίχθηκαν σε ρολό από χαρτόνι και συνδέθηκαν με ταινία διπλής όψης, ανοίχθηκε μια τρύπα στο κάτω μέρος για να περάσει το σύρμα

Βήμα 6: Περίβλημα λαμπτήρα

Περίβλημα λαμπτήρα
Περίβλημα λαμπτήρα

Ένα περίβλημα έγινε με την εύρεση ενός διαφανούς μπουκαλιού με παρόμοιο πλάτος με τη βάση του λαμπτήρα και ύψος με το εξάρτημα LED. Στη συνέχεια καλύφθηκε με χοντρό χαρτί για καλύτερη διάχυση του φωτός. Εναλλακτικά, είναι δυνατόν να χρησιμοποιείτε παγωμένο γυαλί ή ημιδιαφανείς πλαστικούς σωλήνες ως περίβλημα λαμπτήρα.

Βήμα 7: Ρύθμιση

Ρύθμιση
Ρύθμιση

Όλα ήταν κολλημένα και συναρμολογημένα. Και η λάμπα ήταν έτοιμη για κάποιες δοκιμές !.

Συνιστάται: