Le programme C
main.c code du point d'entrée
Pour compiler:
$ gcc -s main.c -lpthread -lv4l2 -o tourelle
tourelle.h
Le cerveau de la tourelle qui obtient une image de la caméra, la scanne pour détecter forme et mouvement afin de diriger les moteurs
camera.h code pour la caméra
Librairie V4L2 pour Linux, d'ailleurs c'est la librairie utilisée par OpenCV.
La machine cible sera un Raspberry avec Linux, qui dit mieux que
V4L2?
Sur le PC de développement:
la librairie pour compiler
$ sudo apt-get install libv4l-dev
et un exe dans son et vidéo pour régler la caméra
$ sudo apt-get install qv4l2
reseau.h code du réseau
La 2e librairie de compilation est pthread.
Un thread est dédié au réseau.
En effet accept() recv() et send() sont des fonctions bloquantes, impossible de faire tourner deux boucles infinies en même temps,
c'est pourquoi un thread est utilisé pour le réseau. Il tourne en parallèle de la boucle de prise de décision.
L'interface homme-machine est un client web qui en
Javascript
depuis sa petite page web locale envoie des commandes en AJAX
sur un port particulier. Le serveur reçoit la requête HTTP, exécute l'ordre et envoie une réponse HTTP.
Le client demande périodiquement une image couleur 3 channels format PPM, qu'il convertit en 4 channels pour afficher dans un Canvas HTML.
Pour communiquer avec l'Arduino
Moteurs pas à pas
Pour commander les moteurs pas à pas, le Raspberry communique en série avec un un Arduino
relié en USB
par la
ou par les GPIO.
C'est l'Arduino qui pilote les moteurs pas à pas, et le servomoteur.
Voir
Stepper.h dans la doc Arduino
et
AccelStepper qui est une librairie tierce.