Partage
  • Partager sur Facebook
  • Partager sur Twitter

Caméra ov7670 avec Arduino Uno

8 novembre 2014 à 23:38:58

Bonsoir,

Je cherche à interfacer ce module vidéo ( http://www.dx.com/fr/p/ov7670-300kp-vga-camera-module-for-arduino-147742#.VF6YhfmG-Q4 ) avec ma carte Arduino Uno. J'ai effectué pas mal de recherches sur le sujet et j'ai trouvé un topic vraiment utile expliquant l'interfaçage avec ce module :

http://embeddedprogrammer.blogspot.com.br/2012/07/hacking-ov7670-camera-module-sccb-cheat.html

J'ai aussi, grâce à ce sujet : http://forum.arduino.cc/index.php?topic=159557.0 pu accéder à ce code pour une carte Uno : https://github.com/ComputerNerd/ov7670-no-ram-arduino-uno

J'ai bien compris comment fonctionnait cette caméra mais je n'arrive pas à comprendre le code, il y a trop de fichiers différents.. Par déduction, je devine que c'est le ov7670.c qui est le code principal car il fait appel aux autres mais je ne vois pas en quoi c'est un code arduino.. Il n'y a même pas de Void setup() ou de Void loop(), bref j'ai du mal à voir !

Sinon ce code est sensé renvoyer une image prise par le module sur le port série ? C'est exactement ce que j'aimerais faire en tout cas.

Une autre question, est-il possible de diminuer l'état HIGH d'une pin en OUTPUT ? J'aimerais sortir du 3.3V au lieu du 5V pour relier ces pins :

A4<->SIOD
11-> (convert 5v to 3.3v) XCLK

Je sais que j'en demande beaucoup mais je suis prêt à y consacrer du temps.

Je vous remercie pour votre aide,

Edouard

  • Partager sur Facebook
  • Partager sur Twitter
9 novembre 2014 à 0:26:49

Alors, je vais essayer de répondre de mon mieux à tes questions.


Trop de fichier différents ?

Il y en a seulement 6 dont 1 README, on ne peut pas dire que ce soit énorme.

- Makefile

Il s'agit d'un fichier réservé pour le compilateur.

Ce fichier contient toutes les instructions pour compiler les sources.

-  ov7670.h

Il s'agit du header de la librairie.

Ce fichier contient toutes les définitions qui te seront utiles.

Ce fichier est fait pour être inclue avec un #include (tout comme tu fais #include <EEPROM.h> pour utiliser l'EEPROM de l'Arduino).

- ov7670_regs.h

Encore un header mais surement beaucoup plus bas niveau.

Ce fichier contient des définitions qui seront probablement utile pour ov7670.c mais pas utile pour toi.

-  ov7670.c

Il s'agit des sources de la librairie.

Ce fichier contient donc tout le code des différentes fonctions.

-  main.c

Il s'agit du programme de démo.

Ce fichier contient donc le code de la fonction main qui sera exécutée au démarrage de l'Arduino.


Les fonctions setup et loop ne sont qu'un petit délire des développeurs Arduino.

Normalement, un programme qui se respecte contient une fonction main.

C'est d'ailleurs le cas d'un programme Arduino mais cette fonction main est cachée :

int main(void)
{

    init();
    initVariant();

#if defined(USBCON)
    USBDevice.attach();
#endif

    setup();

    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }

    return 0;

}

La fonction main d'Arduino a donc pour mission d'appeler des fonctions d'initialisation en tout premier, puis ta fonction setup, puis ta fonction loop en boucle.

Cependant, rien ne t’empêche de faire un projet personnel sans la surcouche Arduino et donc de créer ta propre fonction main.


A lire rapidement le code qu'il y a dans main.c, on peut voir :

- une fonction main qui contient une boucle infinie appelant la fonction captureImg

- une fonction captureImg qui utilise l'UART (Serial) de façon assez bas niveau

Donc oui, ce code semble lire une image et la transmettre sur le Serial.


Pour convertir un niveau logique vers le bas, tu peux utiliser un pont diviseur avec 2 résistances.

Cependant, vu que ton signal s'appelle XCLK, je doute que ce soit une bonne idée.

En effet, XCLK fait beaucoup pensé à un signal d'horloge pouvant être assez haut en fréquence.

Vu que les résistances vont forcément ralentir les signaux, cela risque de détruire ce signal ...

Je te conseille donc de d'orienter vers un petit circuit de conversion de niveaux logiques

-
Edité par lorrio 9 novembre 2014 à 0:29:44

  • Partager sur Facebook
  • Partager sur Twitter
9 novembre 2014 à 13:01:36

Merci pour cette réponse rapide.

Alors si j'ai bien compris je dois mettre les fichiers .h dans le dossier des librairies Arduino. Par contre, dans le compilateur arduino, je dois mettre quel code ? J'ai essayé de mettre main.c mais il m'indique une erreur car il ne trouve pas les fonctions qui se trouvent dans le fichier ov7670.c. J'ai donc copier le code 0v7670.c à la fin du main.c et lorsque je vérifie, il n'y a aucune erreur. Cependant, j'ai essayé les branchements sur l'arduino uno après avoir compilé le programme et rien ne se passe..

Dans mon code, le fichier Makefile n'intervient nulle part, je dois forcément le prendre en compte non ?

Je vais essayé avec un diviseur de tension pour l'instant, on verra si la fréquence n'est pas trop élevée..

  • Partager sur Facebook
  • Partager sur Twitter
9 novembre 2014 à 13:33:21

Dans le ReadMe, on peut voir qu'il y a un taux de transfert de 128Kbps ou 1Mbps.

Ces débit sont bien trop rapide pour permettre l'utilisation d'un pont diviseur, ça ne marchera donc pas.


Les sources que tu as sur ce git correspondent à un projet C sans toute la surcouche Arduino.

Normalement, tu ne devrais donc pas importer ça sur ton IDE arduino mais simplement exécuter la commande make.

C'est cette commande make qui va lire le fichier Makefile et compiler le projet suivant les instructions qu'il contient.

Par contre, je ne peux pas vraiment t'en dire d'avantage à ce sujet car je n'ai jamais utilisé de Makefile sur Arduino.

PS: ce fichier Makefile semble avoir été fait pour Linux (si tu es sous Windows, il te faudra probablement l'adapter un peu).

  • Partager sur Facebook
  • Partager sur Twitter
15 juillet 2017 à 21:55:54

C'est aussi un très beau déterrage...

Le deuxième en 2 semaine, ça commence à faire beaucoup.

Surtout que ce sont tes 2 seuls message sur le forum.

Ce serait bien de regarder les dates avant de poster ;)

PS: Au prochain déterrage, je ne serait probablement pas aussi gentil.

-
Edité par lorrio 15 juillet 2017 à 21:56:31

  • Partager sur Facebook
  • Partager sur Twitter
5 août 2022 à 11:43:07

je vous recommande monsieur d'utiliser cette camera

https://www.moussasoft.com/product/camera-ov7670-vga-pour-arduino-maroc

  • Partager sur Facebook
  • Partager sur Twitter
5 août 2022 à 14:05:18

Il semblerait que ce sujet attire vraiment trop les déterrage... un premier en 2017, un second en 2022... je fermer histoire qu'il n'y en ai pas un troisième en 2027, d'autant plus que l'auteur du sujet ne se connecte plus sur le site depuis bien longtemps.
  • Partager sur Facebook
  • Partager sur Twitter