Robotique-Projet
Bonjour et bienvenu sur le forum ROBOTIQUE-PROJET

Merci de nous rejoindre, pour avoir accès aux forum en entier,

il suffis juste de s'inscrire sa prends 2 minutes, et bien sur de faire sa

présentation, au plaisir de se croisé sur le forum.
Robotique-Projet

Forum sur la Robotique & Informatique & Programmation


Vous n'êtes pas connecté. Connectez-vous ou enregistrez-vous

Voir le sujet précédent Voir le sujet suivant Aller en bas  Message [Page 1 sur 1]

1 Construire un robot ultra simple. le Sam 18 Mai - 11:30

Seb03000

avatar
Fondateur
Fondateur
TUTO réalisé par sky99
Bonjour à tous! Je souhaiterais vous présenter un petit projet qui a
commencé comme un simple test. Au départ, je me suis demandé quel était
le robot le plus simple que je pouvais faire avec le matériel à ma
disposition. J'ai donc décidé de faire un Robot basé sur une puce Atmel
ATmega328p, la puce qui équipe le Arduino Uno R3. Seulement, je
n'utilise ici que la puce. Pour la motorisation, je m'appuie sur 2
servomoteurs à rotation continue, car il suffit du coup d'envoyer les
signaux adéquats pour les faire tourner dans un sens ou dans l'autre, et
je n'ai donc pas besoin de ponts en H, ou d'un quelconque driver de
moteurs. Enfin, pour les capteurs, je m'appuie sur un capteur de
distance infrarouge, parceque j'en ai un, qu'il ne requiert qu'une
entrée analogique pour fonctionner, et que c'est une méthode éprouvée.

Je vais donc me lancer dans la construction d'un robot à évitement
d'obstacles quasi minimal. Il ne sert à priori à rien d'autre qu'à faire
des tests et valider des hypothèses. En commençant la construction, je
me suis décidé également à le faire le plus petit possible, et devant sa
simplicité, je me dis que tant qu'à faire, je peux tenter de lui donner
la plus grande autonomie envisageable. Je vais donc maintenant vous
décrire ma démarche.

Durant le sujet, les images seront cliquables pour avoir une version haute résolution.

Le robot : R.Damil.
Je vous présente donc R.Damil, mon mini robot. Ses dimensions sont
relativement réduites : 70mm de long, 95mm de haut, et 85mm de large. Il
est assez léger, puisque sa masse est de 335g, batteries incluses.
La conception est simple: il s'agit d'un robot basique à conduite
différentielle, à deux roues motrices, et avec deux roulettes
omnidirectionnelles pour la stabilité. Les roues font 65mm de diamètre,
et sont entraînées par des servomoteurs à rotation continue basés sur
les Futuba S148.
Ce sont d'assez gros servomoteurs, avec 45g pièce. Je les ai assemblés de la façon la plus compacte possible :


