Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 193

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 197

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338
[ Wikidébrouillard ] Caméra à suivi IR

Caméra à suivi IR

De Wikidebrouillard.

Ligne 39 : Ligne 39 :
==Pour aller plus loin==
==Pour aller plus loin==
 +
 +
<u>Code Arduino</u>
 +
 +
<pre>
 +
 +
#include <Servo.h>
 +
 +
//Permet d'attendre que le servomoteur finisse sont mouvement
 +
#define TEMPS 550
 +
 +
// on créé un objet servo pour controler le servomoteur
 +
Servo myservo; 
 +
 +
 +
void setup()
 +
{
 +
  //On initialise la liaison série
 +
  Serial.begin(9600);
 +
 
 +
  //On attache le pin 9 au servomorteur
 +
  myservo.attach(9);
 +
 
 +
  //On met le servomoteur à 90° par défault
 +
  reset90();
 +
}
 +
 +
void loop()
 +
{
 +
  //Si il y a une connexion série
 +
  if(Serial.available())
 +
  {
 +
    //On recoit la trame
 +
    String recu = recevoir();
 +
   
 +
    //On détermine la commande
 +
    String commande = recu.substring(0,3);
 +
   
 +
    //envoyer("Commande : " + commande); //test
 +
   
 +
    //On détermine le paramètre
 +
    String parametre = recu.substring(3);
 +
   
 +
    //envoyer("Paramètre : " + parametre); //test
 +
   
 +
    //Si la commande est ADD
 +
    if(commande == "ADD")
 +
    {
 +
      //On récupere le parametre
 +
      int par = parametre.toInt();
 +
     
 +
      //On ajoute l'angle passé en paramètre
 +
      add(par);
 +
    }
 +
   
 +
    //Si la commande est SUB
 +
    else if(commande == "SUB")
 +
    {
 +
    //On récupere le parametre
 +
      int par = parametre.toInt();
 +
     
 +
      //On soustrait l'angle passé en paramètre
 +
      sub(par);
 +
  }
 +
 
 +
  //Si la commande est SET
 +
  else if(commande == "SET")
 +
  {
 +
      //On récupere le parametre
 +
      int par = parametre.toInt();
 +
     
 +
      //On impose l'angle passé en paramètre
 +
      set(par);
 +
  }
 +
 
 +
  //Si la commande est GET
 +
  else if(commande == "GET")
 +
  {
 +
    //On envoyer l'angle du servo moteur
 +
    envoyer(String(getAngle()));
 +
  }
 +
  }
 +
}
 +
 +
///// Partie Liaison série
 +
//Fonction qui permet de recevoir des string
 +
String recevoir()
 +
 +
  //On creer la chaine de charactère pour recevoire un message
 +
  char test[20];
 +
 
 +
  //On recois le message
 +
  int recus = Serial.readBytesUntil('\n', test, 20);
 +
 +
  //On convertit le tableau en string et on la retourne
 +
  return String(test);
 +
}
 +
 +
//Fonction qui permet d'envoyer des string
 +
void envoyer(String env)
 +
{
 +
  //On envoie le message
 +
  Serial.println(env);
 +
}
 +
 +
 +
///// Partie commande servompteur
 +
 +
// pour avoir la position actuelle
 +
int getAngle()
 +
{
 +
  return myservo.read();  // myservo.read() renvoit l'angle du servo.
 +
}
 +
 +
// fonction set
 +
int set(int angle)
 +
{  // qui prend en paramètre d'entrée l'angle, et qui met le servo à cette angle.
 +
  myservo.write(angle); 
 +
  delay(TEMPS);
 +
}
 +
 +
//fonction  add
 +
int add(int angle)
 +
{
 +
  if((myservo.read()+angle) >= 172)
 +
    set(172);// valeur de butée pour ne pas forcé sur le moteur.
 +
  else
 +
    set(angle+myservo.read());
 +
}
 +
 +
//fonction  sub
 +
int sub(int angle)
 +
 +
  if((myservo.read()-angle) < 0)
 +
    set(0);  // on fixe l'angle à 0.
 +
  else
 +
    set(myservo.read()-angle);
 +
}
 +
 +
//fonction reset90
 +
int reset90()
 +
{
 +
  set(90);
 +
}
 +
 +
//fonction reset0
 +
