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

Εξερεύνηση χώρου χρώματος: 6 βήματα
Εξερεύνηση χώρου χρώματος: 6 βήματα

Βίντεο: Εξερεύνηση χώρου χρώματος: 6 βήματα

Βίντεο: Εξερεύνηση χώρου χρώματος: 6 βήματα
Βίντεο: Επαγγελματική επισμάλτωση μπανιέρας σε 6 βήματα 2024, Ιούλιος
Anonim
Εξερεύνηση Χρωματικού Χώρου
Εξερεύνηση Χρωματικού Χώρου

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

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

Αυτό το έργο θα σας βοηθήσει να εξερευνήσετε τον κόκκινο, πράσινο και μπλε (RGB) χρωματικό χώρο χρησιμοποιώντας Arduino, RGB LED και λίγα μαθηματικά.

Μπορείτε να σκεφτείτε τις εντάσεις των τριών χρωμάτων, κόκκινο, πράσινο και μπλε, ως συντεταγμένες σε έναν κύβο, όπου κάθε χρώμα βρίσκεται κατά μήκος ενός άξονα και οι τρεις άξονες είναι κάθετοι μεταξύ τους. Όσο πιο κοντά είστε στο μηδενικό σημείο ή την αρχή του άξονα, τόσο λιγότερο από αυτό το χρώμα εμφανίζεται. Όταν οι τιμές και για τα τρία χρώματα είναι στο σημείο μηδέν ή την προέλευση, τότε το χρώμα είναι μαύρο και η λυχνία LED RGB είναι εντελώς σβηστή. Όταν οι τιμές και για τα τρία χρώματα είναι όσο το δυνατόν υψηλότερες (στην περίπτωσή μας, 255 για καθένα από τα τρία χρώματα), το LED RGB είναι εντελώς αναμμένο και το μάτι αντιλαμβάνεται αυτόν τον συνδυασμό χρωμάτων ως λευκό.

Βήμα 1: Χρωματικός χώρος RGB

Χρωματικός χώρος RGB
Χρωματικός χώρος RGB

Ευχαριστώ τον Kenneth Moreland για την άδεια να χρησιμοποιήσει την ωραία του εικόνα.

Θα θέλαμε να εξερευνήσουμε τις γωνίες του τρισδιάστατου έγχρωμου κύβου χρησιμοποιώντας ένα LED RGB συνδεδεμένο σε ένα Arduino, αλλά θέλουμε επίσης να το κάνουμε με έναν ενδιαφέροντα τρόπο. Θα μπορούσαμε να το κάνουμε φωλιάζοντας τρεις βρόχους (ένας για το κόκκινο, για το πράσινο και για το μπλε) και περνώντας από κάθε πιθανό συνδυασμό χρωμάτων, αλλά αυτό θα ήταν πραγματικά βαρετό. Έχετε δει ποτέ ένα 2D Lissajous μοτίβο σε παλμογράφο ή εκπομπή φωτός λέιζερ; Ανάλογα με τις ρυθμίσεις, ένα μοτίβο Lissajous μπορεί να μοιάζει με διαγώνια γραμμή, κύκλο, σχήμα 8 ή αργά περιστρεφόμενο μυτερό μοτίβο που μοιάζει με πεταλούδα. Lissajous μοτίβα δημιουργούνται παρακολουθώντας τα ημιτονοειδή σήματα δύο (ή περισσότερων) ταλαντωτών που απεικονίζονται σε άξονες x-y (ή, για την περίπτωσή μας, x-y-z ή R-G-B).

Βήμα 2: Το καλό πλοίο Lissajous

The Good Ship Lissajous
The Good Ship Lissajous

Τα πιο ενδιαφέροντα μοτίβα Lissajous εμφανίζονται όταν οι συχνότητες των ημιτονοειδών σημάτων διαφέρουν κατά ένα μικρό ποσοστό. Στη φωτογραφία παλμογράφου εδώ, οι συχνότητες διαφέρουν κατά αναλογία 5 προς 2 (και οι δύο είναι πρώτοι αριθμοί). Αυτό το μοτίβο καλύπτει το τετράγωνό του αρκετά καλά και μπαίνει όμορφα στις γωνίες. Οι υψηλότεροι πρώτοι αριθμοί θα κάνουν ακόμα καλύτερη δουλειά να καλύψουν το τετράγωνο και να σπρώξουν ακόμα πιο μακριά στις γωνίες.

Βήμα 3: Περιμένετε - Πώς μπορούμε να οδηγήσουμε ένα LED με ημιτονοειδές κύμα;

Με έπιασες! Θέλουμε να εξερευνήσουμε τον τρισδιάστατο χώρο χρωμάτων που κυμαίνεται από off (0) έως full (255) για καθένα από τα τρία χρώματα, αλλά τα ημιτονοειδή κύματα ποικίλλουν από -1 έως +1. Θα κάνουμε λίγα μαθηματικά και προγραμματισμό εδώ για να πάρουμε αυτό που θέλουμε.

  • Πολλαπλασιάστε κάθε τιμή με 127 για να λάβετε τιμές που κυμαίνονται από -127 έως +127
  • Προσθέστε 127 και στρογγυλοποιήστε κάθε τιμή για να λάβετε τιμές που κυμαίνονται από 0 έως 255 (αρκετά κοντά σε 255 για εμάς)

Οι τιμές που κυμαίνονται από 0 έως 255 μπορούν να αναπαρασταθούν με αριθμούς ενός byte (ο τύπος δεδομένων "char" στη γλώσσα προγραμματισμού Arduino που μοιάζει με C), οπότε θα αποθηκεύσουμε μνήμη χρησιμοποιώντας την αναπαράσταση ενός byte.

Τι γίνεται όμως με τις γωνίες; Εάν χρησιμοποιείτε μοίρες, οι γωνίες σε ημιτονοειδή κυμαίνονται από 0 έως 360. Εάν χρησιμοποιείτε ακτίνια, οι γωνίες κυμαίνονται από 0 έως 2 φορές π ("pi"). Θα κάνουμε κάτι που διατηρεί ξανά τη μνήμη στο Arduino μας και σκεφτόμαστε έναν κύκλο χωρισμένο σε 256 μέρη και έχουμε "δυαδικές γωνίες" που κυμαίνονται από 0 έως 255, έτσι ώστε οι "γωνίες" για καθένα από τα χρώματα να είναι αντιπροσωπεύεται από αριθμούς ενός byte ή χαρακτήρες, επίσης εδώ.

Το Arduino είναι αρκετά εκπληκτικό όπως είναι, και παρόλο που μπορεί να υπολογίσει τις ημιτονοειδείς τιμές, χρειαζόμαστε κάτι πιο γρήγορα. Θα υπολογίσουμε εκ των προτέρων τις τιμές και θα τις τοποθετήσουμε σε μια μακρά σειρά 256 καταχωρήσεων από τιμές μίας byte ή char στο πρόγραμμά μας (δείτε τη δήλωση SineTable […] στο πρόγραμμα Arduino).

Βήμα 4: Ας δημιουργήσουμε ένα τρισδιάστατο μοτίβο LIssajous

Ας φτιάξουμε ένα τρισδιάστατο μοτίβο LIssajous
Ας φτιάξουμε ένα τρισδιάστατο μοτίβο LIssajous

Για να περιηγηθείτε στον πίνακα με διαφορετική συχνότητα για καθένα από τα τρία χρώματα, θα διατηρήσουμε έναν δείκτη ανά χρώμα και θα προσθέσουμε σχετικά πρώτες αντισταθμίσεις σε κάθε δείκτη καθώς περνάμε τα χρώματα. Θα επιλέξουμε 2, 5 και 11 ως τις πρώτες σχετικά αντισταθμίσεις για τις τιμές δείκτη Κόκκινο, Πράσινο και Μπλε. Οι εσωτερικές μαθηματικές δυνατότητες του Arduino θα μας βοηθήσουν τυλίγοντας αυτόματα καθώς προσθέτουμε την τιμή μετατόπισης σε κάθε ευρετήριο.

Βήμα 5: Τοποθετήστε όλα αυτά μαζί στο Arduino

Βάζοντας όλα αυτά μαζί στο Arduino
Βάζοντας όλα αυτά μαζί στο Arduino

Τα περισσότερα Arduinos διαθέτουν έναν αριθμό καναλιών PWM (ή διαμόρφωσης πλάτους παλμών). Θα χρειαστούμε τρία εδώ. Ένα Arduino UNO είναι εξαιρετικό για αυτό. Ακόμη και ένας μικρός μικροελεγκτής 8-bit Atmel (ATTiny85) λειτουργεί υπέροχα.

Κάθε ένα από τα κανάλια PWM θα κινεί ένα χρώμα της λυχνίας RGB χρησιμοποιώντας τη λειτουργία "AnalogWrite" του Arduino, όπου η ένταση του χρώματος σε κάθε σημείο γύρω από τον ημιτονοειδή κύκλο αντιπροσωπεύεται από ένα πλάτος παλμού ή κύκλο λειτουργίας, από το 0 (όλα απενεργοποιημένα) έως 255 (όλα ενεργοποιημένα). Τα μάτια μας αντιλαμβάνονται αυτά τα διαφορετικά πλάτη παλμών, που επαναλαμβάνονται αρκετά γρήγορα, ως διαφορετικές εντάσεις ή φωτεινότητες του LED. Συνδυάζοντας και τα τρία κανάλια PWM που οδηγούν καθένα από τα τρία χρώματα σε LED RGB, έχουμε τη δυνατότητα εμφάνισης 256*256*256, ή πάνω από δεκαέξι εκατομμύρια χρώματα!

Θα χρειαστεί να ρυθμίσετε το Arduino IDE (Interactive Development Environment) και να το συνδέσετε στην πλακέτα Arduino χρησιμοποιώντας το καλώδιο USB. Εκτελέστε βραχυκυκλωτήρες από τις εξόδους PWM 3, 5 και 6 (καρφίτσες επεξεργαστή 5, 11 και 12) σε τρεις αντιστάσεις 1 KΩ (χίλιες ωμ) στον πίνακα proto ή στην ασπίδα proto και από τις αντιστάσεις στο LED R, G, και καρφίτσες Β.

  • Εάν το LED RGB είναι μια κοινή κάθοδος (αρνητικός ακροδέκτης), τότε περάστε ένα καλώδιο από την κάθοδο πίσω στον πείρο GND στο Arduino.
  • Εάν το LED RGB είναι μια κοινή άνοδος (θετικός ακροδέκτης), τότε τρέξτε ένα καλώδιο από την άνοδο πίσω στον πείρο +5V στο Arduino.

Το σκίτσο Arduino θα λειτουργήσει με κάθε τρόπο. Έτυχε να χρησιμοποιήσω μια κοινή κάθοδο LED SparkFun Electronics / COM-11120 RGB (στην παραπάνω εικόνα, από την ιστοσελίδα του SparkFun). Ο μακρύτερος πείρος είναι η κοινή κάθοδος.

Κατεβάστε το σκίτσο RGB-Instructable.ino, ανοίξτε το με το Arduino IDE και δοκιμάστε το μεταγλωττίσετε. Βεβαιωθείτε ότι έχετε καθορίσει τη σωστή πλακέτα ή τσιπ Arduino -στόχο και, στη συνέχεια, φορτώστε το πρόγραμμα στο Arduino. Θα πρέπει να ξεκινήσει αμέσως.

Θα δείτε τον κύκλο LED RGB σε όσα χρώματα μπορείτε να ονομάσετε και εκατομμύρια δεν μπορείτε!

Βήμα 6: Τι ακολουθεί;

Μόλις αρχίσαμε να εξερευνούμε το RGB Color Space με το Arduino μας. Μερικά άλλα πράγματα που έχω κάνει με αυτήν την έννοια περιλαμβάνουν:

Γράφετε απευθείας σε καταχωρητές σε τσιπ, αντί να χρησιμοποιείτε το AnalogWrite, για να επιταχύνετε πραγματικά τα πράγματα

  • Τροποποίηση του κυκλώματος έτσι ώστε ένας αισθητήρας εγγύτητας IR να επιταχύνει ή να επιβραδύνει τον κύκλο ανάλογα με το πόσο κοντά πλησιάζετε
  • Προγραμματισμός ενός μικροελεγκτή Atmel ATTiny85 8 ακίδων με το πρόγραμμα εκκίνησης Arduino και αυτό το σκίτσο

Συνιστάται: