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

Νυχτερινό φως που αλλάζει χρώμα χρησιμοποιώντας Ardruino 101: 4 βήματα (με εικόνες)
Νυχτερινό φως που αλλάζει χρώμα χρησιμοποιώντας Ardruino 101: 4 βήματα (με εικόνες)

Βίντεο: Νυχτερινό φως που αλλάζει χρώμα χρησιμοποιώντας Ardruino 101: 4 βήματα (με εικόνες)

Βίντεο: Νυχτερινό φως που αλλάζει χρώμα χρησιμοποιώντας Ardruino 101: 4 βήματα (με εικόνες)
Βίντεο: BigTreeTech - SKR 3/SKR 3 EZ - Basics 2024, Νοέμβριος
Anonim
Image
Image
Νυχτερινό φως που αλλάζει χρώμα χρησιμοποιώντας το Ardruino 101
Νυχτερινό φως που αλλάζει χρώμα χρησιμοποιώντας το Ardruino 101

Σε αυτό το έργο θα φτιάξετε μια νυχτερινή λάμπα χρησιμοποιώντας ardruino, Adafruit neo rgb Strips και έναν 3D εκτυπωτή.

Σημειώστε ότι αυτό το άκαμπτο είναι καθαρά για το σχολικό μου έργο. Ο κώδικας για αυτό το έργο βασίζεται σε άλλο έργο. Με αυτό είπε ότι δεν είμαι ειδικός όταν πρόκειται για το Ardruino.

Βήμα 1: Απαιτήσεις

Απαιτήσεις
Απαιτήσεις
Απαιτήσεις
Απαιτήσεις
Απαιτήσεις
Απαιτήσεις

Για αυτό το έργο θα χρειαστείτε το ακόλουθο υλικό και εργαλεία

Σκεύη, εξαρτήματα:

1 - Ένα ardruino101 (στις ΗΠΑ) ή ένα Genuino101 (για εκτός των ΗΠΑ).

2 - NeoPixel rgb led strips από adafruit (5 volt).

3 - Ένας σύνδεσμος ardruino usb (σύνδεσμος τύπου Β σε Α).

4 - Ένα λογισμικό από το Ardruino, Ardruino IDE Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε την έκδοση 1.8.5. Οι απαιτήσεις της βιβλιοθήκης λογισμικού είναι: 101, Adafruit NeoPixel και Madgwick.

5 -Και ένα αντικείμενο για να στεγάσει το υλικό σας. Σε αυτήν την περίπτωση θα χρησιμοποιήσω έναν εκτυπωτή 3D. Το αρχείο για αυτήν την τρισδιάστατη εκτύπωση βρίσκεται στις περιγραφές που ονομάζονται "Lamp Head". Λάβετε υπόψη ότι αυτή η μορφή αρχείου δεν είναι έτοιμη για 3D εκτύπωση. Ανάλογα με τους τρισδιάστατους εκτυπωτές σας, πρέπει πρώτα να εκτελέσετε το καθορισμένο λογισμικό τρισδιάστατης εκτύπωσης στο τρισδιάστατο αντικείμενο. Μερικές φορές η κλίμακα της τρισδιάστατης εκτύπωσης επανέρχεται. οπότε βεβαιωθείτε ότι η διάμετρος έχει ρυθμιστεί στα 11 εκατοστά επί 11 εκατοστά.

6 - Βασικό κιτ συγκόλλησης.

Βήμα 2: Κατανόηση του υλικού και του λογισμικού

Ardruin/Genuino101

Απλώς για να διευκρινιστεί το Ardruino101 και το genuino101 είναι ακριβώς τα ίδια δίπλα στα ονόματα. Και οι δύο έχουν τις ίδιες προδιαγραφές και χρησιμοποιούν το ίδιο λογισμικό.

Το Ardruino101 διαθέτει τις βασικές προδιαγραφές όπως το ardruino UNO και άλλα. Το κύριο χαρακτηριστικό του ardruino101 είναι το επιταχυνσιόμετρο και το γυροσκόπιο που θα χρησιμοποιήσουμε στο έργο μας. Επίσης, αυτός ο τύπος ardruino έχει τη μοναδική βιβλιοθήκη κώδικα που ονομάζεται CurrieIMU (Εσωτερικές μονάδες μέτρησης), η οποία περιλαμβάνεται στην επέκταση βιβλιοθήκης 101.

Με αυτό, ας μιλήσουμε για το λογισμικό.

Λογισμικό και βιβλιοθήκες

Το Ardruino IDE χρησιμοποιεί τον python ως κύριο πηγαίο κώδικα. είναι επίσης ο κύριος κώδικας platvorm όπου τρέχουν τα περισσότερα ardruino. Υπάρχουν πολλά σεμινάρια στο διαδίκτυο σχετικά με τον τρόπο χρήσης αυτού του λογισμικού, γι 'αυτό σας συνιστώ να ερευνήσετε πρώτα αν είστε νέοι σε αυτό το πρόγραμμα.

Με αυτά τα βιβλιοθήκες που χρησιμοποιούμε είναι οι ακόλουθες:

Από το μενού Σκίτσο,> Συμπερίληψη βιβλιοθήκης> Διαχείριση βιβλιοθηκών … Στο πλαίσιο εισαγωγής κειμένου πληκτρολογήστε

- 101 Σε κανονικό επίπεδο, το ardruino 101 δεν περιλαμβάνεται αυτόματα στο ardruino IDE. Χρειαζόμαστε αυτήν την επέκταση βιβλιοθήκης για να κωδικοποιήσουμε τον τύπο ardruino.

-Adafruit NeoPixel για να κωδικοποιήσουμε τις ταινίες εικονοστοιχείων Neo.

-Madgwick Για να διαβάσετε τα ακατέργαστα δεδομένα και να υπολογίσετε αυτά τα δεδομένα σε ακατέργαστα, βήματα και ρολά.

Νέες λωρίδες RGB

Ο τύπος που θα χρησιμοποιήσω είναι τύπου 5 τάσης ή 5v. Με αυτό το 5v δεν χρειάζομαι εκτεταμένη πηγή ενέργειας για τον έλεγχο των λωρίδων μου. Αντ 'αυτού, θα χρησιμοποιήσω το ardruino μου ως πηγή ενέργειας για τον έλεγχο και τον φωτισμό των λωρίδων.

Ακολουθούν μερικές συμβουλές που πρέπει να γνωρίζετε πριν ξεκινήσετε με αυτές τις λωρίδες.

Πρώτα θα χρειαστείτε λωρίδες led Neodigital RGB από το adafruit. Αυτό το είδος λωρίδων μπορεί να υποβληθεί σε κοινή χρήση με κωδικούς. Στη συνέχεια, πρέπει να γνωρίζετε ότι υπάρχει μια πίσω πλευρά και ένα μπροστινό μέρος σε αυτές τις λωρίδες. Αυτό το πίσω και το μπροστινό μέρος είναι σημαντικό για τη συγκόλληση. Βεβαιωθείτε ότι έχετε κολλήσει την μπροστινή πλευρά όπου το πλήκτρο βέλους δείχνει μακριά από την άκρη.

Ακολουθεί ένας οδηγός για τον τρόπο χρήσης τους.

Υπάρχουν 3 σημεία συγκόλλησης που πρέπει να έχετε κατά νου Σύνδεση γείωσης (GND), Σύνδεση τάσης (V) και σύνδεση Pin (DIN).

Βήμα 3: Ρύθμιση των εξαρτημάτων

Ρύθμιση των εξαρτημάτων
Ρύθμιση των εξαρτημάτων
Ρύθμιση των εξαρτημάτων
Ρύθμιση των εξαρτημάτων
Ρύθμιση των εξαρτημάτων
Ρύθμιση των εξαρτημάτων

Πρώτα πρέπει να εκτυπώσετε τρισδιάστατα το στοιχείο που μπορείτε να βρείτε στις απαιτήσεις. Σε αυτή την περίπτωση θα χρησιμοποιήσω PLA. Βεβαιωθείτε ότι η διάμετρος του ολόσωμου αντικειμένου είναι 11cm επί 11cm. Αυτό θα διασφαλίσει ότι το ardruino και οι λωρίδες θα ταιριάζουν στο πλύσιμο. Σημειώστε ότι κάθε 3D εκτυπωτής χρησιμοποιεί διαφορετικά λογισμικά για να υπολογίσει τη διαδικασία εκτύπωσης. Με αυτό είπε ότι το αρχείο που χρησιμοποιείτε μπορεί να κλιμακωθεί διαφορετικά, οπότε να το έχετε υπόψη σας.

Δεύτερο μετά την εκτύπωση βεβαιωθείτε ότι τα εξαρτήματα είναι σε θέση να κλείσουν. Οι τρισδιάστατες εκτυπώσεις μαζί συνθέτουν μια σφαίρα. Θα πρέπει να ταιριάζουν όμορφα. Εάν ο υπολογιστής πρόκειται να χαθεί, τότε τοποθετήστε μια ταινία στην εσωτερική πλευρά, ώστε να γεμίσει το καπάκι. Και αν πρόκειται για παχύ χρησιμοποιείτε γυαλόχαρτο.

Τρίτον, τα skematichs για το ardruino και τις λωρίδες είναι αρκετά εύκολα. Θα χρησιμοποιήσετε 3 καλώδια για να συνδέσετε τις λωρίδες στο ardruino. Σημειώστε ότι τα μόνα μέρη που συγκολλάω είναι στις λωρίδες. όχι στο ίδιο το Ardruino.

Το GND πηγαίνει στο GND

Το DIN πηγαίνει σε μια καρφίτσα (στην περίπτωσή μας pin6 στο ardruino)

5V πηγαίνει στα 5V

Βεβαιωθείτε ότι το ποσό των λωρίδων led που χρησιμοποιείτε είναι ανώτατο όριο στο 30. Πλέον αυτό και δεν θα εκτελέσει σωστά τον κώδικα. Μπορείτε απλά να κόψετε τυχόν λωρίδες χωρίς τρύπες που εμφανίζονται με μια πινακίδα ψαλιδιού.

Τέταρτον Όλα πρέπει να ταιριάζουν όμορφα στη σφαίρα. Θα μπορούσατε να έκανα μια διασταύρωση μεταξύ 1 της τρισδιάστατης εκτύπωσης για να βλέπω τη γούρνα και να τοποθετώ ένα πλαστικό από την κορυφή.

Βήμα 4: Κωδικοποίηση

Μέχρι τώρα θα πρέπει να έχετε όλα τα στοιχεία που χρειάζεστε στη βιβλιοθήκη σας.

Εδώ είναι ο κώδικας που χρειάζεστε για να τρέξετε το έργο. Το αποτέλεσμα πρέπει να μοιάζει με το σύνδεσμο βίντεο που στέλνω σε αυτήν τη σελίδα.

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

#Include #include #include #include

#define PIN 6 // 11 pixel NeoPixel Strip

#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Numer of píxels #define SAMPLE_RATE 25 // Ρυθμός δειγματοληψίας για επιταχυνσιόμετρο και γυροσκόπιο

// Διαμόρφωση Madgwick

Φίλτρο Madgwick? ανυπόγραφο μακρύ microsPerReading, microsPrevenue? float accelScale, gyroScale;

// Διαμόρφωση NeoPixel

Εικονοστοιχεία Adafruit_NeoPixel = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Χρωματικοί χώροι

RGBConverter rgbConverter; διπλό h = 1; διπλό s = 1; διπλό v = 1; byte rgb [3];

// Λάμπα κίνησης κατάστασης

// Κατάσταση 0 -> Επιλογή απόχρωσης -Πίσσα // Κατάσταση 1 -> Επιλογή κορεσμού -ρόλος // κατάσταση 2 -> Επιλογή τιμής -Ναι

void setup () {

Serial.begin (9600);

// ξεκινήστε το IMU και φιλτράρετε

CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);

// Ρυθμίστε το εύρος του επιταχυνσιόμετρου σε 2G

CurieIMU.setAccelerometerRange (2); // Ρυθμίστε το εύρος γυροσκοπίου σε 250 μοίρες/δευτερόλεπτο CurieIMU.setGyroRange (250).

CurieIMU.autoCalibrateAccelerometerOffset (X_AXIS, 0);

CurieIMU.autoCalibrateAccelerometerOffset (Y_AXIS, 0); CurieIMU.autoCalibrateAccelerometerOffset (Z_AXIS, 1); CurieIMU.autoCalibrateGyroOffset ();

CurieIMU.attachInterrupt (eventCallback);

CurieIMU.setDetectionThreshold (CURIE_IMU_TAP, 950); CurieIMU.διακόπτει (CURIE_IMU_TAP);

// προετοιμάστε μεταβλητές για να επιταχύνετε τις ενημερώσεις στο σωστό ποσοστό

microsPerReading = 1000000 / SAMPLE_RATE; microsPrevenue = micros ();

// Init NeoPixel 11

pixels.begin (); pixels.show ();

// Init NeoPixel 1

pixelsStatus.begin (); pixels.show ();

// Εμφάνιση κατάστασης σε px

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // επιταχυνσιόμετρο int gix, giy, giz; float ax, ay, az? float gx, gy, gz; float roll, pitch, yaw? στατικό ανυπόγραφο μακρύ μικρό τώρα

// ελέγξτε αν ήρθε η ώρα να διαβάσετε δεδομένα και να ενημερώσετε το φίλτρο

microsNow = micros (); εάν (microsNow - microsPrevious> = microsPerReading) {

// διαβάστε ακατέργαστα δεδομένα από το CurieIMU

CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);

// μετατροπή από ακατέργαστα δεδομένα σε βαρύτητα και μοίρες/δεύτερες μονάδες

ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);

// ενημέρωση του φίλτρου, το οποίο υπολογίζει τον προσανατολισμό

filter.updateIMU (gx, gy, gz, ax, ay, az);

// εκτυπώστε την επικεφαλίδα, το βήμα και το ρολό

roll = filter.getRoll (); pitch = filter.getPitch (); yaw = filter.getYaw ();

// αύξηση του προηγούμενου χρόνου, έτσι ώστε να διατηρούμε τον κατάλληλο ρυθμό

microsPrevenue = microsPrevious + microsPerReading;

// Μόνο αν αλλάξετε απόχρωση, κορεσμό ή τιμή

if (statusLamp επιλέξτε Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Μετασχηματισμός γωνίας pitch = pitch + 90; // Αποκτά χρώματα σε συντονισμό από γωνίες h = pitch / 180.0;}

// Περιορισμοί γωνιών

// κύλιση μόνο -90º έως 90º = 180º // Κατάσταση 1 -> επιλέξτε Κορεσμός αν (ρολ // Λαμβάνει χρώματα σε συντονισμό από γωνίες s = roll / 180.0; }

// Κατάσταση 2 -> επιλέξτε Τιμή

εάν (statusLamp == 2) {// yaw 0º έως 360º v = yaw / 360.0; }

// Μετατροπή σε rgb

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Χρώμα:"); Serial.print (h); Serial.print (" -"); Serial.print (s)? Serial.print (" -"); Serial.print (v); Serial.println ("");

Serial.print ("Προσανατολισμός:");

Serial.print (yaw); Serial.print (""); Serial.print (βήμα); Serial.print (""); Serial.println (ρολό); */

// Αλλαγή χρώματος των εικονοστοιχείων

για (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2])); pixels.show (); }}

// Εμφάνιση κατάστασης σε px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// αφού χρησιμοποιούμε εύρος 2G // -2g χάρτες σε ακατέργαστη τιμή -32768 // +2g χάρτες σε ακατέργαστη τιμή 32767

float a = (aRaw * 2.0) / 32768.0;

επιστροφή a? }

float convertRawGyro (int gRaw) {

// δεδομένου ότι χρησιμοποιούμε εύρος 250 μοιρών/δευτερολέπτων // -250 χάρτες σε ακατέργαστη τιμή -32768 // +250 χάρτες σε ακατέργαστη τιμή 32767

float g = (gRaw * 250.0) / 32768.0;

επιστροφή g? }

static void eventCallback ()

{// Ανίχνευση πατήματος σε όλους τους άξονες εάν (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Πατήστε εντοπισμένο statusLamp:"); Serial.println (statusLamp);

// Αλλαγή κατάστασης

statusLamp ++;

// Αρχική κατάσταση

if (statusLamp> 3) {statusLamp = 0; }}}

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); Διακοπή; θήκη 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); Διακοπή; θήκη 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); Διακοπή; θήκη 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); Διακοπή;

}

}

Συνιστάται: