Πίνακας περιεχομένων:
- Βήμα 1: Απαιτείται υλικό
- Βήμα 2: Διάγραμμα κυκλώματος
- Βήμα 3: Κωδικός Arduino
- Βήμα 4: Τρισδιάστατη εκτύπωση της βάσης της λάμπας
- Βήμα 5: Led Attachment
- Βήμα 6: Περίβλημα λαμπτήρα
- Βήμα 7: Ρύθμιση
Βίντεο: Έξυπνος λαμπτήρας (TCfD) - Rainbow + Music Visualizer: 7 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:38
Αυτό το έργο γίνεται για το μάθημα 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: Τρισδιάστατη εκτύπωση της βάσης της λάμπας
Ένα τρισδιάστατο μοντέλο της βάσης του λαμπτήρα μετρήθηκε, σχεδιάστηκε και εκτυπώθηκε με διαστάσεις αρκετά μεγάλες ώστε να χωράει όλα τα ηλεκτρικά εξαρτήματα στο εσωτερικό του διαμερίσματος βάσης.
Βήμα 5: Led Attachment
Τα Led's τυλίχθηκαν σε ρολό από χαρτόνι και συνδέθηκαν με ταινία διπλής όψης, ανοίχθηκε μια τρύπα στο κάτω μέρος για να περάσει το σύρμα
Βήμα 6: Περίβλημα λαμπτήρα
Ένα περίβλημα έγινε με την εύρεση ενός διαφανούς μπουκαλιού με παρόμοιο πλάτος με τη βάση του λαμπτήρα και ύψος με το εξάρτημα LED. Στη συνέχεια καλύφθηκε με χοντρό χαρτί για καλύτερη διάχυση του φωτός. Εναλλακτικά, είναι δυνατόν να χρησιμοποιείτε παγωμένο γυαλί ή ημιδιαφανείς πλαστικούς σωλήνες ως περίβλημα λαμπτήρα.
Βήμα 7: Ρύθμιση
Όλα ήταν κολλημένα και συναρμολογημένα. Και η λάμπα ήταν έτοιμη για κάποιες δοκιμές !.
Συνιστάται:
Laser Music Visualizer: 5 Βήματα
Laser Music Visualizer: Ξέρετε πώς ακούγονται τα αγαπημένα σας τραγούδια. Τώρα μπορείτε να φτιάξετε έναν οπτικοποιητή και να δείτε πώς μοιάζουν. Λειτουργεί ως εξής: Όταν παίζετε ήχο μέσω του ηχείου σας, το διάφραγμα του ηχείου δονείται. Αυτές οι δονήσεις μετακινούν τον καθρέφτη που συνδέεται με
Λαμπτήρας γραφείου Arduino Music Desk With Bluetooth!: 9 Βήματα
Λαμπτήρας γραφείου Arduino Music Desk With Bluetooth !: Γεια σας! Σε αυτό το Instructable πρόκειται να χτίσω κάτι φωτεινό! Επιτρέψτε μου να σας παρουσιάσω τη δροσερή νέα λάμπα γραφείου μου! Είναι μια φθηνή diy λύση για να μετατρέψετε το βαρετό γραφείο σας σε νυχτερινό αξιοθέατο DJ! Ή μήπως όχι. Σας διαβεβαιώνω όμως ότι η τελική παραγωγή
LightBox Music Visualizer: 5 βήματα (με εικόνες)
LightBox Music Visualizer: Το LightBox χρησιμοποιεί το ενσωματωμένο μικρόφωνο του τηλεφώνου ή του tablet σας για να αναλύσει τη μουσική για να δημιουργήσει όμορφα σχέδια φωτός που ταιριάζουν με τη μουσική. Απλώς ξεκινήστε την εφαρμογή, τοποθετήστε το τηλέφωνο ή το tablet σας κάπου κοντά σε μια πηγή ήχου και το κουτί σας θα απεικονίσει το
Music Visualizer (παλμογράφος): 4 βήματα (με εικόνες)
Music Visualizer (παλμογράφος): Αυτός ο μουσικός οπτικοποιητής παρέχει έναν εξαιρετικό τρόπο για να προσθέσετε περισσότερο βάθος στην εμπειρία της μουσικής σας και είναι αρκετά εύκολο να χτιστεί. Μπορεί επίσης να είναι χρήσιμο ως πραγματικό παλμογράφο για ορισμένες εφαρμογές, όσες απαιτούνται είναι: -ένα παλιό crt (σχεδόν όλα τα b & am
Nixie Tube Music Visualizer: 10 βήματα (με εικόνες)
Nixie Tube Music Visualizer: Ένας υπνωτιστικός οπτικοποιητής μουσικής εμπνευσμένος από εκείνα τα μικρά μπαρ στην κορυφή του iTunes. Δεκατέσσερις ρωσικοί σωλήνες bargraph Nixie χρησιμοποιούνται ως οθόνη. Το μήκος που ανάβει κάθε σωλήνας nixie αντιπροσωπεύει τον όγκο μιας συγκεκριμένης συχνότητας στο mu