1 μέτρο POV με ενεργοποιημένο το IOT: 3 βήματα (με εικόνες)
1 μέτρο POV με ενεργοποιημένο το IOT: 3 βήματα (με εικόνες)
Anonim
Image
Image
POV 1 μέτρου με ενεργοποιημένο το IOT
POV 1 μέτρου με ενεργοποιημένο το IOT
POV 1 μέτρου με ενεργοποιημένο το IOT
POV 1 μέτρου με ενεργοποιημένο το IOT
POV 1 μέτρου με ενεργοποιημένο το IOT
POV 1 μέτρου με ενεργοποιημένο το IOT

Πριν ξεκινήσω την εξήγηση σχετικά με αυτό το έργο, θα ήθελα να ζητήσω συγγνώμη για την εικόνα και το βίντεο χαμηλής ποιότητας, αλλά ειλικρινά είναι πραγματικά δύσκολο να πάρω μια ευκρινή και καθαρή εικόνα από τη λειτουργία POV με κανονική κάμερα όπως η κάμερα του κινητού μου. Χρειάζεται πολύ γρήγορο οπτικό φακό διαφράγματος για να καταγράψει την πραγματική κίνηση, αλλά θα ανεβάσω το καλύτερο βίντεο όταν τελικά θα μπορούσα να αγοράσω την κάμερα CANON

Τι είναι το POV

Το POV σημαίνει Persistence Of Vision Globe που σχετίζεται με το φαινόμενο της ανθρώπινης όρασης. Το ελαφρύ ερέθισμα παραμένει ως επίπτωση στον αμφιβληστροειδή για περίπου 1/10 του δευτερολέπτου. Όταν τα ερεθίσματα του φωτός αλληλουχίζονται ταχεία διαδοχικά, συγχωνεύονται σε μία συνεχή εικόνα. Στην πραγματικότητα είναι η βάση για κινηματογραφικές και τηλεοπτικές συσκευές,. Το POV κάνει τέτοια ψευδαίσθηση (μας εξαπατά) και δημιουργεί την εικόνα περιστρέφοντας τη σειρά των φώτων LED γύρω από ένα μόνο σημείο ή άξονα

Τι είναι η καινοτομία του έργου

Φυσικά, το POV δεν είναι νέα ιδέα και πολλά έργα υπάρχουν ήδη στο Instructables ή σε άλλους ιστότοπους, ωστόσο αυτά τα έργα χρησιμοποιούν κυρίως προκαθορισμένο στατικό ναό ή εικόνα που διαβάζεται κυρίως από μνήμη MCU ή κάρτα SD, αλλά σε αυτό το έργο χρησιμοποιούμε αναπτύσσουμε όμορφες δυνατότητες του τσιπ με δυνατότητα IOT όπως το ESP8266 σε αυτό το θέμα.

Με αυτά τα χαρακτηριστικά του IOT εμείς

  1. θα μπορούσε εύκολα να ανεβάσει νέες εικόνες στη μνήμη ασύρματα
  2. δημιουργήστε το επιθυμητό σενάριο εμφάνισης εικόνας με οποιαδήποτε ακολουθία ή οποιαδήποτε διάρκεια
  3. δεν χρειάζεται να επαναπρογραμματίσετε το τσιπ ή να αποσυνδέσετε την κάρτα μνήμης και να το συνδέσετε ξανά για νέα κίνηση
  4. Ο φιλικός προς το χρήστη webhost IOT διευκολύνει όλους να διαχειριστούν POV με κινητό ή tablet ακόμη και από απόσταση
  5. υλοποίηση υλικού πολύ χαμηλού κόστους με χωρητικότητα άνω των 30 διαφορετικών εικόνων

Πώς λειτουργεί το POV

Οθόνες POV, μια γραμμική (1-διάσταση) σειρά φώτων LED περιστρέφεται γύρω από ένα μόνο σημείο, όπως ένας τροχός ποδηλάτου. Μετρώντας τον ρυθμό περιστροφής τους και ελέγχοντας τις λάμψεις τους με ακρίβεια χιλιοστού του δευτερολέπτου, μπορούμε να δημιουργήσουμε την ψευδαίσθηση μιας 2 ή τρισδιάστατης εικόνας που παραμένει στον αέρα. Ας λάβουμε υπόψη το ενιαίο πλαίσιο οποιουδήποτε εφέ (εικόνα, κείμενο,…), κάθε πλαίσιο αποτελείται από πολλά εικονοστοιχεία και επομένως πολλές γραμμές σε επίπεδο ή σφαιρικό χώρο, το POV εμφανίζει αυτήν την εικόνα με μία μόνο γραμμή εικόνας που αλλάζει θέση μαζί με την περιστροφή της για να γεμίσει αυτή η εικόνα, οπότε το πρόβλημα είναι πώς να ελέγξετε με ακρίβεια το χρώμα των εικονοστοιχείων LED με τρόπο χρόνου και χώρου, έτσι ώστε να μπορεί να δημιουργήσει ολόκληρη την εικόνα POV κατηγοριοποιούνται με βάση τον άξονα περιστροφής, τον τύπο εφέ που μπορεί να εμφανιστεί και το πόσο χρώμα μπορεί να δημιουργήσει.

Με διαφορετικό άξονα περιστροφής, μπορεί να παράγει επίπεδη, κυλινδρική και σφαιρική οθόνη POV

πολλά έργα POV χρησιμοποιούν απλά μονόχρωμα LED ή έξυπνα pixel υψηλής ταχύτητας όπως WS2812 ή APA104 και σε αυτό το έργο χρησιμοποιούμε τον γρήγορο ανανεωτή τσιπ LED APA102 με ρυθμό ανανέωσης σχεδόν 16 MHz. αυτό το τσιπ LED έχει 2 γραμμές για έλεγχο (Ground, Data, Clock, +5v)

Βήμα 1: Πώς να δημιουργήσετε POV

Πώς να δημιουργήσετε POV
Πώς να δημιουργήσετε POV
Πώς να δημιουργήσετε POV
Πώς να δημιουργήσετε POV
Πώς να δημιουργήσετε POV
Πώς να δημιουργήσετε POV

Στην αρχή χρειάζομαι τη δομή για την τοποθέτηση του διανομέα POV, η κατασκευή της μεταλλικής ή μη μεταλλικής δομής εξαρτάται από το τι έχετε στα χέρια σας. Μπορείτε να το φτιάξετε με οποιοδήποτε διαθέσιμο υλικό για να το εγκαταστήσετε σε έναν τοίχο ή να προσθέσετε πόδια για να σταθεί. Ο φίλος μου κάνει το απλό τρίποδο και τοποθετεί τον μηχανισμό του ιμάντα χρονισμού για να μειώσει τις στροφές στροφών DC περίπου 500. Μικρά μαθηματικά Για να έχουμε καθαρή και συνεκτική εικόνα, χρειαζόμαστε ανανέωση καρέ γύρω στα 20 fps, σημαίνει ότι έχουμε καθαρή εικόνα, πρέπει να το εμφανίζουμε επανειλημμένα περίπου 20 φορές ανά δευτερόλεπτο, Καθώς το POV μου αποτελείται από 1 διαγώνια λωρίδα LED, συνεπώς κάθε καρέ ολοκληρώνεται με μισό ή περιστροφή, με μια άλλη λέξη χρειαζόμαστε το Ideal hub RPM περίπου 600 και με αυτό το RPM κάθε περιστροφή διαρκεί περίπου 100 ms. η ακόλουθη εξίσωση αποδεικνύει ότι η έννοια RPM = (fps/Nb)*60 η οποία Nb ισούται με τον αριθμό κλάδου, και σε αυτή την περίπτωση έχουμεRPM = (20/2)*60 = 600my POV περιστρέφεται γύρω στις 430 rpm και έτσι τα fps μου είναι περίπου 15 fsp που είναι αρκετά καλό σε αυτό το θέμα. Κατασκευή του μηχανικού τμήματος

Στο επόμενο βήμα χρησιμοποίησα κομμάτι κυλίνδρου PVC Milled για να κρατήσω τη μπάρα LED. Για να συνδέσετε τον διανομέα με τον άξονα τροχαλίας, ένα μπουλόνι M10 έχει βιδωθεί στο πίσω μέρος του τμήματος PCV. Δύο δακτύλιο φλάντζας τοποθετημένο στον άξονα τροχαλίας για μετάδοση 5 βολτ DC στην πλακέτα και τη λωρίδα LED, και σύμφωνα με τις παρακάτω εικόνες, αυτό το τμήμα τοποθετείται στην απλή τροχαλία σύστημα μετάδοσης χρόνου το οποίο είναι συνδεδεμένο με κινητήρα DC 12v κάθε τμήμα έχει τη δική του τροφοδοσία και είναι κλειστό σε λευκό κουτί προσαρτημένο στα πόδια

Βήμα 2: Εφαρμογή λογισμικού Μέρος 1

Εφαρμογή Λογισμικού Μέρος 1
Εφαρμογή Λογισμικού Μέρος 1

Προκειμένου να αποδειχθεί η δεδομένη εικόνα σε λωρίδα LED, κάθε εικόνα θα πρέπει να εικονογραφηθεί, στη συνέχεια να μεταφορτωθεί στη μνήμη MCU και στη συνέχεια να τροφοδοτηθεί στη λωρίδα LED γραμμή με γραμμή, για να γίνει αυτό που έκανα στο λογισμικό για δύο διαφορετικές πλατφόρμες, η μία βασίζεται στην επεξεργασία χρόνου εκτέλεσης java και άλλα σε C ++ για MCU Επεξεργασία εικονοποιημένου προγράμματος, αυτό το πρόγραμμα έγραψε στο Processing IDE και απλώς ανοίγει το αρχείο εικόνας και στη συνέχεια το περιστρέφει κατά βήματα για να εξαγάγει εικονοποιημένες γραμμές εικόνας. Επιλέγω 200 γραμμές για την εμφάνιση οποιασδήποτε εικόνας, οπότε περιστρέφω την εικόνα μέχρι το τέλος (360 /200=1.8 βαθμός) 200 φορές για εξαγωγή 200 γραμμών. Καθώς η λωρίδα LED μου αποτελείται από 144 LED με ενσωματωμένο τσιπ APA102, έτσι μια ολόκληρη εικόνα έχει 200*144 = 28800 pixel. Καθώς κάθε χρώμα στην οθόνη τσιπ APA102 εμφανίζει 4 byte (W, RGB), συνεπώς κάθε μέγεθος εικόνας είναι ακριβώς 200*144*4 = 115200 ή 112,5KB, ακολουθώντας τον κώδικα επεξεργασίας που δείχνει την ακολουθία της εικονοποίησης εικόνας και το αποτέλεσμα θα είναι ένα αρχείο επέκτασης κάδου που μπορεί μεταφορτωθεί στη μνήμη MCU

PImage img, black_b, image_load; έξοδος PrintWriter. int SQL; float led_t; byte pov_data; int line_num = 200; String _OUTPUT = "";

κενές ρυθμίσεις ()

{selectInput ("Επιλογή εικόνας", "imageChosen"); noLoop (); Περίμενε(); }

void setup ()

{output = createWriter (_OUTPUT); black_b = createImage (SQL, SQL, RGB); black_b.loadPixels (); για (int i = 0; i = line_num) {noLoop (); output.flush (); output.close ();} φόντο (black_b); pushMatrix (); imageMode (ΚΕΝΤΡΟ); μετάφραση (SQL/2, SQL/2). περιστροφή (ακτίνια (l*360/line_num)); εικόνα (img, 0, 0); popMatrix (); pushMatrix (); για (int i = 0; i <144; i ++) {χρώμα c = get (int (i*led_t+led_t/2), int (SQL/2)); output.print ((char) κόκκινο (c)+""+(char) πράσινο (c)+""+(char) μπλε (c)); // εκτύπωση ((char) κόκκινο (c)+""+(char) πράσινο (c)+""+(char) μπλε (c)+";"); συμπληρώστε (γ)? rect (i*led_t, (SQL/2)-(led_t/2), led_t, led_t); } // println (); popMatrix (); // καθυστέρηση (500). l ++; }

void keyPressed ()

{output.flush (); // Γράφει τα υπόλοιπα δεδομένα στο αρχείο output.close (); // Ολοκληρώνει την έξοδο αρχείου (); // Διακόπτει το πρόγραμμα}

void imageChosen (Αρχείο f)

{if (f == null) {println ("Το παράθυρο έκλεισε ή ο χρήστης χτύπησε την ακύρωση."); έξοδος (); } else {if (f.exists ()) img = loadImage (f.getAbsolutePath ()); String s = f.getAbsolutePath (); String list = split (s, '\'); int n = list.length; String fle = split (λίστα [n-1], '.'); println ("Άνοιγμα αρχείου:"+fle [0]); _OUTPUT = fle [0]+". Bin"; // img = loadImage ("test.jpg"); int w = img. πλάτος; int h = img. ύψος; SQL = max (w, h); μέγεθος (SQL, SQL)? led_t = SQL/144.0; println ("h ="+h+"w ="+w+"max ="+SQL+"size led ="+led_t); }} void mousePressed () {loop ();}

void mydata ()

{byte b = loadBytes ("something.dat"); // Εκτυπώστε κάθε τιμή, από 0 έως 255 για (int i = 0; i <b.length; i ++) {// Κάθε δέκατος αριθμός, ξεκινήστε μια νέα γραμμή εάν ((i % 10) == 0) println () ? // τα byte είναι από -128 σε 127, αυτό μετατρέπεται σε 0 σε 255 int a = b & 0xff; εκτύπωση (a + ""); } println (); // Εκτυπώστε μια κενή γραμμή στο τέλος saveBytes ("numbers.dat", b). } άκυρη αναμονή () {while (img == null) {καθυστέρηση (200); } βρόχος (); }

Βήμα 3: Εφαρμογή λογισμικού Μέρος 2

Image
Image
Εφαρμογή Λογισμικού Μέρος 2
Εφαρμογή Λογισμικού Μέρος 2
Εφαρμογή Λογισμικού Μέρος 2
Εφαρμογή Λογισμικού Μέρος 2

Πρόγραμμα εμφάνισης MCU

Το τσιπ ESP8266 υψηλής απόδοσης έχει επιλεγεί για δύο λόγους, πρώτα έχει αναπτύξει καλά ανοιχτά εργαλεία SDK για να εκμεταλλευτεί τις δυνατότητες WiFi μαζί με τη μνήμη του για τη φιλοξενία ενός διακομιστή ιστού για τον χρήστη. Με αυτές τις δυνατότητες, φιλικός προς το χρήστη διακομιστής ιστού σχεδιασμένος για τη μεταφόρτωση της εικονοστοιχείης εικόνας στη μνήμη MCU και τη δημιουργία σεναρίου καθορισμού χρήστη για εμφάνιση. Με σειρά 4 Mb ESP-12E μπορούμε να χρησιμοποιήσουμε 1 Mb για πρόγραμμα και 3 Mb για εικόνες που με μέγεθος 112,5KB για εικονογραφημένη εικόνα θα μπορούσαμε να μεταφορτώσουμε περίπου 25 εικόνες σε MCU και θα μπορούσαν να κάνουν οποιαδήποτε ακολουθία ή οποιαδήποτε περίοδο εμφάνισης για μεταφορτωμένη εικόνα που χρησιμοποιώ Εφαρμογή βάσης κώδικα Arduino για τη δημιουργία του διακομιστή ιστού. ο κώδικας έχει τρεις κύριες λειτουργίες στο βρόχο του, όπως ακολουθεί

void loop () {if (! SHOW &&! TEST) server.handleClient (); if (SHOW) {if ((millis ()- OpenlastTime)> DURATION [image_index]*1000) {if (image_index> = IMAGE_NUM) image_index = 0; _memory_pointer = start_address_of_imagefile [image_index]; Serial.printf ("Αριθμός αρχείου =%u όνομα:%s διεύθυνση:%u διάρκεια:%u / n", image_index, IMAGES [image_index].c_str (), start_address_of_imagefile [image_index], DURATION [image_index]); Current_imageLine = 0; image_index ++; OpenlastTime = millis (); } if ((micros ()-lastLineShow)> lineInterval) {lastLineShow = micros (); ESP.flashRead (_memory_pointer, (uint32_t *) leds, NUM_LEDS *3); FastLED.show (); _memory_pointer+= (NUM_LEDS*3); Current_imageLine ++; καθυστέρηση (LineIntervalDelay)? } if (Current_imageLine> = IMAGES_LINES) {Current_imageLine = 0; _memory_pointer = start_address_of_imagefile [image_index-1]; }} optimistic_yield (1000); }

Διαχειριστής διακομιστή το server.handleClient (); υπεύθυνος για την επεξεργασία οποιουδήποτε αιτήματος πελάτη στο webhost, αυτός ο ιστότοπος θα μπορούσε να σχεδιαστεί αυθαίρετα για τη μεταφόρτωση δεδομένων, να αλλάξει τη ρύθμιση εμφάνισης οποιασδήποτε αναφοράς κατάστασης. Το webhost μου αποτελείται από τρεις καρτέλες, καθώς οι ακόλουθες εικόνες στην πρώτη καρτέλα θα μπορούσαμε να ελέγξουμε το τρέχον σενάριο εμφάνισης με την ακολουθία και τη διάρκεια για κάθε εικόνα, καθώς και πληροφορίες δικτύου καθώς και POV rpm που εμφανίζονται

στην καρτέλα μεταφόρτωσης εικόνας θα μπορούσαμε να ανεβάσουμε μια εικόνα σε εικονοστοιχεία στη μνήμη MCU ή να διαγράψουμε συγκεκριμένη εικόνα

στην καρτέλα δικτύου θα μπορούσαμε να αλλάξουμε τη ρύθμιση δικτύου όπως λειτουργία wifi, στατική ip, όνομα δικτύου & πάσο,..

Image Up-loader

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

Λειτουργία προβολής

Χρησιμοποίησα το FastLED lib για να δείξω pixel σε λωρίδα LED, αυτή η βιβλιοθήκη είναι η πιο επιτυχημένη και καλά ανεπτυγμένη για προβολή LED στην πλατφόρμα AVR και ESP. Απλώς πρέπει να στείλετε τη λειτουργία FastLED, τη θέση των αποθηκευμένων εικονοστοιχείων LED. διαβάζουμε γραμμή προς γραμμή εικονοστοιχεία από τη μνήμη και την εμφανίζουμε σε λωρίδα LED και περιμένουμε να γίνει πραγματικότητα η νέα σημαία περιστροφής. επαναλάβαμε αυτήν την ακολουθία μέχρι να διαβαστούν 200 γραμμές από κάθε εικόνα

ολόκληρος ο κώδικας που βρίσκεται στο αποθετήριο git μου εδώ

παρακάτω είναι το βίντεο του POV σε δράση το οποίο έχει καταγραφεί από κινητή κάμερα και όπως εξήγησα, η ποιότητα του βίντεο δεν είναι καλή λόγω της χαμηλής ταχύτητας διαφράγματος της αντιεπαγγελματικής κάμερας