Voiture à capteurs de distance : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(ajout des liens)
(Complétion de la partie "Réalisation")
Ligne 11 : Ligne 11 :
 
* un [https://fr.wikipedia.org/wiki/Pont_en_H pont H]
 
* un [https://fr.wikipedia.org/wiki/Pont_en_H pont H]
 
* des fils/moyens de créer des connections
 
* des fils/moyens de créer des connections
 +
* deux capteurs de distance (ici des [https://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf HC-sr04])
 +
* des couvercles de pots
 +
* un matériau suffisement résistant pour faire un chassis
  
 
==Réalisation==
 
==Réalisation==
  
* code : [https://github.com/Steins7/Voiture-capteur-de-distance voire sur github]
+
* Nous avons réalisé un chassis en bois de 3mm découpé au laser. Les roues arrières ont aussi été découpées au laser.
 +
La découpe au laser n'est pas une obligation, elle permet juste de gagner du temps.
 +
 +
* La direction est gérée par le servo moteur, relié  par un trombone au systeme de direction. L'idée étant que selon
 +
la position du moteur, la pivot central tire/pousse sur les barres de direction, tournant ainsi les roues.
 +
<font color="#f28518"> Attention à bien prévoir des pièces assez grandes au niveau des axes des roues ainsi que du pivot
 +
afin de faciliter le travail sur moteur. </font>
  
* schéma du câblage :
+
* Le pont H doit être alimenté par l'Arduino (pin +5v et GND), le moteur peut ensuite être branché sur la sortie. Il faut
 +
ensuite brancher les deux pin EN{x} correspondant au moteur, si le pont H,comme dans notre cas, gère plusieurs sorties
 +
à la fois, bien veiller à relier les deux pin EN{x} conntrollant la bonne sortie (en général ceux du même coté que la sortie).
 +
 
 +
* Les capteurs HC-sr04 sont reliés par 4 fils, l'alimentation est à relier au pin +5v de l'Arduino et la masse au pin GND.
 +
 
 +
* Les pins sur lequels brancher tous les fils de commande (hors 5v et masse) sont spécifiés dans le code (partie "pinout")
 +
 
 +
Notre code :
 +
 
 +
<pre>
 +
#include "Arduino.h"
 +
#include "Servo.h"
 +
 
 +
//pinout
 +
#define TRIGGER_1 2
 +
#define ECHO_1 3
 +
#define TRIGGER_2 6
 +
#define ECHO_2 7
 +
#define SERVO 8
 +
#define IN1 A2
 +
#define IN2 A1
 +
 
 +
//creation du controle du servo moteur
 +
Servo* dir;
 +
 
 +
void setup() {
 +
 
 +
Serial.begin(9600);
 +
 
 +
//reglage des pins capteur
 +
pinMode(TRIGGER_1,OUTPUT);
 +
digitalWrite(TRIGGER_1,LOW);
 +
pinMode(TRIGGER_2,OUTPUT);
 +
digitalWrite(TRIGGER_2,LOW);
 +
pinMode(ECHO_1,INPUT);
 +
pinMode(ECHO_2,INPUT);
 +
 
 +
//setup du servo moteur
 +
dir = new Servo();
 +
dir->attach(SERVO);
 +
 
 +
//reglage des pins pont H
 +
pinMode(IN1,OUTPUT);
 +
digitalWrite(IN1,LOW);
 +
pinMode(IN2,OUTPUT);
 +
digitalWrite(IN2,LOW);
 +
}
 +
 
 +
 
 +
void loop() {
 +
 
 +
unsigned long tmpOut[2][10];
 +
unsigned long out[2] = {0,0};
 +
 
 +
//boucle de mesure, avec moyenne sur 10 mesures
 +
for(int i=0; i<10; i++) {
 +
 
 +
//envois d'un impulsion au capteur pour initialise la mesure
 +
digitalWrite(TRIGGER_1,HIGH);
 +
digitalWrite(TRIGGER_1,LOW);
 +
//recuperation de la valeur
 +
tmpOut[0][i] = pulseIn(ECHO_1,HIGH,4000);
 +
 
 +
digitalWrite(TRIGGER_2,HIGH);
 +
digitalWrite(TRIGGER_2,LOW);
 +
tmpOut[1][i] = pulseIn(ECHO_2,HIGH,4000);
 +
 
 +
delay(1);
 +
}
 +
 
 +
out[0] = 0;
 +
out[1] = 0;
 +
for(int j=0; j<2; j++) {
 +
for(int i=0; i<10; i++) { out[j] += tmpOut[j][i]; }
 +
//calcul de la moyenne
 +
out[j] = out[j]/10;
 +
//ecretage
 +
if( out[j] > 1500) { out[j] = 1500; }
 +
Serial.println(out[j]);
 +
}
 +
 
 +
//commande du servo moteur
 +
dir->write(out[0]/10);
 +
 
 +
//commande du pont H
 +
if(out[1] > 400) {
 +
if(out[1] < 600) {
 +
digitalWrite(IN1,LOW);
 +
digitalWrite(IN2,LOW);
 +
} else {
 +
digitalWrite(IN1,HIGH);
 +
digitalWrite(IN2,LOW);
 +
}
 +
} else {
 +
digitalWrite(IN1,LOW);
 +
digitalWrite(IN2,HIGH);
 +
}
 +
 
 +
}
 +
</pre>

Version du 22 janvier 2019 à 22:05

La voiture à capteur de distance est une voiture contrôlée par des capteurs de distance. 
Deux capteurs sont utilisés, l'un contrôle l'avancement tandit que l'autre contrôle la direction.
Voiture à capteurs de distance

Matériel

  • un Arduino
  • un servo moteur(non continu)
  • un moteur DC
  • un pont H
  • des fils/moyens de créer des connections
  • deux capteurs de distance (ici des HC-sr04)
  • des couvercles de pots
  • un matériau suffisement résistant pour faire un chassis

Réalisation

  • Nous avons réalisé un chassis en bois de 3mm découpé au laser. Les roues arrières ont aussi été découpées au laser.

La découpe au laser n'est pas une obligation, elle permet juste de gagner du temps.

  • La direction est gérée par le servo moteur, relié par un trombone au systeme de direction. L'idée étant que selon

la position du moteur, la pivot central tire/pousse sur les barres de direction, tournant ainsi les roues. Attention à bien prévoir des pièces assez grandes au niveau des axes des roues ainsi que du pivot afin de faciliter le travail sur moteur.

  • Le pont H doit être alimenté par l'Arduino (pin +5v et GND), le moteur peut ensuite être branché sur la sortie. Il faut

ensuite brancher les deux pin EN{x} correspondant au moteur, si le pont H,comme dans notre cas, gère plusieurs sorties à la fois, bien veiller à relier les deux pin EN{x} conntrollant la bonne sortie (en général ceux du même coté que la sortie).

  • Les capteurs HC-sr04 sont reliés par 4 fils, l'alimentation est à relier au pin +5v de l'Arduino et la masse au pin GND.
  • Les pins sur lequels brancher tous les fils de commande (hors 5v et masse) sont spécifiés dans le code (partie "pinout")

Notre code :

#include "Arduino.h"
#include "Servo.h"

//pinout
#define TRIGGER_1 2
#define ECHO_1 3
#define TRIGGER_2 6
#define ECHO_2 7
#define SERVO 8
#define IN1 A2
#define IN2 A1

//creation du controle du servo moteur
Servo* dir;

void setup() {

	Serial.begin(9600);

	//reglage des pins capteur
	pinMode(TRIGGER_1,OUTPUT);
	digitalWrite(TRIGGER_1,LOW);
	pinMode(TRIGGER_2,OUTPUT);
	digitalWrite(TRIGGER_2,LOW);
	pinMode(ECHO_1,INPUT);
	pinMode(ECHO_2,INPUT);

	//setup du servo moteur
	dir = new Servo();
	dir->attach(SERVO);

	//reglage des pins pont H
	pinMode(IN1,OUTPUT);
	digitalWrite(IN1,LOW);
	pinMode(IN2,OUTPUT);
	digitalWrite(IN2,LOW);
}


void loop() {

	unsigned long tmpOut[2][10];
	unsigned long out[2] = {0,0};

	//boucle de mesure, avec moyenne sur 10 mesures
	for(int i=0; i<10; i++) {

		//envois d'un impulsion au capteur pour initialise la mesure
		digitalWrite(TRIGGER_1,HIGH);
		digitalWrite(TRIGGER_1,LOW);
		//recuperation de la valeur
		tmpOut[0][i] = pulseIn(ECHO_1,HIGH,4000);

		digitalWrite(TRIGGER_2,HIGH);
		digitalWrite(TRIGGER_2,LOW);
		tmpOut[1][i] = pulseIn(ECHO_2,HIGH,4000);

		delay(1);
	}

	out[0] = 0;
	out[1] = 0;
	for(int j=0; j<2; j++) {
		for(int i=0; i<10; i++) { out[j] += tmpOut[j][i]; }
		//calcul de la moyenne
		out[j] = out[j]/10;
		//ecretage
		if( out[j] > 1500) { out[j] = 1500; }
		Serial.println(out[j]);
	}

	//commande du servo moteur
	dir->write(out[0]/10);

	//commande du pont H
	if(out[1] > 400) {
		if(out[1] < 600) {
			digitalWrite(IN1,LOW);
			digitalWrite(IN2,LOW);
		} else {
			digitalWrite(IN1,HIGH);
			digitalWrite(IN2,LOW);
		}
	} else {
		digitalWrite(IN1,LOW);
		digitalWrite(IN2,HIGH);
	}

}