Accueil

 

COMMANDER un ROBOT a distance AVEC une TELECOMMANDE de TELEVISION

(Ou comment faire un robot Sympa sans Peine)

 

J'ai deux bonnes nouvelles pour vous:

Pour le programme actuel il faut :

A la fin de cette manip nous ferons un concours de vitesse sur le parcours en huit que nous avons déja utilisé , mais cette fois ci on dirigera le robot avec la télécommande et il faudra faire le trajet le plus vite possible sans rouler en dehors des dalles du parcours.

Rappel : la lumiére visible va de longueurs d'onde d'environ 400 (violet) a 700 (rouge) nanométres (1 nanométre = 1 milliardiéme de métre !) . En dessous de 400 il y a les Ultra violets et au dessus de 700 nm l'infrarouge. Les infra rouges sont utilisés pour la transmission de commandes a courtes distances (quelques métres) . Comme un corps chaud émet des infra rouges ils servent aussi a détecter les êtres vivants (mettez un pyro détecteur sur votre robot et il repérera votre chat !)et a les "photographier" de nuit. Comme c'est le cas pour la lumiére visible ,les infra rouges sont réfléchis par les obstacles : on s'en sert donc pour faire éviter les obstacles aux robots.

Le Montage:

Le programme:

Le programme permet de diriger ou de stoper le robot mais notez qu'il y a 35 commandes sur le boitier télé : une mine pour déclencher d'autres choses, par exemple :

Pour ceux qui sont curieux et ont quelques connaissances en programmation je les invite a regarder et comprendre le programme IR_remote : c'est clair , propre et instructif (mais en Anglais !). En effet:

Et voilà le programme complet, amusez vous bien ! (et voyez d'autres utilisations des IR a la fin du chapitre)

{{

IR_RemoteCommandes.spin
selon Tom Doyle
2 March 2007

Moteur GAUCHE connecté sur PIN 14
MOTEUR DROIT connecté sur PIN 15

}}

CON

_CLKMODE = XTAL1 + PLL16X ' 80 Mhz clock
_XINFREQ = 5_000_000

IRdetPin = 0 ' IR Receiver - Propeller Pin

OBJ

ir : "IR_Remote"
num : "simple_numbers"

VAR
Long stack2[50]
byte IRcode ' keycode from IR Receiver
long Time ,Lduree,Rduree

PUB Init | freq, index, cog, lcode

dira[15]~~'c'est la même cose que dira[15]:=1 mais en abbrégé
dira[14]~~

Lduree:=1450
Rduree:=1450

cognew(rouler, @stack2) 'ON DEMARRE UN NOUVEAU CERVEAU (le CERVEAU numero 1) DU PROPELLER

'CE QUI EST BEAU C'EST QUE CETTE METHODE <rouler> VOIT Les VARIABLES Lduree et Rduree modifiées dans le COG du programme principal (le CERVEAU numéro 0)

'EN EFFET TOUTES LES VARIABLES DECLAREES DANS LA ZONE <VAR> au début d'un programme SONT VISIBLES par tous les programmes SUR UN TABLEAU NOIR COMMUN

cog := ir.Start(IRdetPin, @IRcode) ' on démarre le programme de détection de messages infra rouges codés

'il renvoie dans IRCode le numero de la touche appuyée sur la télécommande de la télé


if cog > 0
repeat


If IRcode <> ir#NoNewCode 'on attend un nouveau code

lcode := IRcode
ir.Start(IRdetPin, @IRcode) ' utilise le nouveau code reçu

case lcode 'selon le code q'on a reçu on exécute des petites méthodes différentes (en fait ici on change seulement la durée des impulsions sur les roues)

'Noter que les codes qui sont envoyés pour les touches sont le numéro de la touche MOINS UN

'le code zéro correspond a la touche "9" de la télécommande


0 :'avancer vers gauche , le # indique une constante récupérée a partir d'un Objet

Lduree:=1300
Rduree:=1500

1 : 'avancer
Lduree:=1250
Rduree:=1650


2 : 'avancer vers droite
Lduree:=1400
Rduree:=1600


3 : 'pivot gauche
Lduree:=1250
Rduree:=1250

4 : 'stop
Lduree:=1450
Rduree:=1450

5 :'pivot droite
Lduree:=1650
Rduree:=1650

6 : 'reculer vers gauche

Lduree:=1600
Rduree:=1400

7:'reculer droit
Lduree:=1650
Rduree:= 1250


8 : 'reculer vers droite
Lduree:=1500
Rduree:=1300

'ir#zero : 'télécommande non utilisée


'ir#chUp : '(string("chUp ")) 'non utilisée
'ir#chDn : '(string("chDn ")) 'non utilisée
'ir#volUp : '(string("volUp"))'non utilisée
'ir#volDn : '(string("volDn"))'non utilisée
'ir#mute : '(string("mute "))'non utilisée
'ir#power : '(string("power"))'non utilisée
'ir#last : 'string("last "))'non utilisée
other : 'ne rien faire

waitcnt((clkfreq / 1000) * 30 + cnt)
'!outa[27]


PUB pulseleft |duree, TimeL
duree:=Lduree
TimeL:=cnt
!outa[14]
waitcnt(((clkfreq/1_000_000) *Lduree) +cnt) 'clkfreq= 1seconde
!outa[14]
waitcnt ( TimeL+= clkfreq/50 )

PUB pulseright |duree , TimeR

duree:=Rduree
TimeR:=cnt
!outa[15]
waitcnt(((clkfreq/1_000_000)*duree) +cnt)
!outa[15]
waitcnt ( TimeR+= clkfreq/50 )

PUB rouler
dira[14]~~ 'servo droit
dira[15]~~ 'servo gauche
outa[15]~
outa[14]~

repeat
pulseleft
pulseright

PUB stop
Lduree:=1450
Rduree:=1450

Autres utilisations de la détection Infra rouge: voici les plus courantes en robotique