Aller au contenu


JIG

Inscrit(e) (le) 26 nov. 2011
Déconnecté Dernière activité nov. 25 2014 10:28
-----

#51708 ultra-sons

Posté par JIG - 27 novembre 2012 - 06:29

Voila, mon probleme est relativement simple...
J'ai réalisé un robot mobile (JAG2) avec des détecteurs ultra-sons, et de l'odometrie.
Je voudrais éviter les obstacles, et aussi faire du suivi de mur en simultané.
J'avais disposé 6 détecteurs : 1 de face, 2 à 45° et 2 en longitudinal, plus 1 vers l'arrière (qui n'est pas très utile)
Le pb vient des détecteurs à 45° : Si je suis très près du mur : ça va à peu près, mais dès que je suis à plus de 20-30 cm, les valeurs sont irrationnelles.
Je me pose la question de savoir si je dois orienter ces détecteurs plus vers l'avant pour voir les obstacles de plus loin ou plus vers les côtés pour connaître plus rapidement l'absence de mur. Je peux aussi en rajouter 2... mais est-ce vraiment utile ?
Par ailleurs, j'ai remarqué sur le BOB3 de Léon que ses ultra-sons étaient disposés verticalement. Est-ce mieux ?
Je n'ai pas encore fait de modifs, car faire de la mécanique qui n'est pas fonctionnelle, n'est pas très encourageant.
Si vous avez de l'expérience sur le sujet, faites-moi signe.
merci d'avance à tous (débutants ou expérimentés §
Jac


#47071 Liaison I2C

Posté par JIG - 29 juillet 2012 - 10:27

Voilà mon pb : je veux gérer les vitesses de 2 moteurs via une carte Devantech MD25.
En liaison I2C je vais utiliser les registres 0 et 1 pour les vitesses de mes 2 moteurs, ainsi que le registre "Mode" (registre 15) qui permet cette gestion.
J'aimerai savoir si la programmation que je fais est correcte : au sujet de l'adressage des registres 0 et 1.
Dois-je adresser le premier registre (adresse 0) pour écrire dans le 1er puis écrire dans la foulée pour le second registre. (comme dans mon programme ci-dessous que je n'ai pas testé car le n'ai pas validé les signaux SDA et SCL sur le hard) Ou alors dois-je mettre les adresses de chaque registre avant d'écrire dedans ?

Voici mon petit pgr de test :

#include <Wire.h> // pour le protocole I2C

#define MD25 0xB0 // adresse du controleur
#define Mode 0x0F // registre "Mode"

int reg_zero =0;
boolean une_fois = true;

void setup()
{
Wire.begin(); // C'est le maître !
}

void loop()
{

if(une_fois) // inutile de revalider le Mode à 1 à chaque boucle
{
Wire.beginTransmission(MD25);
Wire.write(Mode);
Wire.write(1); // Mode à 1 pour vitesse moteur 1 registre 0 et vitesse moteur 2 registre 1
Wire.endTransmission();

une_fois=false;
}

Wire.beginTransmission(MD25);
Wire.write(reg_zero); // adresse 0 pour moteur 1
Wire.write(-50); // Moteur 1 // vitesse moteur 1
Wire.write(50); // Moteur 2 // vitesse moteur 2 ( sens inverse du 1 )
Wire.endTransmission();

delay(500);
}


Qu'en dites-vous ?
Merci d'avance pour vos infos
Jac