int reset0()
 +
{
 +
  set(0);
 +
}
 +
//fonction reset180
 +
int reset180()
 +
{
 +
  set(180);
 +
}
 +
 +
 +
</pre>
 +
 +
<u>Code python</u>
 +
 +
<pre>
 +
#encoding:utf-8
 +
 +
import serial #port serie afin d'envoyer les instructions a l'arduino
 +
import cwiid #libraire pour la wiimote
 +
# ser = serial.Serial("/dev/ttyACM0")
 +
 +
WIDTH=1024 #largeur de la camera de la wiimote
 +
WIIMOTE_MAC = "E0:0C:7F:88:99:F9" #code de la wiimote
 +
 +
 +
print("We are now pairing the wii remote, please, presse 1 and 2 button...")
 +
 +
try:
 +
wm = cwiid.Wiimote(WIIMOTE_MAC) #on apaire la wiimote
 +
except RuntimeError: #en cas d'échec un message est affiché
 +
print("Error will pairing wii remote, is blutooth on ?")
 +
quit() #et on quit
 +
else:
 +
print("Pairing succes")
 +
wm.led = 5
 +
wm.rpt_mode = cwiid.RPT_IR #on active la récupération des info IR
 +
 +
while(True): #boucle infinie
 +
x=0 #les coordonnée
 +
y=0
 +
s=0 #le nombre de points trouvé
 +
for dot in wm.state['ir_src']: #on récupére les points détécté par la wiimote
 +
if dot != None:
 +
x += dot["pos"][0]
 +
y += dot["pos"][1]
 +
s+=1
 +
if s:  #si l'on a recu un point
 +
x/=s #on moyenne les coordonée
 +
y/=s
 +
if x <= (1.0/3)*WIDTH: #si la coordonée est dans le 1/3 gauche, on diminue l'angle
 +
#ser.write("SUB5\n".encode("ascii"))
 +
print("SUB !!!")
 +
elif x >= (2.0/3)*WIDTH:#si on est dans le 1/3 droit on augmente l'angle
 +
#ser.write("ADD5\n".encode("ascii"))
 +
print("ADD !!!")
 +
 +
 +
</pre>
 +
 +
Ce logiciel à les dépendences suivantes :
 +
* python-cwiid
 +
 +
Installation des dépendences :
 +
sudo apt-get install python-cwiid
 +
 +
Execution :
 +
python2.7 main.py
 +
 +
==Liens avec le quotidien==
==Liens avec le quotidien==

Version du 14 janvier 2014 à 12:01

Article incomplet en cours de rédaction
Modèle:Vidéo


Sommaire

Présentation du projet Arduino

Objectif : Caméra de conférence, suivant un orateur automatiquement. Une caméra, montée sur un support rotatif motorisé, suit une DEL infra-rouge portée par l'orateur.

Liste du matériel

Caméra de conférence, suivant un orateur automatiquement.

Réalisation du projet

Mécanique

Un capteur infra-rouge et la caméra destinée au film sont montées sur un même axe vertical, posées sur un plateau. Le plateau peut tourner à l'horizontal, motorisé par un servo-moteur. Celui-ci est contrôlé par la carte Arduino.

Logiciel

L'image du capteur infra-rouge est interprétée sur un PC : Le programme recherche à l'image la diode infra-rouge, et commande le moteur pour la centrer horizontalement.

Liens avec d'autres projets arduino

chercher ici : http://wikidebrouillard.org/index.php/Catégorie:Arduino

Pour aller plus loin

Code Arduino


#include <Servo.h> 
 
//Permet d'attendre que le servomoteur finisse sont mouvement
#define TEMPS 550

// on créé un objet servo pour controler le servomoteur 
Servo myservo;   
 

void setup()
{
  //On initialise la liaison série
  Serial.begin(9600);
  
  //On attache le pin 9 au servomorteur
  myservo.attach(9);
  
  //On met le servomoteur à 90° par défault
  reset90();
}

void loop()
{ 
  //Si il y a une connexion série
  if(Serial.available())
  {
    //On recoit la trame 
    String recu = recevoir();
    
    //On détermine la commande
    String commande = recu.substring(0,3);
    
    //envoyer("Commande : " + commande); //test
    
    //On détermine le paramètre
    String parametre = recu.substring(3);
    
    //envoyer("Paramètre : " + parametre); //test
    
    //Si la commande est ADD
    if(commande == "ADD")
    {
      //On récupere le parametre
      int par = parametre.toInt();
      
      //On ajoute l'angle passé en paramètre
      add(par);
    }
    
    //Si la commande est SUB
    else if(commande == "SUB")
    {
     //On récupere le parametre
      int par = parametre.toInt();
      
      //On soustrait l'angle passé en paramètre
      sub(par);
   }
   
   //Si la commande est SET
   else if(commande == "SET")
   {
      //On récupere le parametre
      int par = parametre.toInt();
      
      //On impose l'angle passé en paramètre
      set(par);
   }
   
   //Si la commande est GET
   else if(commande == "GET")
   {
     //On envoyer l'angle du servo moteur
     envoyer(String(getAngle()));
   }
  }
}

///// Partie Liaison série
//Fonction qui permet de recevoir des string
String recevoir()
{  
  //On creer la chaine de charactère pour recevoire un message
  char test[20];
  
  //On recois le message
  int recus = Serial.readBytesUntil('\n', test, 20);
 
  //On convertit le tableau en string et on la retourne
  return String(test);
}

//Fonction qui permet d'envoyer des string
void envoyer(String env)
{
  //On envoie le message
  Serial.println(env);
}


///// Partie commande servompteur

// pour avoir la position actuelle
int getAngle()
{
  return myservo.read();  // myservo.read() renvoit l'angle du servo.
}
 
// fonction set 
int set(int angle)
{  // qui prend en paramètre d'entrée l'angle, et qui met le servo à cette angle.
  myservo.write(angle);  
  delay(TEMPS);
}
 
//fonction  add 
int add(int angle)
{
  if((myservo.read()+angle) >= 172)
    set(172);// valeur de butée pour ne pas forcé sur le moteur.
  else
    set(angle+myservo.read());
}
 
//fonction  sub 
int sub(int angle)
{  
  if((myservo.read()-angle) < 0)
    set(0);  // on fixe l'angle à 0.
  else
    set(myservo.read()-angle);
}
 
 //fonction reset90
int reset90()
{
  set(90); 
}

//fonction reset0
int reset0()
{
  set(0);
}
 //fonction reset180
int reset180()
{
  set(180); 
}


Code python

#encoding:utf-8

import serial 	#port serie afin d'envoyer les instructions a l'arduino
import cwiid	#libraire pour la wiimote
# ser = serial.Serial("/dev/ttyACM0")

WIDTH=1024		#largeur de la camera de la wiimote
WIIMOTE_MAC = "E0:0C:7F:88:99:F9"	#code de la wiimote


print("We are now pairing the wii remote, please, presse 1 and 2 button...")

try:
	wm = cwiid.Wiimote(WIIMOTE_MAC)	#on apaire la wiimote
except RuntimeError:				#en cas d'échec un message est affiché
	print("Error will pairing wii remote, is blutooth on ?")
	quit()							#et on quit
else:
	print("Pairing succes")			
	wm.led = 5						
	wm.rpt_mode = cwiid.RPT_IR		#on active la récupération des info IR

while(True):	#boucle infinie
	x=0 							#les coordonnée
	y=0
	s=0 							#le nombre de points trouvé
	for dot in wm.state['ir_src']: 	#on récupére les points détécté par la wiimote
		if dot != None:
			x += dot["pos"][0]
			y += dot["pos"][1]
			s+=1
	if s:  #si l'on a recu un point
		x/=s 	#on moyenne les coordonée
		y/=s	
		if x <= (1.0/3)*WIDTH:	#si la coordonée est dans le 1/3 gauche, on diminue l'angle
			#ser.write("SUB5\n".encode("ascii"))
			print("SUB !!!")
		elif x >= (2.0/3)*WIDTH:#si on est dans le 1/3 droit on augmente l'angle
			#ser.write("ADD5\n".encode("ascii"))
			print("ADD !!!")


Ce logiciel à les dépendences suivantes : * python-cwiid

Installation des dépendences : sudo apt-get install python-cwiid

Execution : python2.7 main.py


Liens avec le quotidien

Ce programme peut, entre autre, être utile pour des conférences.

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraits
AR
CO

Caméra à suivi IR

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique