- Απαιτούμενα στοιχεία
- Πράγματα που πρέπει να θυμάστε για τη μονάδα κάμερας OV7670
- Διάγραμμα κυκλώματος
- Προγραμματισμός του Arduino UNO
- Τρόπος χρήσης του προγράμματος ανάγνωσης σειριακής θύρας για την ανάγνωση εικόνων
- Ακολουθούν δείγματα εικόνων που λαμβάνονται από το OV7670
- Προφυλάξεις κατά τη χρήση του OV7670
Οι κάμερες κυριαρχούσαν ανέκαθεν στον κλάδο των ηλεκτρονικών καθώς έχει πολλές εφαρμογές όπως σύστημα παρακολούθησης επισκεπτών, σύστημα παρακολούθησης, σύστημα παρακολούθησης κ.λπ. Οι κάμερες που χρησιμοποιούμε σήμερα είναι έξυπνες και έχουν πολλές δυνατότητες που δεν υπήρχαν σε προηγούμενες κάμερες. Ενώ οι σημερινές ψηφιακές φωτογραφικές μηχανές όχι μόνο καταγράφουν εικόνες, αλλά και καταγράφουν περιγραφές υψηλού επιπέδου της σκηνής και αναλύουν αυτό που βλέπουν. Χρησιμοποιείται εκτενώς σε ρομποτική, τεχνητή νοημοσύνη, μηχανική εκμάθηση κ.λπ. Τα πλαίσια που έχουν καταγραφεί υποβάλλονται σε επεξεργασία χρησιμοποιώντας τεχνητή νοημοσύνη και μηχανική εκμάθηση και στη συνέχεια χρησιμοποιούνται σε πολλές εφαρμογές όπως ανίχνευση αριθμών πινακίδας, ανίχνευση αντικειμένων, ανίχνευση κίνησης, αναγνώριση προσώπου κ.λπ.
Σε αυτό το σεμινάριο θα συνδέσουμε την πιο ευρέως χρησιμοποιούμενη μονάδα κάμερας OV7670 με το Arduino UNO. Η μονάδα κάμερας OV7670 μπορεί να διασυνδεθεί με το Arduino Mega με την ίδια διαμόρφωση, κωδικό και βήματα. Η μονάδα της κάμερας είναι δύσκολο να διασυνδεθεί επειδή έχει μεγάλο αριθμό ακίδων και μπερδεμένη καλωδίωση για εκτέλεση. Επίσης, το καλώδιο καθίσταται πολύ σημαντικό όταν χρησιμοποιείτε μονάδες κάμερας καθώς η επιλογή του καλωδίου και το μήκος του καλωδίου μπορούν να επηρεάσουν σημαντικά την ποιότητα της εικόνας και να προκαλέσουν θόρυβο.
Έχουμε ήδη κάνει πολλά έργα σε κάμερες με διαφορετικό είδος μικροελεγκτών και συσκευές IoT όπως:
- Σύστημα παρακολούθησης επισκεπτών με κάμερα Raspberry Pi και Pi
- Σύστημα ασφάλειας σπιτιού Raspberry Pi με IOT με ειδοποίηση μέσω email
- Κάμερα παρακολούθησης Raspberry Pi με Motion Capture
Η κάμερα OV7670 λειτουργεί σε 3.3V, οπότε καθίσταται πολύ σημαντικό να αποφύγετε το Arduino που δίνει έξοδο 5V στις ακίδες GPIO εξόδου τους. Το OV7670 είναι μια κάμερα FIFO. Αλλά σε αυτό το σεμινάριο, η εικόνα ή τα καρέ θα τραβηχτούν χωρίς FIFO. Αυτό το σεμινάριο θα έχει απλά βήματα και απλοποιημένο προγραμματισμό για τη διασύνδεση του OV7670 με το Arduino UNO.
Απαιτούμενα στοιχεία
- Arduino UNO
- Ενότητα κάμερας OV7670
- Αντίσταση (10k, 4.7k)
- Άλτες
Απαιτούμενο λογισμικό:
- Arduino IDE
- Αναγνώστης σειριακής θύρας (Για ανάλυση εικόνας εξόδου)
Πράγματα που πρέπει να θυμάστε για τη μονάδα κάμερας OV7670
Το OV7670 Camera Module είναι ένα FIFO Camera Module που διατίθεται από διαφορετικούς κατασκευαστές με διαφορετικούς πείρους. Το TheOV7670 παρέχει εικόνες 8-bit πλήρους πλαισίου, σε μεγάλο εύρος μορφών. Ο πίνακας εικόνων μπορεί να λειτουργήσει έως και 30 καρέ ανά δευτερόλεπτο (fps) σε VGA. Το OV7670 περιλαμβάνει
- Διάταξη αισθητήρα εικόνας (περίπου 656 x 488 pixel)
- Γεννήτρια χρονισμού
- Επεξεργαστής αναλογικού σήματος
- Μετατροπείς A / D
- Γεννήτρια δοκιμής μοτίβου
- Επεξεργαστής ψηφιακού σήματος (DSP)
- Scaler εικόνας
- Ψηφιακή θύρα βίντεο
- Έξοδος ελέγχου LED και Strobe Flash
Ο αισθητήρας εικόνας OV7670 ελέγχεται χρησιμοποιώντας το Serial Camera Control Bus (SCCB), το οποίο είναι μια διεπαφή I2C (SIOC, SIOD) με μέγιστη συχνότητα ρολογιού 400KHz.
Η κάμερα διαθέτει σήματα χειραψίας όπως:
- VSYNC: Κάθετη έξοδος συγχρονισμού - Χαμηλή κατά τη διάρκεια του καρέ
- HREF: Οριζόντια αναφορά - Υψηλή κατά τη διάρκεια ενεργών pixel της σειράς
- PCLK: Έξοδος ρολογιού Pixel - Δωρεάν ρολόι λειτουργίας. Τα δεδομένα ισχύουν στην άνοδο
Εκτός από αυτό, έχει πολλά περισσότερα σήματα όπως
- D0-D7: Ψηφιακή έξοδος συστατικού βίντεο 8 bit YUV / RGB
- PWDN: Επιλογή λειτουργίας απενεργοποίησης - Κανονική λειτουργία και Λειτουργία απενεργοποίησης
- XCLK: Είσοδος ρολογιού συστήματος
- Επαναφορά: Επαναφορά σήματος
Το OV7670 χρονομετρείται από ταλαντωτή 24MHz. Αυτό δίνει έξοδο ρολογιού Pixel (PCLK) 24MHz. Το FIFO παρέχει μνήμη buffer καρέ βίντεο 3Mbps. Η γεννήτρια δοκιμαστικών μοτίβων διαθέτει μοτίβο έγχρωμης ράβδου 8 ράβδων, κορακίστικα γκρι χρώμα. Τώρα ας αρχίσουμε να προγραμματίζουμε το Arduino UNO για να δοκιμάσουμε το Camera OV7670 και να πιάσουμε πλαίσια χρησιμοποιώντας σειριακή θύρα αναγνώστη.
Διάγραμμα κυκλώματος
Προγραμματισμός του Arduino UNO
Ο προγραμματισμός ξεκινά με τη συμπερίληψη απαιτούμενης βιβλιοθήκης απαραίτητης για το OV7670. Δεδομένου ότι το OV7670 λειτουργεί σε διασύνδεση I2C, περιλαμβάνειΜετά από αυτό, τα μητρώα πρέπει να τροποποιηθούν για το OV7670. Το πρόγραμμα χωρίζεται σε μικρές λειτουργίες για καλύτερη κατανόηση.
Το Setup () περιλαμβάνει όλες τις αρχικές ρυθμίσεις που απαιτούνται μόνο για τη λήψη εικόνων. Η πρώτη συνάρτηση είναι το arduinoUnoInut () που χρησιμοποιείται για την προετοιμασία του arduino uno. Αρχικά απενεργοποιεί όλες τις καθολικές διακοπές και ορίζει τις διαμορφώσεις της διεπαφής επικοινωνίας, όπως το ρολόι PWM, την επιλογή ακίδων διακοπής, την επιλογή presclaer, την προσθήκη bit ισοτιμίας και διακοπής.
ArduinoUnoInut ();
Μετά τη διαμόρφωση του Arduino, η κάμερα πρέπει να διαμορφωθεί. Για να προετοιμάσουμε την κάμερα, έχουμε μόνο τις επιλογές για να αλλάξουμε τις τιμές μητρώου. Οι τιμές μητρώου πρέπει να αλλάξουν από την προεπιλογή στο προσαρμοσμένο. Προσθέστε επίσης την απαιτούμενη καθυστέρηση ανάλογα με τη συχνότητα του μικροελεγκτή που χρησιμοποιούμε. Ως, οι αργοί μικροελεγκτές έχουν λιγότερο χρόνο επεξεργασίας προσθέτοντας περισσότερη καθυστέρηση μεταξύ της καταγραφής πλαισίων.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // Το PCLK δεν εναλλάσσεται στο HBLANK. }
Η κάμερα έχει ρυθμιστεί για λήψη εικόνας QVGA, οπότε πρέπει να επιλεγεί η ανάλυση. Η συνάρτηση διαμορφώνει τον καταχωρητή για λήψη εικόνας QVGA.
setResolution ();
Σε αυτό το σεμινάριο, οι εικόνες λαμβάνονται σε μονόχρωμη, οπότε η τιμή μητρώου ορίζεται για την έξοδο μιας μονόχρωμης εικόνας. Η συνάρτηση ορίζει τις τιμές μητρώου από τη λίστα καταχωρητών που είναι προκαθορισμένες στο πρόγραμμα.
setColor ();
Η παρακάτω συνάρτηση είναι συνάρτηση εγγραφής για εγγραφή η οποία γράφει την εξάγωνη τιμή για εγγραφή. Εάν λάβετε τις αναμεμειγμένες εικόνες, προσπαθήστε να αλλάξετε τον δεύτερο όρο, δηλαδή 10 έως 9/11/12. Αλλά τις περισσότερες φορές αυτή η τιμή λειτουργεί καλά, οπότε δεν χρειάζεται να την αλλάξετε.
writeReg (0x11, 10);
Αυτή η λειτουργία χρησιμοποιείται για να πάρει το μέγεθος της ανάλυσης εικόνας. Σε αυτό το έργο τραβάμε φωτογραφίες σε μέγεθος 320 x 240 pixel.
captureImg (320, 240);
Εκτός από αυτό, ο κώδικας έχει επίσης τις διαμορφώσεις I2C χωρισμένες σε διάφορα μέρη. Για να λάβετε τα δεδομένα από την κάμερα, οι διαμορφώσεις I2C έχουν λειτουργία Έναρξη, Ανάγνωση, Εγγραφή, Ορισμός διεύθυνσης που είναι σημαντικές όταν χρησιμοποιείτε το πρωτόκολλο I2C.
Μπορείτε να βρείτε τον πλήρη κώδικα με ένα βίντεο επίδειξης στο τέλος αυτού του σεμιναρίου. Απλώς ανεβάστε τον κωδικό και ανοίξτε το Serial Port Reader και πιάστε τα καρέ.
Τρόπος χρήσης του προγράμματος ανάγνωσης σειριακής θύρας για την ανάγνωση εικόνων
Το Serial Port Reader είναι ένα απλό GUI, κατεβάστε το από εδώ. Αυτό καταγράφει τον κωδικοποιητή base64 και τον αποκωδικοποιεί για να σχηματίσει μια εικόνα. Απλώς ακολουθήστε αυτά τα απλά βήματα για να χρησιμοποιήσετε το Serial Port ReaderΒήμα 1: Συνδέστε το Arduino σε οποιαδήποτε θύρα USB του υπολογιστή σας
Βήμα 2: Κάντε κλικ στο "Έλεγχος" για να βρείτε τη θύρα COM Arduino
Βήμα 3: Τέλος, κάντε κλικ στο κουμπί "Έναρξη" για να ξεκινήσετε να διαβάζετε σειριακά.
Βήμα 4: Κάποιος μπορεί επίσης να αποθηκεύσει αυτές τις εικόνες κάνοντας κλικ στο "Αποθήκευση εικόνας".
Ακολουθούν δείγματα εικόνων που λαμβάνονται από το OV7670
Προφυλάξεις κατά τη χρήση του OV7670
- Προσπαθήστε να χρησιμοποιήσετε όσο το δυνατόν συντομότερα καλώδια ή άλτες
- Αποφύγετε τυχόν χαλαρή επαφή με καρφίτσες στο Arduino ή στο OV7670
- Προσέξτε να συνδέσετε, καθώς μεγάλος αριθμός καλωδίων μπορεί να οδηγήσει σε βραχυκύκλωμα
- Εάν το UNO δίνει έξοδο 5V στο GPIO, χρησιμοποιήστε το Level Shifter.
- Χρησιμοποιήστε την είσοδο 3.3V για το OV7670 ως υπερβολική τάση από ότι μπορεί να προκαλέσει ζημιά στη μονάδα OV7670
Αυτό το έργο δημιουργήθηκε για να δώσει μια επισκόπηση της χρήσης μιας μονάδας κάμερας με το Arduino. Δεδομένου ότι το Arduino έχει λιγότερη μνήμη, οπότε η επεξεργασία μπορεί να μην είναι όπως αναμενόταν. Μπορείτε να χρησιμοποιήσετε διαφορετικούς ελεγκτές που έχουν περισσότερη μνήμη για επεξεργασία.