Sur la photo, on peut voir que les servomoteurs sont fixés sur des
équerres en plastique avec des vis et écrous, et ces équerres sont
fixées de la même manière sur une planchette de bois de 5mm d'épaisseur,
qui correspond au fond du châssis du robot. Cela suffit à maintenir le
tout en place, et le plastique autorise un peu de flexibilité, ce qui
permettra plus ou moins d'amortir les vibrations.
Sur la photo, vous pouvez voir un logement à piles AA à coté, pour la référence en taille.
J'ai alors fixé la roulette, une petite d'un demi pouce, en plastique (ce que j'avais sous la main):


J'ai fixé une paroi en bois sur l’arrière du robot, qui me servira à installer le logement des batteries et
le capteur à ultrasons. Cette planchette de bois se visse sur le reste
du châssis par 3 vis à bois, par en dessous. J'en profite pour visser le
logement à batteries dessus. Voici le résultat :



Il suffit alors de refermer le logement avec son couvercle, sur laquelle
j’accroche la mini breadboard avec de l’adhésif double face.
Je connecte alors les câbles :

  • Le VCC et le Ground, qui proviennent directement de
    la batterie. L'alimentation des servomoteurs et du capteur sont
    directement prises ici;
  • L'alimentation du convertisseur analogique-numerique, et la tension de référence sont connectés au VCC;
  • La masse du convertisseur analogique-numerique à la masse générale;
  • Les fils de contrôle des servos sur les broches numériques 5 et 6 car elles sont PWM;
  • Le fil de signal du capteur sur la broche A0 du ATmega.

A ce moment, nous avons fini la construction physique du robot. En effet
j'ai choisi de ne pas utiliser de régulateur de tension, justement pour
voir si c'était possible. Cela réduit également les sources de
consommation électrique. On a donc un robot complet :


Il suffit maintenant de passer à la partie programmation du robot.
Le code est simple : si le robot trouve un obstacle tout près, il
recule. Entre tout près et près, il tourne. Plus loin que près, il
avance. Je ne donne pas de valeur en cm, car j'utilise la valeur brute
du capteur sans me préocuper de la distance réelle. J'ai juste essayé
quelques valeurs en mettant ma main devant le capteur, et j'en ai choisi
deux qui me plaisaient, 300 et 200. Le capteur IR renvoie une valeur
d'autant plus faible que l'objet et loin, et en plus l'échelle n'est pas
linéaire. Donc je ne m’embête pas à faire des calculs, la valeur brute
suffit à savoir si l'obstacle est proche ou non.

Voici le code complet :
Code:
#include <Servo.h>

Servo s1;//gauche
Servo s2;//droite

int s1Pin=5;
int s2Pin=6;
int rangeFinderPin=A0;//broche du capteur d'obstacles à distance

void setup()
{
  s1.attach(s1Pin);
  s2.attach(s2Pin);
}

void s1Forward()
{
  s1.write(180);
}
void s1Backward()
{
  s1.write(0);
}
void s1Stop()
{
  s1.write(90);
}

void s2Forward()
{
  s2.write(0);
}
void s2Backward()
{
  s2.write(180);
}
void s2Stop()
{
  s2.write(90);
}

void moveForward()
{
    s1Forward();
    s2Forward();
}

void moveBackward()
{
    s1Backward();
    s2Backward();
}

void turnLeft()
{
  s1Backward();
  s2Forward();
}

void turnRight()
{
  s1Forward();
  s2Backward();
}

void stopMotors()
{
  s1Stop();
  s2Stop();
}

void motorsTest()
{
    moveForward();
    delay(1000);
    moveBackward();
    delay(1000);
    turnLeft();
    delay(1000);
    turnRight();
    delay(1000);
    stopMotors();
    delay(1000);
}

int readRawDistanceOnce()
{
  return analogRead(rangeFinderPin);
}

int readAvgRawDistance(int count, int delay1)
{
  int i=0;
  int sum=0;
  for(i=0;i<count;i++)
  {
    sum=sum+readRawDistanceOnce();
    delay(delay1);
  }
  return sum/count;
}

void r1()
{
  int dist=readAvgRawDistance(10, 2);
  if(dist>250)
  {
    moveBackward();
  }
  else if (dist >180)
  {
    turnLeft();
  }
  else
  {
    moveForward();
  }
  delay(2);
}


void loop()
{
    r1();
}



A partir de là, j'ai pu tester le robot :
Comme vous pouvez le voir, il fonctionne. Ce n'est peut être pas tout à fait parfait, mais ça marche
En pratique, j'ai du rajouter une roulette à l'arrière, car quand le
robot tournait, il basculait vers l'arrière. Une autre solution serait
une tête de brosse à dents, ainsi le robot ne basculerait pas car les
poils résisteraient à la compression, mais cela ne générerait pas
beaucoup de frottement, car les poils résisteraient assez peu à la
flexion


_________________
Voici ma chaîne YouTube: Drone-250-Time https://www.youtube.com/channel/UC3ArL72UR4AjpaF5r-pXpSg
Voici ma chaîne YouTube: Dark-Best https://www.youtube.com/channel/UCqHLYZ9IJyfguosa8_rz9Jg
Faite passé l'information les amies , merci a vous tous.
http://jarvise.atspace.cc/

Invité


Invité
Lui as tu bien demandé la permission quand à la copie de son tutoriel (même si on y retrouve son pseudo) ?

Seb03000

avatar
Fondateur
Fondateur
Oui j'ai bien demandé , est c'est pour cela que j'ai rajouté son pseudo


_________________
Voici ma chaîne YouTube: Drone-250-Time https://www.youtube.com/channel/UC3ArL72UR4AjpaF5r-pXpSg
Voici ma chaîne YouTube: Dark-Best https://www.youtube.com/channel/UCqHLYZ9IJyfguosa8_rz9Jg
Faite passé l'information les amies , merci a vous tous.
http://jarvise.atspace.cc/

Contenu sponsorisé


Voir le sujet précédent Voir le sujet suivant Revenir en haut  Message [Page 1 sur 1]

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum