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

Τραβήξτε το φως - μονάδα φωτός χρησιμοποιώντας Neopixel & Pull Up Switch: 6 βήματα (με εικόνες)
Τραβήξτε το φως - μονάδα φωτός χρησιμοποιώντας Neopixel & Pull Up Switch: 6 βήματα (με εικόνες)

Βίντεο: Τραβήξτε το φως - μονάδα φωτός χρησιμοποιώντας Neopixel & Pull Up Switch: 6 βήματα (με εικόνες)

Βίντεο: Τραβήξτε το φως - μονάδα φωτός χρησιμοποιώντας Neopixel & Pull Up Switch: 6 βήματα (με εικόνες)
Βίντεο: Γ Γυμνασίου - Μάθημα 33ο (ΝΕΟ) - Ανάλυση του φωτός - Χρώματα 2024, Νοέμβριος
Anonim
Image
Image
Τραβήξτε τη μονάδα Light - Light χρησιμοποιώντας Neopixel & Pull Up Switch
Τραβήξτε τη μονάδα Light - Light χρησιμοποιώντας Neopixel & Pull Up Switch

Χαρακτηριστικά της μονάδας Light

  • Arduino Uno
  • Υλικό και περίβλημα αγοράστηκαν από το Διαδίκτυο
  • Το Neopixel & τροφοδοτικό δανείστηκε από τη Σχολή Πληροφορικής & Σχεδιασμού Προϊόντων
  • Μονάδα φωτισμού που ελέγχεται από τροφοδοτικό
  • Όλες οι λειτουργίες ελέγχονται μέσω αλληλεπίδρασης χρηστών
  • Τύποι κινούμενων εικόνων της ταινίας Neopixel: Τύπος βροχής, τύπος ντους, τύπος αστραπής Spark, τύπος ποπ, ακανόνιστος τύπος
  • Ο διακόπτης έλξης συνδέεται στη λωρίδα Neopixel και η κίνηση αλλάζει όταν τραβιέται η ταινία Neopixel

Βήμα 1: Πριν ξεκινήσουμε

Πριν Ξεκινήσουμε
Πριν Ξεκινήσουμε

Γεια σας Instructables and Makers.

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

Να μην πιάσει δουλειά

Βήμα 2: Απαιτούνται ανταλλακτικά

Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά

Βασίζεται σε μία μονάδα φωτός

*** Χρησιμοποιήθηκαν neopixels και τροφοδοτικό με την υποστήριξη του τμήματος μας. ***

ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ:

  1. Arduino Uno
  2. Σύρμα 3 χρωμάτων (Μαύρο, Κόκκινο, οποιοδήποτε χρώμα)
  3. Υποδοχή 3 ακίδων (Σύνδεσμος για αγορά)
  4. Τραβήξτε τον διακόπτη 1 (Σύνδεσμος για αγορά)
  5. συρρικνωμένος σωλήνας
  6. WS2812b προσθετή λωρίδα LED με 74 LED (ταινία Neopixel)*2
  7. Τροφοδοσία (5V 350A) 1

*** Απαιτούνται 50 σετ για το Arduino, το Pull Switch και το NeoPixels. ***

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

  1. Ακρυλική μπάρα 2t (10mm*1000mm) 1
  2. Ακρυλική σανίδα 5t (60mm*60mm) 1
  3. Foemax 10t (1200mm*1800mm) 1
  4. Μαύρο σπρέι
  5. Γραβάτα καλωδίου
  6. Σειρά
  7. Χαρτόνι
  8. Πίνακας πλέγματος

Βήμα 3: Συνδεσιμότητα και δημιουργία υλικού

Συνδεσιμότητα και δημιουργία υλικού
Συνδεσιμότητα και δημιουργία υλικού
Συνδεσιμότητα και δημιουργία υλικού
Συνδεσιμότητα και δημιουργία υλικού
Συνδεσιμότητα και δημιουργία υλικού
Συνδεσιμότητα και δημιουργία υλικού

Πρώτον, χρειαζόμαστε την ακρυλική κοπή για να φτιάξουμε μια μονάδα φωτισμού.

  • Ως μέσο για να ζήσετε την κίνηση του φωτός, σχεδιάστε μια μονάδα φωτισμού που είναι στερεωμένη συνδέοντας 74 LED με τη μορφή λωρίδας neopixel σε ακρυλική ράβδο πάχους 2mm με εμβαδόν 1M. Έχουμε παράγει δύο τύπους μονάδων φωτισμού: τυπικά γραμμικά και σπειροειδή.
  • Για τους γραμμικούς τύπους, οι υπάρχουσες λωρίδες neopixel μπορούν να συγκρατηθούν και να ασφαλιστούν, αλλά οι τύποι σπειροειδών απαιτούν χειροκίνητη λειτουργία. Κάθε ένα από τα 74 LED χωρίζεται σε κομμάτια, προσαρτάται σε ένα σπειροειδές ακρυλικό και συνδέεται μαζί με μόλυβδο.

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

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

Η ακρυλική κοπή όπως φαίνεται στο παραπάνω σχέδιο απαιτείται για να ασφαλίσει ο διακόπτης στο ράφι. Ένας διακόπτης τετραγωνικού σχήματος πάχους 5 εκατοστών έχει πάχος περίπου 5 χιλιοστά, με τον διακόπτη στο κέντρο και μια γραβάτα καλωδίου τοποθετημένη μέσα από τρύπες και στις δύο πλευρές για να ασφαλίζει σταθερά τον διακόπτη. Μια κυκλική τρύπα στο κάτω μέρος του κέντρου εκθέτει την έλξη του διακόπτη, κάτω από την οποία ένα καλώδιο τριών καλωδίων τραβιέται προς τα έξω και συνδέεται με τον ακροδέκτη καλωδίου της μονάδας. Και ομοίως, μέσω μιας τρύπας στις τέσσερις γωνίες, το ράφι και το ακρυλικό στερεώνονται με συνδέσμους καλωδίων. Όπως περιγράφηκε παραπάνω, η γραμμική μονάδα συνδέεται απευθείας με το τράβηγμα, αλλά η σπειροειδής μονάδα συνδέει τον πείρο και τον διακόπτη ξεχωριστά.

Βήμα 4: Δημιουργήστε χρησιμοποιώντας 50 μονάδες φωτός

Δημιουργήστε χρησιμοποιώντας 50 μονάδες φωτός
Δημιουργήστε χρησιμοποιώντας 50 μονάδες φωτός
Δημιουργήστε χρησιμοποιώντας 50 μονάδες φωτός
Δημιουργήστε χρησιμοποιώντας 50 μονάδες φωτός
Δημιουργήστε χρησιμοποιώντας 50 μονάδες φωτός
Δημιουργήστε χρησιμοποιώντας 50 μονάδες φωτός

Έχουμε σχεδιάσει μια εμπειρία χρήστη για πιο πλούσιο φως, αναπτύσσοντας συνολικά 50 μονάδες

Είχαμε ένα ράφι 1, 800 mm πλάτος και 1, 200 mm, και συνδέσαμε κάθε διακόπτη και μονάδα ώστε να μπορείτε να βιώσετε το περιβάλλον βροχής και βροχής που είχαμε αρχικά προγραμματίσει, και είχαμε κάθε μονάδα αυτόνομα για να ενεργοποιήσουμε πολλαπλές εργασίες Το

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

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

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

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

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

Βήμα 5: Κωδικοποίηση & καλωδίωση Arduino

Κωδικοποίηση & καλωδίωση Arduino
Κωδικοποίηση & καλωδίωση Arduino
Κωδικοποίηση & καλωδίωση Arduino
Κωδικοποίηση & καλωδίωση Arduino

Καλωδίωση

  • 50 μονάδες συνδέθηκαν σύμφωνα με τη διάταξη του βήματος 4.
  • Κάθε ενότητα χωρίστηκε σε 10 σύνολα των 50 ενοτήτων για να επιτρέψει την εκτέλεση πολλαπλών εργασιών και την παροχή σαφούς σύνδεσης.
  • Όπως φαίνεται στην παραπάνω εικόνα 1, πέντε μονάδες συνδέθηκαν σε ένα arduino και οι ακίδες 5v του neopixel συνδέθηκαν ταυτόχρονα για να συνδέσουν την παροχή ρεύματος.
  • Το GND των νεοπροσταυμάτων και των διακοπτών ήταν επίσης δεμένα μεταξύ τους και, για ευκολία στην αντίληψη, οι διακόπτες συνδέθηκαν στους ακροδέκτες 2, 3, 4, 5, 6 και τα νεοπροστοιχεία συνδέθηκαν στις ακίδες 9, 10, 11, 12, 13 Το
  • Οι διακόπτες και τα neopixel συνδέθηκαν με τρόπους 2-9, 3-10, 4-11, 5-12, 6-13, αντίστοιχα.
  • Πρέπει να σημειωθεί ότι δεδομένου ότι οι συνδέσεις των γραμμών είναι πολύπλοκες και υπάρχει κίνδυνος πυρκαγιάς λόγω βραχυκυκλωμάτων, ο συρρικνωμένος σωλήνας θερμάνθηκε για να διασφαλιστεί ότι τα αδύναμα μέρη δεν θα σπάσουν.

Κωδικοποίηση πολλαπλών εργασιών Neopixel με διακόπτη pull up

5 ελαφριά κινούμενα σχέδια (τύπος βροχής, τύπος ντους, τύπος αστραπής Spark, τύπος ποπ, ακανόνιστος τύπος)

#περιλαμβάνω

/*사용 하고자 하는 패턴 을 추가/*/

enum pattern {NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, TWINKLE, STAR, RAINBOWSPARKLE, METEOR, LIGHT, BLOSSOM}? /*네오 픽셀 을 을 설정 함/*/ enum direction {FORWARD, REVERSE};

/*패턴 의 클래스 를 입력/*/

κλάση NeoPatterns: public Adafruit_NeoPixel { /* 패턴 을 추가 하고 업데이트 위한 /* / public: pattern ActivePattern; /*클레스 함수 에 패턴 의 방향 입력/*/ διεύθυνση Κατεύθυνση;

/*변수 Διάστημα 을 추가*/ ανυπόγραφο μεγάλο διάστημα; /*변수 lastUpdate 를 추가*/ unsigned long lastUpdate; /*변수 Color1, Color2 추가*/ uint32_t Color1, Color2; /*변수 TotalSteps 를 추가*/ uint16_t TotalSteps; /*변수 Ευρετήριο 를 추가*/ uint16_t Ευρετήριο;

/*패턴 을 완료 했을 시 다시 함수/*/ void (*OnComplete) (); /*네오 패턴 에서 네오 픽샐 의 핀, 번호 번호, 타입, 콜백 을 함수*/ NeoPatterns (uint16_t pixels, uint8_t pin, uint8_t type, void (*callback) ()): Adafruit_NeoPixel (pixels, pin, type) { OnComplete = επανάκληση; }

/*패턴 을 업데이트 하기 위한 케이스/*/

άκυρη Ενημέρωση () { /*패턴 의 시간 설정. If 태스킹 을 구현 구문/*/ if ((millis () - lastUpdate)> Interval) {lastUpdate = millis (); /*ActivePattern 스위치 구문*/ switch (ActivePattern) {/*case RAINBOW_CYCLE 에서는 RainbowCycleUpdate 를 실행 하라*/ case RAINBOW_CYCLE: RainbowCycleUpdate (); /*θήκη RAINBOW_CYCLE 나와라*/ break;

/*θήκη THEATER_CHASE 에서는 TheaterChaseUpdate 를 실행 하라*/

θήκη THEATER_CHASE: TheaterChaseUpdate (); /*θήκη THEATER_CHASE 나와라*/ break;

/*θήκη COLOR_WIPE 에서는 ColorWipeUpdate 를 실행 하라*/

θήκη COLOR_WIPE: ColorWipeUpdate (); /*θήκη COLOR_WIPE 나와라*/ break; /*case SCANNER 에서는 ScannerUpdate/ 실행 하라*/ case SCANNER: ScannerUpdate (); /*θήκη SCANNER 나와라*/ break;

/*περίπτωση FADE 에서는 FadeUpdate 를 실행 하라*/

περίπτωση FADE: FadeUpdate (); /*θήκη FADE 나와라*/ break;

/*θήκη TWINKLE 에서는 TwinkleUpdate 를 실행 하라*/

θήκη TWINKLE: TwinkleUpdate (); /*θήκη TWINKLE 나와라*/ break;

/*θήκη STAR 에서는 StarUpdate 실행 하라*/

θήκη STAR: StarUpdate (); /*θήκη STAR 나와라*/ break;

/*θήκη RAINBOWSPARKLE 에서는 RainbowsparkleUpdate 를 실행 하라*/

θήκη RAINBOWSPARKLE: RainbowsparkleUpdate (); /*θήκη RAINBOWSPARKLE 나와라*/ break; /*case METEOR 에서는 MeteorUpdate/ 실행 하라*/ case METEOR: MeteorUpdate (); /*θήκη METEOR 나와라*/ break;

/*θήκη LIGHT 에서는 LightUpdate 를 실행 하라*/

θήκη LIGHT: LightUpdate (); /*θήκη LIGHT 에서 나와라*/ break;

/*θήκη BLOSSOM 에서는 BlossomUpdate 실행 하라*/

θήκη BLOSSOM: BlossomUpdate (); /*θήκη BLOSSOM 나와라*/ break; }}}

/*패턴 의 방향 을 설정 하는/*/

/*Ευρετήριο/증가 시키고 초기화 하는 함수*/

void Αύξηση () { /*만약 정방향 이면 인덱스 증가 시켜라* / if (Κατεύθυνση == ΠΡΟΣΩΠΟ) {Ευρετήριο ++; /*만약 인덱스 가 전체 네오 픽셀 갯수 같 거나 많다 면 0 으로 초기화 시켜라*/ if (Index> = TotalSteps) {Index = 0; /*패턴 을 완료 함수/*/ εάν (OnComplete! = NULL) {OnComplete (); }}}

/*만약 정방향 이 else else else else/*/ else {--Index; /*만약 인덱스 가 전체 네오 픽셀 갯수 와 거나 적 다면 다면 에서 을 1 을 빼라*/ if (Index <= 0) {Index = TotalSteps - 1; /*패턴 을 완료 함수/*/ εάν (OnComplete! = NULL) {OnComplete (); }}}}

/*반대 방향 으로 움직이게 하는/*/

void Reverse () { /*애니메이션 함수 에 Reverse 를 썼을 시, 방향 이 이면 /* / if (Direction == FORWARD) { /*방향 은 그 반대 이며 전체 구동 갯수 에서 1 일 빼라* / Direction = REVERSE ? Ευρετήριο = TotalSteps - 1; } /*그 외의 방향 이 정방향 이면 으로 0 으로 설정 해라* / else {Direction = FORWARD; Ευρετήριο = 0; }}

/*애니메이션 을 설정 하는 함수 들*

*RainbowCycle/ 시간 과 방향 을 입력*/

void RainbowCycle (uint8_t interval, direction dir = FORWARD) { /*실행 되는 패턴 은 RainbowCycle 임* / ActivePattern = RAINBOW_CYCLE; /*시간 은 void RainbowCycle () 입력 val interval 과 같음*/ Interval = interval; /*총 구동 갯수 는 255 임*/ TotalSteps = 255; /*인덱스 는 0 으로 설정 함*/ Ευρετήριο = 0; /*방향 은 void RainbowCycle () 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*RainbowCycle 업데이트 했을 경우*/

void RainbowCycleUpdate () { /*변수 i 가 네오 픽셀 개수 /를 를 를 시켜라 /* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 증가 함 동시에 GB RGB 의 / 로 변화 작동 해라 / * / setPixelColor (i, Wheel (((i * 256 / numPixels ()) + Index) & 255)); } / *애니메이션 을 보여주는 함수 * / show (); Αύξηση(); }

/*TheaterChase 컬러 와 시간 방향 입력/*/

void TheaterChase (uint32_t color1, uint32_t color2, uint8_t interval, direction dir = FORWARD) { /*실행 되는 패턴 TH RTHEATER_CHASE* / ActivePattern = THEATER_CHASE; /*시간 은 void TheaterChase () 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 는 numPixels 임*/ TotalSteps = numPixels (); /*컬러 1, 2 설정*/ Χρώμα1 = χρώμα1; Χρώμα2 = χρώμα2; /*인덱스 는 0 으로 설정 함*/ Ευρετήριο = 0; /*방향 은 void TheaterChase () 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*TheaterChase 업데이트 했을 경우*/

void TheaterChaseUpdate () { /*변수 i 가 네오 픽셀 for for 를 를 를 시켜라 /* /for (int i = 0; i <numPixels (); i ++) { /*만약 변수 에 인덱스 를 으로 3 으로 나눈 것이 0 과 같다 면 i 를 Χρώμα 로 시켜라 시켜라*/ if ((i + Index) % 3 == 0) {setPixelColor (i, Color1); } /*그렇지 않다면 i 를 Χρώμα 로 변환 시켜라* / else {setPixelColor (i, Color2); }} / *애니메이션 을 보여주는 함수 * / show (); Αύξηση(); }

/*ColorWipe 컬러 와 시간 방향 입력/*/

void ColorWipe (uint32_t color, uint8_t interval, direction dir = FORWARD) { /*실행 되는 패턴 L COLOR_WIPE* / ActivePattern = COLOR_WIPE; /*시간 oid void ColorWipe () 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 는 numPixels 임*/ TotalSteps = numPixels (); /*컬러 1 설정*/ Color1 = χρώμα; /*인덱스 는 0 으로 설정 함*/ Ευρετήριο = 0; /*방향 oid void ColorWipe () 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*ColorWipeUpdate 를 업데이트 했을 경우*/

void ColorWipeUpdate () { /*index 를 컬러 1 로 변환 시켜라* / setPixelColor (Index, Color1); / *애니메이션 을 보여주는 함수 */ show (); Αύξηση(); }

/*Σαρωτής/컬러 와 시간 을 입력*/

void Scanner (uint32_t color1, uint8_t interval) { /*실행 되는 패턴 AN SCANNER* / ActivePattern = SCANNER; /*시간 은 άκυρος σαρωτής () 안에 입력 되는 διάστημα 과 같음*/ διάστημα = διάστημα; /*구동 갯수 는 총 갯수 을 1 을 빼고 2 를 곱 해라*/ TotalSteps = (numPixels () - 1)*2; /*컬러 1 설정*/ Color1 = color1; /*인덱스 는 0 으로 설정 함*/ Ευρετήριο = 0; }

/*ScannerUpdate 를 업데이트 했을 경우*/

void ScannerUpdate () { /*변수 i 는 영 이고 갯수 갯수 for 를 i 를 증가 시켜라* /for (int i = 0; i <numPixels (); i ++) { /*만약 변수 i 가 인덱스 같다 면 i 를 color1 로 변환 시켜라*/ if (i == Ευρετήριο) {setPixelColor (i, Color1); } / *그렇지 않다면 변수 i 를 전체 구동 에서 인덱스 를 뺀값 과 같다 / / * / else if (i == TotalSteps - Index) {setPixelColor (i, Color1); } / *그 밖에는 i 를 디밍 시켜라 의 값 만큼 * / else {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 함수 * / show (); Αύξηση(); }

/*Σαρωτής 컬러 컬러 1, 2 와 스텝, 시간, 방향 을 입력*/

void Fade (uint32_t color1, uint32_t color2, uint16_t βήματα, uint8_t interval, direction dir = FORWARD) { /*실행 되는 패턴 AD FADE* / ActivePattern = FADE; /*시간 은 void Fade () 입력 되는 interval 과 같음*/ Interval = interval? /*구동 갯수 는 값임/*/ TotalSteps = βήματα. /*컬러 1, 2 설정*/ Χρώμα1 = χρώμα1; Χρώμα2 = χρώμα2; /*인덱스 는 0 으로 설정 함*/ Ευρετήριο = 0; /*방향 oid void Fade () 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; } /*FadeUpdate 업데이트 했을 경우* / void FadeUpdate () { /*변수 κόκκινο 값 은 다음 같음 같음* / uint8_t κόκκινο = ((Κόκκινο (Χρώμα1)*(TotalSteps - Ευρετήριο)) + (Κόκκινο (Χρώμα2)*Ευρετήριο)) / TotalSteps? / * 변수 πράσινο 은 다음 과 같음 * / uint8_t πράσινο = ((Πράσινο (Χρώμα1) * (TotalSteps - Ευρετήριο)) + (Πράσινο (Χρώμα2) * Ευρετήριο)) / TotalSteps; / * 변수 μπλε 은 다음 과 같음 * / uint8_t μπλε = ((Μπλε (Χρώμα1) * (TotalSteps - Ευρετήριο)) + (Μπλε (Χρώμα2) * Ευρετήριο)) / TotalSteps; /*위 의 κόκκινο, πράσινο, μπλε/ 으로 컬러 를 함/*/ ColorSet (Χρώμα (κόκκινο, πράσινο, μπλε)); / *애니메이션 을 보여주는 함수 */ show (); Αύξηση(); }

/*모든 네오 픽셀 을 끄는/*/

void alloff () { /*총 네오 픽셀 갯수 개 74 개 이며* / int NPIXEL = 74; /*변수 i 증가 하며 모든 픽셀 의 값 을 으로 으로//*/ for (int i = 0; i <NPIXEL; i ++) {setPixelColor (i, 0, 0, 0); }}

/*Twinkle 컬러 1 와 시간 을 입력*/

void Twinkle (uint32_t color1, uint8_t interval) { /*실행 되는 패턴 은 TWINKLE* / ActivePattern = TWINKLE; /*시간 은 void Twinkle () 입력 되는 interval 과 같음*/ Interval = interval; /*컬러 1 설정*/ Color1 = color1; /*총 구동 갯수 는 numPixels 임*/ TotalSteps = numPixels (); Ευρετήριο = 0; }

/*TwinkleUpdate 업데이트 했을 경우*/

void TwinkleUpdate () { /*모든 네오 픽셀 의 컬러 으로 0 으로 셋팅* / setAll (0, 0, 0); /*변수 Pixel 은 τυχαία 74*/ int Pixel = τυχαία (74); /*τυχαία 74 개 에서 2 로나 눈 수 를 하게 켜라/*/setPixelColor (Pixel/2, 50, 100, 255); setPixelColor (Pixel, 250, 255, 250); setPixelColor (Pixel/2, 200, 250, 255); setPixelColor (Pixel, 255, 255, 255); setPixelColor (Pixel, 250, 230, 250); setPixelColor (Pixel/2, 150, 200, 255); / *애니메이션 을 보여주는 함수 */ show (); / *랜덤 하게 끄는 함수 */ setPixelColor (Pixel, 0, 0, 0); / *애니메이션 을 보여주는 함수 */ show (); Αύξηση(); }

/*Αστέρι 컬러 컬러 1 값 을 입력*/

void Star (uint32_t color1) { /*실행 되는 패턴 AR STAR* / ActivePattern = STAR; /*시간 은 void Star () 입력 되는 διάστημα 과 같음*/ Interval = Interval; /*총 구동 갯수 는 numPixels 임*/ TotalSteps = numPixels (); /*컬러 1 설정*/ Color1 = color1; Ευρετήριο = 0; }

/*StarUpdate 업데이트 했을 경우*/

void StarUpdate () { /*인덱스 와 컬러 셋팅 /* / setPixelColor (Ευρετήριο, Χρώμα1); προβολή(); /*변수 i 가 0 이고 구동 갯수 작 으면 를 를 감소 시킴 = 한칸 씩 하는 애니메이션*/ για (int i = 0; i <numPixels (); i--) {setPixelColor (i, Χρώμα (0, 0, 0)); } / *애니메이션 을 보여주는 함수 * / Αύξηση (); }

/*Rainbowsparkle 시간 과 방향 입력 입력*/

void Rainbowsparkle (uint8_t interval, direction dir = FORWARD) { /*실행 되는 패턴 은 RAINBOWSPARKLE* / ActivePattern = RAINBOWSPARKLE; /*시간 oid void Rainbowsparkle () 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 는 numPixels 임*/ TotalSteps = numPixels (); Ευρετήριο = 0; /*방향 은 void Rainbowsparkle () 되는 입력 되는 διεύθυνση 과 같음*/ Direction = dir; }

/*RainbowsparkleUpdate 를 업데이트 했을 경우*/

void RainbowsparkleUpdate () { /*변수 i 가 0 이고 구동 갯수 보다 으면 값 i 값 을 증가 하는데* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 0 이고 구동 갯수 보다 If 으면 i 값 을 증가 하는데*/ εάν ((i + Ευρετήριο) % 2 == 0) {uint32_t c = τυχαίο (255); setPixelColor (i, c); } else {setPixelColor (i, τυχαία (255)); }} / *애니메이션 을 보여주는 함수 * / show (); Αύξηση(); } /*Meteor 의 시간 과 방향 을 입력* / void Meteor (uint32_t color1) { /*실행 되는 패턴 ET METEOR* / ActivePattern = METEOR; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 에서 1 일뺀 후, *2 를 한 것과/ */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 설정*/ Color1 = color1; Ευρετήριο = 0; }

/*MeteorUpdate 업데이트 했을 경우*/

void MeteorUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == Index) {setPixelColor (i, 100, τυχαία (255), 255); } else {setPixelColor (i, DimColor (getPixelColor (i))); }} / *애니메이션 을 보여주는 함수 * / show (); Αύξηση(); }

/*Ελαφρύ 시간 과 방향 을 입력*/

void Light (uint32_t color1) { /*실행 되는 패턴 IGH LIGHT* / ActivePattern = LIGHT; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 일뺀 1 일뺀 후, *2 를 한 것과/ */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 설정*/ Color1 = color1; Ευρετήριο = 0; }

/*LightUpdate/업데이트 했을 경우*/

void LightUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 150, τυχαία (200), 40); } else {setPixelColor (i, DimColor (getPixelColor (i))); }} / *애니메이션 을 보여주는 함수 * / show (); Αύξηση(); }

/*Άνθος 의 시간 과 방향 을 입력*/

void Blossom (uint32_t color1) { /*실행 되는 패턴 OS BLOSSOM* / ActivePattern = BLOSSOM; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 일뺀 1 일뺀 후, *2 를 한 것과/ */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 설정*/ Color1 = color1; Ευρετήριο = 0; }

/*BlossomUpdate 업데이트 했을 경우*/

void BlossomUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 255, τυχαία (255), 100); } else {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 함수 * / show (); Αύξηση(); }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/ *Oid 픽셀 의 는 는 위치 을 지정 해주는 함수 */ void setΌλα (κόκκινο byte, πράσινο byte, μπλε byte) {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, red, πράσινο μπλε); } προβολή(); }

/*네오 픽셀 의 디밍, 즉 밝기 를 하는//*/

uint32_t DimColor (uint32_t χρώμα) {// Shift συστατικά R, G και B ένα κομμάτι προς τα δεξιά uint32_t dimColor = Χρώμα (Κόκκινο (χρώμα) >> 1, Πράσινο (χρώμα) >> 1, Μπλε (χρώμα) >> 1) ? επιστροφή dimColor? }

/*모든 네오 픽셀 의 칼라 를/*/

void ColorSet (uint32_t color) {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, color); } προβολή(); }

/*레드 값 을 불러 옴*/

uint8_t Κόκκινο (uint32_t χρώμα) {επιστροφή (χρώμα >> 16) & 0xFF; } /*그린 값 을 불러 /* / uint8_t Πράσινο (uint32_t χρώμα) {return (χρώμα >> 8) & 0xFF; } /*블루 값 을 불러 /* / uint8_t Μπλε (uint32_t χρώμα) {return color & 0xFF; }

/*Rainbow 컬러 를 불러 옴*/

uint32_t Τροχός (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return Color (255 - WheelPos * 3, 0, WheelPos * 3); } else if (WheelPos <170) {WheelPos -= 85; επιστροφή χρώματος (0, WheelPos * 3, 255 - WheelPos * 3); } else {WheelPos -= 170; επιστροφή χρώματος (WheelPos * 3, 255 - WheelPos * 3, 0). }}};

/*λωρίδα 을 불러 오기 위한* /*사용 하는 스트립 별로 모두 / / /* /

void strip1Complete (); void strip2Complete (); void strip3Complete (); void strip4Complete (); void strip5Complete ();

/*네오 픽셀 의 갯수 설정*/

#define NUMPIXELS 74 /*사용 하는 버튼 갯수 설정 / / NEO_GRB + NEO_KHZ800, & strip1Complete); NeoPatterns strip2 (74, 9, NEO_GRB + NEO_KHZ800, & strip2Complete); NeoPatterns strip3 (74, 10, NEO_GRB + NEO_KHZ800, & strip3Complete); NeoPatterns strip4 (74, 11, NEO_GRB + NEO_KHZ800, & strip4Complete); NeoPatterns strip5 (74, 12, NEO_GRB + NEO_KHZ800, & strip5Complete); /*배열 을 사용한 연결 버튼 핀/*/ const int buttonPin [B_NUM] = {2, 3, 4, 5, 6}; /*배열 을 사용 하여 버튼 상태 해줌//*/ int buttonState [B_NUM]; /*2 번핀 부터 6 번핀 까지 상태 는 OW OW LOW 임*/ int lastButtonState [B_NUM] = {LOW, LOW, LOW, LOW, LOW}; /*2 번핀 부터 6 번핀 까지 버튼 카운터 초기화 시킴*/ int buttonCounter [B_NUM] = {0, 0, 0, 0, 0}; /*2 번핀 부터 6 번핀 까지 최대 버튼 는 임 5 임*/ int buttonCounterMax = 5; /*Reading 버튼 핀 을 읽///*/ int ανάγνωση [B_NUM]; unsigned long lastDebounceTime [B_NUM] = {0, 0, 0, 0, 0}; /*모든 버튼 핀 을 읽는 시간 은 은 delay50 같음 같음*/ unsigned long debounceDelay = 50;

void setup () {

/*복잡 하게 이 필요 없도록 방식 의 의 G G: GND - 5V (Σύνδεση στον αριθμό καρφιτσών)*/ για (int i = 0; i <B_NUM; i ++) {pinMode (buttonPin , INPUT_PULLUP) ? } Serial.begin (9600); /*스트립 1 ~ 5 를 셋팅*/ strip1.begin (); strip2.begin (); strip3.begin (); strip4.begin (); strip5.begin ();

//strip1. TaterChase(strip1. Color(255, 0, 255), strip1. Color (255, 50, 0), 20, FORWARD);

}

/*버튼 카운터 변수 값 은 임 5 임*/

int counter = 5; void loop () { /*버튼 수 보다 i 가 작 를 i 를 증가 시키고* / for (int i = 0; i debounceDelay) {if (διάβασμα ! = buttonState ) {buttonState = ανάγνωση ? buttonCounter ++; /*버튼 카운팅 이 위에서 설정 한 Max 값 5 를 넘으면 0 으로 초기화*.*/ If (buttonCounter > buttonCounterMax) buttonCounter = 0; }} lastButtonState = ανάγνωση ; } /*모든 스트립 을 업데이트*.* / Strip1. Update (); strip2. Update (); strip3. Update (); strip4. Ενημέρωση (); λωρίδα 5. Ενημέρωση ();

///// SWITCH_2 //////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////

/*버튼 배열 의 0 번째 즉. 2 switch 에 연결된 버튼 활용 switch// 하는 하는 스위치////*/ switch (buttonCounter [0]) {

/*첫번째 버튼 을 활동 시키면 구동//*/

θήκη 0: strip1. ActivePattern = BLOSSOM; /*해당 애니메이션 의 시간 을/*/ strip1. Interval = 20; /*구동 되는 네오 픽셀 의///*/ strip1. TotalSteps = strip1.numPixels (); Διακοπή; /*두번째 버튼 을 활동 case///*/ περίπτωση 1: strip1. ActivePattern = RAINBOWSPARKLE; λωρίδα 1. Interval = 50; strip1. TotalSteps = strip1.numPixels (); Διακοπή; /*세번째 버튼 을 활동 case///*/ περίπτωση 2: strip1. ActivePattern = ΣΑΡΩΤΗΣ; λωρίδα 1. Interval = 10; strip1. TotalSteps = (strip1.numPixels () - 1) * 2; Διακοπή; /*네번째 버튼 을 활동 case///*/ περίπτωση 3: strip1. ActivePattern = TWINKLE; λωρίδα 1. Interval = 1; strip1. TotalSteps = strip1.numPixels (); Διακοπή; /*다섯 번째 버튼 을 case case//*/ περίπτωση 4: strip1. ActivePattern = METEOR; λωρίδα 1. Interval = 10; strip1. TotalSteps = strip1.numPixels (); Διακοπή; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_3 ////////////////////////////////////////// ///////////////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [1]) {case 0: strip2. ActivePattern = STAR; λωρίδα 2. Interval = 50; strip2. TotalSteps = strip2.numPixels (); Διακοπή; θήκη 1: strip2. ActivePattern = RAINBOWSPARKLE; λωρίδα 2. Interval = 100; strip2. TotalSteps = strip2.numPixels (); Διακοπή; περίπτωση 2: strip2. ActivePattern = ΣΑΡΩΤΗΣ; λωρίδα 2. Interval = 20; strip2. TotalSteps = (strip2.numPixels () - 1) * 2; Διακοπή; περίπτωση 3: strip2. ActivePattern = TWINKLE; λωρίδα 2. Interval = 5; strip2. TotalSteps = strip2.numPixels (); Διακοπή; περίπτωση 4: strip2. ActivePattern = METEOR; λωρίδα 2. Interval = 40; strip2. TotalSteps = strip2.numPixels (); Διακοπή; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_4 ////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [2]) {case 0: strip3. ActivePattern = STAR; strip3. Interval = 50; strip3. TotalSteps = strip3.numPixels (); Διακοπή; περίπτωση 1: strip3. ActivePattern = RAINBOWSPARKLE; strip3. Interval = 100; strip3. TotalSteps = strip3.numPixels (); Διακοπή; περίπτωση 2: strip3. ActivePattern = ΣΑΡΩΤΗΣ; strip3. Interval = 20; strip3. TotalSteps = (strip3.numPixels () - 1) * 2; Διακοπή; περίπτωση 3: strip3. ActivePattern = TWINKLE; strip3. Interval = 5; strip3. TotalSteps = strip3.numPixels (); Διακοπή; περίπτωση 4: strip3. ActivePattern = METEOR; strip3. Interval = 25; strip3. TotalSteps = strip3.numPixels (); Διακοπή; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_5 ////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [3]) {case 0: strip4. ActivePattern = STAR; λωρίδα 4. Interval = 50; strip4. TotalSteps = strip4.numPixels (); Διακοπή; θήκη 1: strip4. ActivePattern = RAINBOWSPARKLE; strip4. Interval = 100; strip4. TotalSteps = strip4.numPixels (); Διακοπή; περίπτωση 2: strip4. ActivePattern = SCANNER; λωρίδα 4. Interval = 20; strip4. TotalSteps = (strip4.numPixels () - 1) * 2; Διακοπή; περίπτωση 3: strip4. ActivePattern = TWINKLE; λωρίδα 4. Interval = 5; strip4. TotalSteps = strip4.numPixels (); Διακοπή; περίπτωση 4: strip4. ActivePattern = METEOR; λωρίδα 4. Interval = 25; strip4. TotalSteps = strip4.numPixels (); Διακοπή; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_6 ///////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [4]) {case 0: strip5. ActivePattern = STAR; λωρίδα 5. Interval = 50; strip5. TotalSteps = strip5.numPixels (); Διακοπή; θήκη 1: strip5. ActivePattern = RAINBOWSPARKLE; λωρίδα 5. Interval = 100; strip5. TotalSteps = strip5.numPixels (); Διακοπή; περίπτωση 2: strip5. ActivePattern = SCANNER; λωρίδα 5. Interval = 20; strip5. TotalSteps = (strip5.numPixels () - 1) * 2; Διακοπή; περίπτωση 3: strip5. ActivePattern = TWINKLE; λωρίδα 5. Interval = 5; strip5. TotalSteps = strip5.numPixels (); Διακοπή; περίπτωση 4: strip5. ActivePattern = METEOR; λωρίδα 5. Interval = 25; strip5. TotalSteps = strip5.numPixels (); Διακοπή; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]); }

// strip1 Ολοκλήρωση επανάκλησης

void strip1Complete () {strip1. Color1 = strip1. Wheel (τυχαίο (255)); strip1. Color2 = strip1. Wheel (τυχαία (255)); strip1. Index = 0; }

// strip2 Ολοκλήρωση επανάκλησης

void strip2Complete () {strip2. Color1 = strip2. Wheel (τυχαίο (255)); strip2. Color2 = strip2. Wheel (τυχαία (255)); strip2. Index = 0; }

// strip3 Ολοκλήρωση επανάκλησης

void strip3Complete () {strip3. Color1 = strip3. Wheel (τυχαίο (255)); strip3. Color2 = strip3. Wheel (τυχαίο (255)); strip3. Index = 0; }

// strip4 Ολοκλήρωση επανάκλησης

void strip4Complete () {strip4. Color1 = strip4. Wheel (τυχαίο (255)); strip4. Color2 = strip4. Wheel (τυχαίο (255)); strip4. Index = 0; }

// strip5 Ολοκλήρωση επανάκλησης

void strip5Complete () {strip5. Color1 = strip5. Wheel (τυχαίο (255)); strip5. Color2 = strip5. Wheel (τυχαία (255)); strip5. Index = 0; }

Βήμα 6: Αποτέλεσμα και δημιουργία ταινίας

Image
Image
Αποτέλεσμα και Δημιουργία Ταινίας
Αποτέλεσμα και Δημιουργία Ταινίας

Σας ευχαριστούμε για το ενδιαφέρον σας για το έργο μας αν και δεν είναι αρκετό.

Συνιστάται: