Go Down

Topic: [Projet][AIDE] Robot qui mémorise le parcours (Read 845 times) previous topic - next topic

djawadd

Nov 23, 2012, 03:12 pm Last Edit: Nov 23, 2012, 03:14 pm by djawadd Reason: 1
Bonjours tout le monde, merci de vous retrouver ici dans mon topic :)

Possédant déjà un Arduino Léonardo et Méga, Je cherche à réaliser un robot commander par radio
La Léonardo pour la partie TX et la méga sur le châssis pour la RX

Pour le faire marcher dans un certain parcours c'est pas notre sujet
je cherche a exploiter la partie EEPROM de la Mega afin qu'il puisse mémoriser le parcours et soit le refaire(en repartant par le point de départ) soit de faire demi tour revenir sur le même parcours que l'aller (en arrivant au point de depart).

Mais aucune idée de commencement :'(, sauf que je dois mémoriser la durée en ms (ou la distance) et la direction, mais comment je peux sauvegarder la direction et la distance parcourue  alors que l'eeprom ne contient que des variable de type BIT.

J'espère que vous pouvez me guider et m'aider

J'espere que j'étais clair et précis.

Merci infiniment

fdufnews

La librairie EEPROM permet d'accéder à la mémoire en écriture/lecture. Elle manipule des octets.
Après charge à l'application de convertir les autres types en octets.
Le problème c'est plutôt la taille de la mémoire qui ne permet pas de stocker beaucoup d'informations. il faudrait peut être envisager d'utiliser un lecteur de carte SD ou alors l'adjonction d'une EEPROM série externe (de plus grosse capacité que celle intégré à l'ATmega) ce qui ouvrirait d'autres horizons à ton robot

schizophrene

Salut !

Tu as 4kB (soit 4096 octets) d'EEPROM dans ta Mega, garde déjà cette donnée de côté.

Tu souhaites enregistrer la durée de déplacement dans une direction en ms, ok. Un octet te permet d'enregistrer une durée de 256ms, 10 bits: 1024ms, 12 bits: 4096ms, 14 bits: 16384ms, 16 bits (donc 2 octets): 65536ms.
Il faut que tu définisses quelle sera la durée max d'un déplacement dans une direction pour définir le nombre de bits que tu utiliseras pour enregistrer cette donnée.

J'utiliserais la fonction millis() pour définir la durée d'un déplacement déplacement:
- le robot reçoit un ordre de déplacement
- j'enregistre le nombre que renvoie millis() dans une variable x
- le robot se déplace dans une seule direction pendant un petit moment
- le robot ne reçoit plus d'ordre de déplacement
- j'enregistre dans l'EEPROM le nombre que renvoie millis() - le nombre enregistré dans la variable x

Si les déplacements n'excèdent pas 16.384 secondes (14 bits), tu peux enregistrer tes déplacements sur 2048 octets environ et aller jusqu'à un parcours d'une durée de 9h ( (16.384 * 2048) / 3600 ) !

Les 2 bits restants pourrait servir à enregistrer la direction, si et seulement si le robot n'est capable de se déplacer que dans 4 directions.

On serait sur du codage sur 2 octets donc (par exemple):
- 00xxxxxxxxxxxxxx pour la direction 'haut' (les x correspondent aux 14 bits de la durée de déplacement, toujours si la durée n'excède pas 16.384s)
- 01xxxxxxxxxxxxxx pour 'bas'
- 10xxxxxxxxxxxxxx pour 'gauche'
- 11xxxxxxxxxxxxxx pour 'droite'


Pour faire le parcours en sens inverse, il faut savoir le nombre de déplacements enregistrés en EEPROM (donc le nombre de changements de direction).
Réservons 2 octets pour enregistrer ce nombre. A chaque changement de direction, on enregistre le numéro du double octet utilisé pour la direction-durée.
A la fin du parcours, on commence à lire le dernier double octet enregistré en inversant les directions.


Mais il faut que tu donnes plus d'infos, et que tu définisses déjà ton cahier des charges.

djawadd

Merci a vous..

@fdufnews : Puisque je cherche le principe et le raisonnement, la mémoire ne m'intéresse pas pour le moment, je testerai le robot pour un petit parcours.
*Pour la conversion, alors je fait une écriture sur l'eeprom de la valeur que renvoi millis() et l'IDE qui convertit directement ?
Et pour la direction j'écris quoi dans l'eeprom ?

@schizophrene :
Votre réponse m'a énormément aider.. mais j'ai mal a interpréter l'algorithme en ligne de code, un coup de pousse s'il vous plait, surtout pour la direction, enfin même la durée :|

Merci infiniment




schizophrene

Tu souhaites interpréter quel algorithme?! Je n'en ai posté aucun...

Je sens que tu as besoin de relire ou d'apprendre les bases: http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ARDUINO et http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceMaxi

Et il faut qu'on sache où tu en es dans ton projet de robot. As-tu déjà un châssis, est-il motorisé, ...?

EST-CE POUR UN COURS D'ELECTRONIQUE OU AUTRE?

djawadd

Merci encore, et je m'excuse pour le dérangement..

Non je veux dire par algorithme les étapes à suivre que vous m'avez donner j'ai appelé ça algorithme :)
{
- le robot reçoit un ordre de déplacement
- j'enregistre le nombre que renvoie millis() dans une variable x
- le robot se déplace dans une seule direction pendant un petit moment
- le robot ne reçoit plus d'ordre de déplacement
- j'enregistre dans l'EEPROM le nombre que renvoie millis() - le nombre enregistré dans la variable x
}

Pour la motorisation j'utilise pour le moment des Servo à rotation continue, et pour le châssis je suis pas inquiété une simple plaque en pléxi.

Pouvez-vous m'aider et me donner un exemple de ce que vous m'avez expliquer ?
Merci

schizophrene

As-tu un code à nous montrer concernant ton robot? Genre comment tu le fais avancer, tourner..

djawadd

sur mon lieu actuel je n'en ai aucun, sauf le matériel je veux recommencer a zéro; mais je peux eclaircir les chose un peu plus,

J'utilise la Lib VirtualWire avec les modules 434Mhz TX et RX pour envoyer un Char depuis la Léo(tx), Puis le recevoir avec la méga(rx)
la lettre 'a' pour avancer
la lettre 'r' pour reculer
la lettre 'd' pour droite
la lettre 'g' pour gauche

j'utilise des servo a rotation continue comme motorisation, et un chassis en pléxi ainsi les connexion j'utilise hitchman en attendant d'un chassis bien fini
Pour l'instant sur la Léo j'ai connecter 4 boutons poussoirs pour les 4 directions et un pour l'arrêt total
et je veux rajouter 4 boutons pour "enregistrer le parcours", "arreter l'enregistrement", "rejouer le meme parcours", et enfin "rejour au sens inverse" .. et c'est pour cela que j'ai créer ce topic ici

je dois repenser a un code ou je dois toujours recevoir les données qui arrivent de la Léo(TX/Boutons dedirection) et a tout moment sans avoir a attendre la fin de l'opération actuelle.

J'espère que j'étais un peu clair..


Go Up