Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1289 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [Basic] Programmation d'un robot, demande de confirmation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Basic] Programmation d'un robot, demande de confirmation

n°1967206
Dakiz
Posté le 18-02-2010 à 14:10:50  profilanswer
 

Bonjour à tous !  :hello:  
 
Donc voilà, je vous explique mon problème (qui soit dit en passant, n'en est pas réellement un) : Étant en 1ère S-SI, moi ainsi que deux camarades devons réaliser un projet dans le cadre du Travail Personnel Encadré (TPE), projet à présenter le jour du BAC.
Nous désirons réaliser un robot qui se déplacerai sur une table sans tomber de celle-ci, à l'aide d'un capteur infrarouge et de deux roues motrices (+ une roue folle).  
 
Le robot est donc composé de deux roues motrices indépendantes (donc chacune ayant un moteur), une roue folle, un capteur infrarouge, et d'un micro contrôleur de modèle PIC 16F628.
Voilà la référence des composants si il y a besoin :  
-Roues : http://www.gotronic.fr/catalog/rob [...] =roues.htm Roues GMPW pour moteurs série GM
-Moteurs : http://www.gotronic.fr/catalog/rob [...] .htm#25340 Motoréducteurs Solarbotics série GM
-Capteur Infrarouge : http://www.gotronic.fr/catalog/mic [...] pteurs.htm Capteur IR à réflexion 1103  
 
*Voilà le schéma électrique :
 
http://img705.imageshack.us/img705 [...] tcopie.jpg (Excusez l'aspect brouillon  :sweat: )
 
*Et voilà donc le programme du robot en Basic, programmé avec MikroBasic :
 
http://img411.imageshack.us/img411/2209/programme.jpg
(on ne voit juste pas le "end" à la fin ^^)
 
On voudrait que le robot soit initialement placé au coin inférieur droit d'une table (table assez grande ^^), dès que le robot arrivera au bout de la table, le capteur enverra l'information au PIC, le moteur gauche s'arrêtera pour effectuer une rotation, ensuite le robot reprendra sa route, dès que celui-ci arrivera à l'autre bout de la table, le capteur enverra l'information au PIC et le moteur droit s'arrêtera ...etc et ainsi de suite !
 
Donc voilà, nous aimerions avoir votre avis pour ce qui est du programme, si vous pensez qu'il peut fonctionner avec nos critères ^^ !
 
Merci d'avance !  :D

mood
Publicité
Posté le 18-02-2010 à 14:10:50  profilanswer
 

n°1968018
Dakiz
Posté le 22-02-2010 à 02:00:57  profilanswer
 

S'il vous plait  :ange:

n°1968130
antac
..
Posté le 22-02-2010 à 12:24:44  profilanswer
 

Ca a l'air pas mal, maintenant, ton robot arrivera à interpréter ton code ?
 
Parce que pour moi c'est un algo pas un programme.


Message édité par antac le 22-02-2010 à 12:25:23
n°1968355
Dakiz
Posté le 22-02-2010 à 23:59:10  profilanswer
 

Et bien il nous faut le tester, on a malheureusement pas encore accès au circuit imprimé :s

n°1968466
antac
..
Posté le 23-02-2010 à 11:38:08  profilanswer
 

bien sur, mais tu as peut être un simulateur du processeur non ?

n°1968469
antac
..
Posté le 23-02-2010 à 11:42:30  profilanswer
 

Il y a juste un truc que je pige pas.
 
While capteur=0
moteur_gauche=1
moteur_droit=1
wend
 
En aucun cas, tu n'affectes la variable capteur... Donc ça va te faire une boucle infinie.
Je me disais que capteur était en fait une fonction qui teste l'état du capteur. Mais dans ce cas, plus loin, je vois  
 
capteur=1... donc c'est bien une variable.
 
Il y a un truc pas net.


Message édité par antac le 23-02-2010 à 11:43:00
n°1969293
Dakiz
Posté le 25-02-2010 à 15:47:57  profilanswer
 

Et bien c'est l'information qu'envoi le capteur au PIC : quand il y a un rebord, il ne capte plus donc passe à 0.

n°1969294
Dakiz
Posté le 25-02-2010 à 15:48:17  profilanswer
 

(merci pour tes réponses ^^)

n°1969405
antac
..
Posté le 25-02-2010 à 17:49:28  profilanswer
 

c'est bien ce que je pensais donc quand tu fais :
capteur=1, c'est un non-sens.

n°1969513
Dakiz
Posté le 26-02-2010 à 00:21:38  profilanswer
 

Donc quand le capteur ne "capte" plus, il est sur position 1 ?

mood
Publicité
Posté le 26-02-2010 à 00:21:38  profilanswer
 

n°1969680
antac
..
Posté le 26-02-2010 à 14:03:30  profilanswer
 

C'est pas ça le problème, c'est qu'il faut différencier la comparaison de l'affectation.  
 
Quand tu dis capteur=1, cela veut dire que tu forces le capteur à capter justement. En programmation cela voudrait dire que tu forces une valeur à une fonction et ça va joliment planter.
 
Quand tu dis si capteur=1, là tu fais un test, une comparaison et cela est valable.

n°1969683
garath_
Posté le 26-02-2010 à 14:17:25  profilanswer
 

Juste pour info, tu peux programmer un pic en basic?
Je ne sais pas s'il y a un compilateur basic/asm microchip...

 

Pourquoi ne pas programmer directement en asm dans MPlab?
Ce n'est pas plus compliqué que le programme que tu viens d'écrire et tu pourras simuler le fonctionnement sur cet IDE.

 


EDIT: ok ouais mikrobasic... ok ok...

 

J'ai regardé le programme, mais la syntaxe ne m'a pas choqué après je ne connais pas trop le langage ni ce qu'il y a derrière.
A mon avis comme le capteur est connecté sur une entrée du µc on ne peut que lire et non affecter une variable, donc on a pas le souci de lecture écriture.
Par contre, de ce que je comprends:

 

Ton capteur est a 0, quand il détecte la table puisqu'à ce moment les 2 moteurs tournent.
Ce n'est pas ce qu'il faut faire. Toujours penser en sécurité positive. Qu'est ce qu'il se passe si je debranche le capteur?
L'entrée sera à 0 et ton robot ira tout droit a fond les ballons.
Inverse cette condition.

 

Ensuite, j'ai regardé la doc du capteur, et il te renvoit une valeur analogique.
Il te faut définir un seuil a partir duquel tu passeras la variable capteur a 1.
La tu pourras venir cette variable pour lancer ou non les moteurs.

 

Je n'ai pas compris pourquoi il y a 3 évènements... avec la même condition et qui agissent différemment... Qu'attends tu de ce comportement?

Message cité 1 fois
Message édité par garath_ le 26-02-2010 à 14:34:01
n°1970005
Laiho54
Posté le 28-02-2010 à 16:04:57  profilanswer
 

Salut, je fais le TPE avec Dakiz et je n'ai pas compris ce que tu veux dire par ici:
 

garath_ a écrit :

Ensuite, j'ai regardé la doc du capteur, et il te renvoit une valeur analogique.
Il te faut définir un seuil a partir duquel tu passeras la variable capteur a 1.
La tu pourras venir cette variable pour lancer ou non les moteurs.


n°1970033
Dakiz
Posté le 28-02-2010 à 18:59:48  profilanswer
 

Alors là je ne vois vraiment plus comment définir le capteur ! :s  
 
*Pour les 3 événements, ils sont volontaires, il s'agit de faire en sorte que le robot exécute les évènements dans l'ordre où nous les avons définis (chronologiquement).
 
*Si vous pouviez m'aider sur la façon dont il faut programmer le capteur je vous en serait extrêmement reconnaissant car dans l'immédiat je ne parvient pas vraiment à voir comment le définir autrement ..  
 
Merci pour vos réponses !

n°1970066
antac
..
Posté le 28-02-2010 à 23:12:30  profilanswer
 

ton capteur renvoi une valeur analogique, peut être une valeur par rapport à la lumière renvoyée, je ne sais pas. Mais imaginons que ce soit 8.  
 
En dessous de 8 on considère qu'il ne capte pas et au dessus on considère qu'il capte ok ?
 
Tu dois déjà écrire une fonction qui va regarder la valeur renvoyé par ton capteur et définir si on considère que le capteur capte ou non quelque chose.
 
Ensuite, tu peux programmer tes mouvements...


Message édité par antac le 28-02-2010 à 23:12:57
n°1970101
garath_
Posté le 01-03-2010 à 09:05:41  profilanswer
 

Pour ton capteur moi j'ai vu ça:
 
If the sensor is being interfaced to your own Analog to Digital Converter (not a Phidget device),
our formulas can be modified by replacing (SensorValue) with (Vin * 200). It is important
to consider the voltage reference and input voltage range of your ADC for full accuracy and
range.
 
Tu as câblé ton capteur sur une entrée analogique de ton µc (qui sera donc ton convertisseur analogique numerique), donc tu vas récupérer une valeur image de la distance.
Ce capteur ne sait pas mesurer au delà de 10cm.
 
Ton algo ressemblera à ça:
 
IF (valeur_capteur< xxx)
    capteur = 1
Else
    capteur = 0
End if
 
 
C'est juste un algo, il faudra l'adapter. Ta valeur xxx te sera donnée quand tu auras monté ton capteur sur ton robot, cela correspondra à une valeur légèrement supérieure à la distance capteur/table.
Pour obtenir valeur_capteur, il faut regarder le registre qui correspond à la valeur de ton entrée analogique.
Renseigne toi bien sur la configuration que tu envois au PIc au tout debut de ton programme, cela te paraitra plus clair.
Pour l'instant j'ai l'impression que tu as collé des bouts de code sans comprendre vraiment comment fonctionnait un µc.
 
Ensuite tu précises que le robot doit effectuer les évènements dans l'ordre où vous les avez défini.
 
ok mais c'est pas très propre ce que tu as fait:
 

Code :
  1. While true
  2. IF (valeur_capteur< xxx)           /* La distance est inferieure à la valeur courante mesurée qd tt est ok */
  3.     capteur = 1                    /* alors capteur = 1 */
  4. Else
  5.     capteur = 0
  6. End if
  7.      while capteur = 1            /* Distance avec la table ok */
  8.            moteur_gauche = 1
  9.            moteur_droit = 1       /* A fond! */
  10.      wend
  11.      while capteur = 0           /* merde je vais tomber... */
  12.            moteur_gauche = 0
  13.            moteur_droit = 1      /* je tourne à gauche */
  14.            delay_ms (400)        /* pendant 400ms */
  15.            moteur_gauche = 1
  16.            moteur_droit = 0      /* je tourne à droite */
  17.            delay_ms (400)        /* pendant 400ms */
  18.            moteur_gauche = 0
  19.            moteur_droit = 1      /* je tourne à gauche */
  20.            delay_ms (400)        /* pendant 400ms */
  21.       wend
  22. wend


Après pour moi, ceci est juste un algo, il faut l'adapter à ton langage. Mais le principe est là. Attention ceci n'est pas ton programme définitif, il te faudra l'adapter, c'est un exemple de principe de fonctionnement.
Pense bien à mon histoire de sécurité positive, la variable capteur doit valoir 1 quand tout va bien, comme ça si le capteur déconne ou est débranché, il renverra 0.
 
Ah ouais et vérifies ton branchement de ton capteur, là j'ai l'impression que tu balances du +5V directement sur ton entrée ana...
Tu trouveras pleins d'exemples pour brancher un  capteur ana sur une entree de pic sur le net.  
Pour moi les meilleurs cours en francais sont ceux de Bigonoff : http://www.abcelectronique.com/big [...] &fic=part1


Message édité par garath_ le 01-03-2010 à 09:07:21
n°1970385
Dakiz
Posté le 01-03-2010 à 21:26:17  profilanswer
 

Merci beaucoup !
 
Garath_ : ça m'aide énormément, tu assures :D ! Je te tiens au courant si je m'en sors (où non ^^) !
 
Merci encore !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [Basic] Programmation d'un robot, demande de confirmation

 

Sujets relatifs
Aide Programmation C ArgumentsProgrammation Jade
Programmation RobotRobot web en perl et ajax
[C#][DirectInput] Programmation d'un joystickdéveloppement .net C# ou .net visual basic ??
Programmation flash ou équivalentsystème manuel de programmation neurologique à refllex par Rdn formels
[IIS] : Windows Vista Basic ? 
Plus de sujets relatifs à : [Basic] Programmation d'un robot, demande de confirmation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR