- Composants requis
- Points à retenir concernant le module de caméra OV7670
- Schéma
- Programmation Arduino UNO
- Comment utiliser Serial Port Reader pour lire des images
- Voici des exemples d'images tirées de l'OV7670
- Précautions lors de l'utilisation de l'OV7670
Les caméras ont toujours dominé l'industrie électronique car elle a de nombreuses applications telles que le système de surveillance des visiteurs, le système de surveillance, le système de présence, etc. Les caméras que nous utilisons aujourd'hui sont intelligentes et ont beaucoup de fonctionnalités qui n'étaient pas présentes dans les caméras précédentes. Alors que les appareils photo numériques d'aujourd'hui capturent non seulement des images, mais capturent également des descriptions de haut niveau de la scène et analysent ce qu'ils voient. Il est largement utilisé en robotique, en intelligence artificielle, en apprentissage automatique, etc.
Dans ce tutoriel, nous allons interfacer le module de caméra le plus utilisé OV7670 avec Arduino UNO. Le module de caméra OV7670 peut être interfacé avec Arduino Mega avec la même configuration de broches, le même code et les mêmes étapes. Le module de caméra est difficile à interfacer car il a un grand nombre de broches et un câblage confus à effectuer. De plus, le fil devient très important lors de l'utilisation de modules de caméra car le choix du fil et la longueur du fil peuvent considérablement affecter la qualité de l'image et peuvent générer du bruit.
Nous avons déjà réalisé de nombreux projets sur des caméras avec différents types de microcontrôleurs et d'appareils IoT tels que:
- Système de surveillance des visiteurs avec caméra Raspberry Pi et Pi
- Système de sécurité à domicile Raspberry Pi basé sur l'IOT avec alerte par e-mail
- Caméra de surveillance Raspberry Pi avec capture de mouvement
La caméra OV7670 fonctionne sur 3,3V, il devient donc très important d'éviter Arduino qui donne une sortie 5V à leurs broches GPIO de sortie. L'OV7670 est une caméra FIFO. Mais dans ce tutoriel, l'image ou les cadres seront saisis sans FIFO. Ce tutoriel comportera des étapes simples et une programmation simplifiée pour interfacer OV7670 avec Arduino UNO.
Composants requis
- Arduino UNO
- Module de caméra OV7670
- Résistances (10k, 4,7k)
- Cavaliers
Logiciel requis:
- IDE Arduino
- Lecteur de port série (pour analyser l'image de sortie)
Points à retenir concernant le module de caméra OV7670
Le module de caméra OV7670 est un module de caméra FIFO disponible auprès de différents fabricants avec différentes configurations de broches. L'OV7670 fournit des images 8 bits fenêtrées plein cadre dans une large gamme de formats. La matrice d'images est capable de fonctionner jusqu'à 30 images par seconde (fps) en VGA. L'OV7670 comprend
- Réseau de capteurs d'image (d'environ 656 x 488 pixels)
- Générateur de synchronisation
- Processeur de signal analogique
- Convertisseurs A / N
- Générateur de motifs de test
- Processeur de signal numérique (DSP)
- Scaler d'image
- Port vidéo numérique
- Sortie de contrôle du flash LED et stroboscopique
Le capteur d'image OV7670 est contrôlé à l'aide du bus de commande de caméra série (SCCB) qui est une interface I2C (SIOC, SIOD) avec une fréquence d'horloge maximale de 400 KHz.
La caméra est livrée avec des signaux d'établissement de liaison tels que:
- VSYNC: Sortie de synchronisation verticale - Faible pendant l'image
- HREF: référence horizontale - élevée pendant les pixels actifs de la ligne
- PCLK: Sortie d'horloge pixel - Horloge de fonctionnement libre. Les données sont valides sur front montant
En plus de cela, il a plusieurs autres signaux tels que
- D0-D7: Sortie numérique composante vidéo YUV / RVB 8 bits
- PWDN: Sélection du mode de mise hors tension - Mode normal et mode de mise hors tension
- XCLK: entrée d'horloge système
- Réinitialiser: réinitialiser le signal
L'OV7670 est cadencé à partir d'un oscillateur 24 MHz. Cela donne une sortie d'horloge pixel (PCLK) de 24 MHz. Le FIFO fournit 3Mbps de mémoire tampon d'image vidéo. Le générateur de motif de test comporte un motif de barre de couleur à 8 barres, un motif de barre de couleur fondu au gris. Commençons maintenant à programmer l'Arduino UNO pour tester la caméra OV7670 et saisir des images à l'aide d'un lecteur de port série.
Schéma
Programmation Arduino UNO
La programmation commence par inclure la bibliothèque requise nécessaire pour OV7670. Étant donné que OV7670 fonctionne sur l'interface I2C, il comprendAprès cela, les registres doivent être modifiés pour OV7670. Le programme est divisé en petites fonctions pour une meilleure compréhension.
La configuration () comprend toutes les configurations initiales requises pour la capture d'image uniquement. La première fonction est arduinoUnoInut () qui est utilisée pour initialiser l'arduino uno. Initialement, il désactive toutes les interruptions globales et définit les configurations d'interface de communication telles que l'horloge PWM, la sélection des broches d'interruption, la sélection du presclaer, l'ajout de bits de parité et d'arrêt.
ArduinoUnoInut ();
Après avoir configuré l'Arduino, la caméra doit être configurée. Pour initialiser la caméra, nous n'avons que les options pour changer les valeurs de registre. Les valeurs de registre doivent être modifiées de la valeur par défaut à la valeur personnalisée. Ajoutez également le délai requis en fonction de la fréquence du microcontrôleur que nous utilisons. Comme, les microcontrôleurs lents ont moins de temps de traitement, ajoutant plus de délai entre la capture des images.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK ne bascule pas sur HBLANK. }
L'appareil photo est configuré pour prendre une image QVGA, la résolution doit donc être sélectionnée. La fonction configure le registre pour prendre une image QVGA.
setResolution ();
Dans ce didacticiel, les images sont prises en monochrome, de sorte que la valeur de registre est définie pour produire une image monochrome. La fonction définit les valeurs de registre à partir de la liste de registres qui est prédéfinie dans le programme.
setColor ();
La fonction ci-dessous est une fonction d'écriture dans le registre qui écrit la valeur hexadécimale à enregistrer. Si vous obtenez les images brouillées, essayez de changer le deuxième terme, c'est-à-dire 10 en 9/11/12. Mais la plupart du temps, cette valeur fonctionne bien, donc pas besoin de la changer.
writeReg (0x11, 10);
Cette fonction est utilisée pour obtenir la taille de résolution de l'image. Dans ce projet, nous prenons des photos au format 320 x 240 pixels.
captureImg (320, 240);
En dehors de cela, le code a également les configurations I2C divisées en plusieurs parties. Juste pour obtenir les données de la caméra, les configurations I2C ont la fonction Démarrer, Lire, Écrire, Définir l'adresse, ce qui est important lors de l'utilisation du protocole I2C.
Vous pouvez trouver le code complet avec une vidéo de démonstration à la fin de ce tutoriel. Téléchargez simplement le code, ouvrez le lecteur de port série et récupérez les cadres.
Comment utiliser Serial Port Reader pour lire des images
Serial Port Reader est une interface graphique simple, téléchargez-la ici. Cela capture l'encodage base64 et le décode pour former une image. Suivez simplement ces étapes simples pour utiliser Serial Port ReaderÉtape 1: Connectez votre Arduino à n'importe quel port USB de votre PC
Étape 2: Cliquez sur «Vérifier» pour trouver votre port COM Arduino
Étape 3: Cliquez enfin sur le bouton «Démarrer» pour commencer la lecture en série.
Étape 4: On peut également enregistrer ces images en cliquant simplement sur «Enregistrer l'image».
Voici des exemples d'images tirées de l'OV7670
Précautions lors de l'utilisation de l'OV7670
- Essayez d'utiliser des fils ou des cavaliers aussi courts que possible
- Évitez tout contact lâche avec les broches sur Arduino ou OV7670
- Soyez prudent lors de la connexion car un grand nombre de câbles peut entraîner un court-circuit
- Si l'UNO donne une sortie 5V au GPIO, utilisez le Shifter de niveau.
- Utilisez une entrée de 3,3 V pour OV7670 car une tension supérieure peut endommager le module OV7670.
Ce projet est créé pour donner une vue d'ensemble de l'utilisation d'un module caméra avec Arduino. Étant donné qu'Arduino a moins de mémoire, le traitement peut ne pas être comme prévu. Vous pouvez utiliser différents contrôleurs qui ont plus de mémoire pour le traitement.