Meilleures ventes

View All

Facebook Timeline

Shield IO Eagle: Servomoteurs, HC-SR04, MPU6500, et Bluetooth HC05

Posted On: mai 25, 2020

Seen by: 354

Categories: ROBOTS

Author: Christian Joseph

Le Shield IO Servo Eagle a été spécialement conçu par Eagle Robotics en vue de gérer simultanément 12 servomoteurs, 1 module à ultrasons HC-SR04, 1 accéléromètre gyroscope boussole MPU-9250/6500/6050, et un module Bluetooth HC05, HC06, ou HC08. En clair avec ce shield on serait en mesure de créer un robot spiderbot 4 pattes/12 servomoteurs capable de mesurer des distances et pouvant aussi connaitre son positionnement et son inclinaison dans l'espace, tout en étant accéssible par Bluetooth...et qui bien évidement n'existe pas sur notre site (Note pour moi-même: #penser à créer un tel robot!).

1.Présentation:

L'idée de base était de créer un Shield Arduino qui se démarque de la plupart des shield IO vendus dans le commerce (et que nous vendons aussi d'ailleurs!), afin d'offrir à l'utilisateur un outil bien détaillé et fonctionnel pour la robotique. Entre autre ce shield peut gérer des bras robots, des châssis robots, et même des spiderbots dont bien entendu celui qui n'existe pas (encore) sur notre site.

La pluspart des Shield Arduino IO vont parfois nécéssiter soit un cablâge important, soit être incapables de gérer toutes les fonctions qu'elles sont supposées faire simultanément, soit tout simplement manquer d'informations sur leur fonctionnement (Je sais de quoi et je parle!). Dans ce dernier cas de figure Google peut être ton ami, voire ton meilleur ami, mais parfois pas du tout! Nous avons voulu mettre en oeuvre un shield lisible et simple d'utilisation, demandant le moins de câblage possible, et avec un code source Arduino commenté en plus. Si en gros avec tout ça tu ne comprend toujours pas ben...il y'a projet@eagle-robotics.com. (Ils sont très sympas surtout si tu leur dis que tu viens de ma part!).

shield io servo EagleShield-IO-Servos-WiringEagle-Shield-UNO-Wiring

2.PROGRAMMATION:

Le programme suivant a pour but de tester les différentes fonctions du Shield avec les sous-programmes de base de chaque élément du Shield. Les éléments peuvent être utilisés simultanément.

#include "Servo.h"
#include "SotwareSerial.h"
#include "Wire.h"

SoftwareSerial mySerial(2,3); // RX, TX - BLUETOOTH

//ACCELEROMETRE GYROSCOPE
const int MPU_addr=0x68;
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

char a;//Donnée de reception Bluetooth

//ULTRASONS
#define trigPin 13
#define echoPin 12
long cm;
long lecture_echo;

//SERVOMOTEURS
Servo sr1, sr2, sr3;
Servo sg1, sg2, sg3;
Servo sb1, sb2, sb3;
Servo sy1, sy2, sy3;
int walk_speed = 70;

void setup(){
Serial.begin(9600);
mySerial.begin(9600);//INIT BLUETOOTH

//INIT ACCELEROMETRE GYROSCOPE
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);

//INIT SERVOMOTEURS
sr1.attach(4);
sr2.attach(5);
sr3.attach(6);
sg1.attach(7);
sg2.attach(8);
sg3.attach(9);
sb1.attach(10);
sb2.attach(11);
sb3.attach(14);//A0
sy1.attach(15);//A1
sy2.attach(16);//A2
sy3.attach(17);//A3

//INIT MODULE ULTRASONS
pinMode(trigPin, OUTPUT); //On défini Trig comme une sortie
pinMode(echoPin, INPUT); //On défini Echo comme une entrée

}
void loop(){ //décommenter pour tester la fonction
Bluetooth();
// mpu9250();
//distance();
//servomoteur();

}


void Bluetooth(){
if (mySerial.available()){
a = mySerial.read();
Serial.print("Donnée reçue: ");
Serial.println(a);
}}


void mpu9250(){
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
Serial.print("AcX = "); Serial.print(AcX);
Serial.print(" | AcY = "); Serial.print(AcY);
Serial.print(" | AcZ = "); Serial.print(AcZ);
Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53); //equation for temperature in degrees C from datasheet
Serial.print(" | GyX = "); Serial.print(GyX);
Serial.print(" | GyY = "); Serial.print(GyY);
Serial.print(" | GyZ = "); Serial.println(GyZ);
delay(333);
}

void distance(){ //ULTRASONS

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); //Trig envois pendant 10ms
digitalWrite(trigPin, LOW);

// On calcul le temps pour l'aller retour du signal
lecture_echo = pulseIn(echoPin,HIGH);
cm = lecture_echo /58;
Serial.print("Distance en cm :");
Serial.println(cm);
delay(1000);
}

void servomoteur(){
sr1.write(90);
sr2.write(160);
sr3.write(15);
delay(100);
sg1.write(90);
sg2.write(160);
sg3.write(15);
delay(100);
sb1.write(90);
sb2.write(160);
sb3.write(15);
delay(100);
sy1.write(90);
sy2.write(160);
sy3.write(15);
delay(2000);
sr1.write(10);
sr2.write(60);
sr3.write(150);
delay(100);
sg1.write(50);
sg2.write(80);
sg3.write(65);
delay(100);
sb1.write(170);
sb2.write(40);
sb3.write(140);
delay(100);
sy1.write(30);
sy2.write(90);
sy3.write(130);
delay(2000);
}