http://wiki.labaixbidouille.com/index.php?title=Code_arduino_:_d%C3%A9monstration_du_fonctionnement_du_robot_en_mode_autonome&feed=atom&action=historyCode arduino : démonstration du fonctionnement du robot en mode autonome - Historique des versions2024-03-28T13:26:27ZHistorique pour cette page sur le wikiMediaWiki 1.26.0http://wiki.labaixbidouille.com/index.php?title=Code_arduino_:_d%C3%A9monstration_du_fonctionnement_du_robot_en_mode_autonome&diff=522&oldid=prevAdminsys le 11 août 2016 à 17:222016-08-11T17:22:19Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='fr'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Version précédente</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Version du 11 août 2016 à 17:22</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l272" >Ligne 272 :</td>
<td colspan="2" class="diff-lineno">Ligne 272 :</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div></syntaxhighlight></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div></syntaxhighlight></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Catégorie:RobotDuLAB]]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Catégorie:Arduino]]</ins></div></td></tr>
</table>Adminsyshttp://wiki.labaixbidouille.com/index.php?title=Code_arduino_:_d%C3%A9monstration_du_fonctionnement_du_robot_en_mode_autonome&diff=520&oldid=prevAdminsys : Page créée avec « ===== Programme sans NeoPixel Ring ===== Voici le programme qu'il faut éditer dans l'IDE Arduino, puis compiler et charger dans la carte Arduino <br /> <syntaxhighlight... »2016-08-11T17:19:38Z<p>Page créée avec « ===== Programme sans NeoPixel Ring ===== Voici le programme qu'il faut éditer dans l'IDE Arduino, puis compiler et charger dans la carte Arduino <br /> <syntaxhighlight... »</p>
<p><b>Nouvelle page</b></p><div>===== Programme sans NeoPixel Ring =====<br />
<br />
Voici le programme qu'il faut éditer dans l'IDE Arduino, puis compiler et charger dans la carte Arduino<br />
<br /><br />
<br />
<syntaxhighlight lang="cpp" enclose="div"><br />
<br />
/*<br />
Ce programme de démonstration permet de faire fonctionner le robot d'une manière autonome<br />
*/<br />
<br />
#include <Servo.h> // librairie pour servomoteur <br />
<br />
#define broche_servoA 3 // broche servo A <br />
#define broche_servoB 5 // broche servo B <br />
#define trig 2 // broche trig du capteur US HC-SR04<br />
#define echo 4 // broche echo du capteur US HC-SR04<br />
<br />
const int MAX_SENS2=1000; // largeur impulsion pour position ANGLE_MIN degrés du servomoteur<br />
const int ARRET=1490; // largeur impulsion pour position ANGLE_MEDIANE degrés du servomoteur<br />
const int MAX_SENS1=2000; // largeur impulsion pour position ANGLE_MAX degrés du servomoteur<br />
<br />
// classiquement : centrage sur 1500 - maxi sens 1 = 1000 et maxi sens 2 = 2000<br />
<br />
// --- Déclaration des constantes des broches E/S numériques ---<br />
<br />
long lecture_echo = 0; // variable sur 4 octets mesure de distance<br />
long cm = 0; // variable sur 4 octets pour la conversion en cm<br />
<br />
//--- Création objet servomoteur <br />
Servo servoA; // crée un objet servo pour contrôler le servomoteur A (en dessous du swich ON/OFF<br />
Servo servoB; // crée un objet servo pour contrôler le servomoteur B (à gauche du servo A)<br />
<br />
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme<br />
<br />
void setup() { // debut de la fonction setup()<br />
<br />
// --- ici instructions à exécuter 1 seule fois au démarrage du programme --- <br />
<br />
pinMode (broche_servoA,OUTPUT); // Broche broche_servo configurée en sortie<br />
pinMode (broche_servoB,OUTPUT); // Broche broche_servo configurée en sortie<br />
pinMode (trig,OUTPUT); // broche broche trig configurée en sortie<br />
digitalWrite(trig, LOW); // met un niveau logique , LOW (BAS) sur la broche trig<br />
pinMode(echo, INPUT); // la broche echo est initialisée en entree<br />
Serial.begin(115200); // initialisation de la liaison série à 115200 bauds<br />
delay (2000); // on attend 2s<br />
} // fin de la fonction setup()<br />
// ********************************************************************************<br />
<br />
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension<br />
<br />
void loop(){ // debut de la fonction loop()<br />
<br />
Avant();<br />
digitalWrite(trig, HIGH); // met un niveau logique , HIGH (HAUT) sur la broche trig<br />
delayMicroseconds(10); // attente pendant 10 microsecondes<br />
digitalWrite(trig, LOW); // met un niveau logique , LOW (BAS) sur la broche trig.<br />
lecture_echo = pulseIn(echo, HIGH); // lit la durée du niveau HAUT appliqué sur la broche echo<br />
cm = lecture_echo / 58; // conversion de la distance en cm<br />
Serial.print("Distance en cm : "); // affiche le message : "Distance en cm" sur le moniteur série<br />
Serial.println(cm); // affiche la mesure en cm avec retour à la ligne<br />
if (cm < 20) // si mesure < 10 => tourner sens aléatoire<br />
{<br />
if (millis()%2 == 1)<br />
{<br />
Droite();<br />
delay (1000); <br />
}<br />
else<br />
{<br />
Gauche();<br />
delay (1000); <br />
}<br />
}<br />
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin<br />
<br />
void Stop() {<br />
if (servoA.attached()) servoA.detach(); // détache le servomoteur de la broche = arret propre servomoteur<br />
if (servoB.attached()) servoB.detach(); // détache le servomoteur de la broche = arret propre servomoteur<br />
}<br />
<br />
void Avant() {<br />
if (!servoA.attached()) servoA.attach(broche_servoA); // attache le servomoteur à la broche si pas attaché<br />
servoA.writeMicroseconds(MAX_SENS2); // crée impulsion - sens2<br />
if (!servoB.attached()) servoB.attach(broche_servoB); // attache le servomoteur à la broche si pas attaché<br />
servoB.writeMicroseconds(MAX_SENS1); // crée impulsion - sens1<br />
}<br />
<br />
void Arriere() {<br />
if (!servoA.attached()) servoA.attach(broche_servoA); // attache le servomoteur à la broche si pas attaché<br />
servoA.writeMicroseconds(MAX_SENS1); // crée impulsion - sens1<br />
if (!servoB.attached()) servoB.attach(broche_servoB); // attache le servomoteur à la broche si pas attaché<br />
servoB.writeMicroseconds(MAX_SENS2); // crée impulsion - sens2<br />
}<br />
void Gauche() {<br />
if (!servoA.attached()) servoA.attach(broche_servoA); // attache le servomoteur à la broche si pas attaché<br />
servoA.writeMicroseconds(MAX_SENS1); // crée impulsion - sens1<br />
if (!servoB.attached()) servoB.attach(broche_servoB); // attache le servomoteur à la broche si pas attaché<br />
servoB.writeMicroseconds(MAX_SENS1); // crée impulsion - sens1<br />
}<br />
<br />
void Droite() {<br />
if (!servoA.attached()) servoA.attach(broche_servoA); // attache le servomoteur à la broche si pas attaché<br />
servoA.writeMicroseconds(MAX_SENS2); // crée impulsion - sens2<br />
if (!servoB.attached()) servoB.attach(broche_servoB); // attache le servomoteur à la broche si pas attaché<br />
servoB.writeMicroseconds(MAX_SENS2); // crée impulsion - sens2<br />
}<br />
<br />
</syntaxhighlight><br />
<br />
===== Programme avec NeoPixel Ring =====<br />
<br />
Voici le programme qu'il faut éditer dans l'IDE Arduino, puis compiler et charger dans la carte Arduino<br />
<br /><br />
<br />
<syntaxhighlight lang="cpp" enclose="div"><br />
/*<br />
Ce programme de démonstration permet de faire fonctionner le robot équipé d'un Neopixel Ring d'une manière autonome<br />
*/<br />
<br />
#include <Servo.h> // librairie pour servomoteur <br />
#include <Adafruit_NeoPixel.h> // librairie pour NeoPixel Ring<br />
<br />
#define broche_servoA 3 // broche servo A <br />
#define broche_servoB 5 // broche servo B <br />
#define trig 2 // broche trig du capteur US HC-SR04<br />
#define echo 4 // broche echo du capteur US HC-SR04<br />
#define ring 6 // broche Data du NeoPixel Ring <br />
<br />
const int MAX_SENS2=1000; // largeur impulsion pour position ANGLE_MIN degrés du servomoteur<br />
const int ARRET=1490; // largeur impulsion pour position ANGLE_MEDIANE degrés du servomoteur<br />
const int MAX_SENS1=2000; // largeur impulsion pour position ANGLE_MAX degrés du servomoteur<br />
<br />
// classiquement : centrage sur 1500 - maxi sens 1 = 1000 et maxi sens 2 = 2000<br />
<br />
// --- Déclaration des constantes des broches E/S numériques ---<br />
<br />
long lecture_echo = 0; // variable sur 4 octets mesure de distance<br />
long cm = 0; // variable sur 4 octets pour la conversion en cm<br />
<br />
//--- Création objet servomoteur <br />
Servo servoA; // crée un objet servo pour contrôler le servomoteur A<br />
Servo servoB; // crée un objet servo pour contrôler le servomoteur B <br />
<br />
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, ring, NEO_GRB + NEO_KHZ800); // <br />
<br />
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme<br />
<br />
void setup() { // debut de la fonction setup()<br />
<br />
// --- ici instructions à exécuter 1 seule fois au démarrage du programme --- <br />
<br />
pinMode (broche_servoA,OUTPUT); // Broche broche_servo configurée en sortie<br />
pinMode (broche_servoB,OUTPUT); // Broche broche_servo configurée en sortie<br />
pinMode (trig,OUTPUT); // broche broche trig configurée en sortie<br />
digitalWrite(trig, LOW); // met un niveau logique , LOW (BAS) sur la broche trig<br />
pinMode(echo, INPUT); // la broche echo est initialisée en entree<br />
Serial.begin(115200); // initialisation de la liaison série à 115200 bauds<br />
strip.begin();<br />
strip.show(); // Initialisation du NeoPixel Ring<br />
rainbowCycle(10); // LED RING = Arc en ciel<br />
} <br />
// fin de la fonction setup()<br />
// ********************************************************************************<br />
<br />
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension<br />
<br />
void loop(){ // debut de la fonction loop()<br />
<br />
Avant();<br />
digitalWrite(trig, HIGH); // met un niveau logique , HIGH (HAUT) sur la broche trig<br />
delayMicroseconds(10); // attente pendant 10 microsecondes<br />
digitalWrite(trig, LOW); // met un niveau logique , LOW (BAS) sur la broche trig.<br />
lecture_echo = pulseIn(echo, HIGH); // lit la durée du niveau HAUT appliqué sur la broche echo<br />
cm = lecture_echo / 58; // conversion de la distance en cm<br />
Serial.print("Distance en cm : "); // affiche le message : "Distance en cm" sur le moniteur série<br />
Serial.println(cm); // affiche la mesure en cm avec retour à la ligne<br />
if (cm < 20) // si mesure < 20 cm => tourner sens aléatoire<br />
{<br />
if (millis()%2 == 1)<br />
{<br />
Droite(); // appel fonction Droite()<br />
delay (1000); <br />
}<br />
else<br />
{<br />
Gauche(); // appel fonction Gauche()<br />
delay (1000); <br />
}<br />
}<br />
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin<br />
<br />
void Stop() {<br />
if (servoA.attached()) servoA.detach(); // détache le servomoteur de la broche = arret propre servomoteur<br />
if (servoB.attached()) servoB.detach(); // détache le servomoteur de la broche = arret propre servomoteur<br />
}<br />
<br />
void Avant() {<br />
if (!servoA.attached()) servoA.attach(broche_servoA); // attache le servomoteur à la broche si pas attaché<br />
servoA.writeMicroseconds(MAX_SENS2); // crée impulsion - sens2<br />
if (!servoB.attached()) servoB.attach(broche_servoB); // attache le servomoteur à la broche si pas attaché<br />
servoB.writeMicroseconds(MAX_SENS1); // crée impulsion - sens1<br />
ringOff(); // appel fonction extinction de toutes les LED<br />
strip.setPixelColor(14, strip.Color(0,150,0)); // LED verte brillance moyenne.<br />
strip.setPixelColor(15, strip.Color(0,150,0)); // LED verte brillance moyenne.<br />
strip.setPixelColor(0, strip.Color(0,150,0)); // LED verte brillance moyenne.<br />
strip.show(); // Envoi des données vers le Ring.<br />
}<br />
<br />
void Arriere() {<br />
if (!servoA.attached()) servoA.attach(broche_servoA); // attache le servomoteur à la broche si pas attaché<br />
servoA.writeMicroseconds(MAX_SENS1); // crée impulsion - sens1<br />
if (!servoB.attached()) servoB.attach(broche_servoB); // attache le servomoteur à la broche si pas attaché<br />
servoB.writeMicroseconds(MAX_SENS2); // crée impulsion - sens2<br />
}<br />
void Gauche() {<br />
if (!servoA.attached()) servoA.attach(broche_servoA); // attache le servomoteur à la broche si pas attaché<br />
servoA.writeMicroseconds(MAX_SENS1); // crée impulsion - sens2<br />
if (!servoB.attached()) servoB.attach(broche_servoB); // attache le servomoteur à la broche si pas attaché<br />
servoB.writeMicroseconds(MAX_SENS1); // crée impulsion - sens1<br />
ringOff(); // appel fonction extinction de toutes les LED<br />
for(int i=2;i<5;i++){<br />
strip.setPixelColor(i, strip.Color(150,0,0)); // LED rouge brillance moyenne.<br />
strip.show(); // Envoi des données vers le Ring.<br />
}<br />
}<br />
<br />
void Droite() {<br />
if (!servoA.attached()) servoA.attach(broche_servoA); // attache le servomoteur à la broche si pas attaché<br />
servoA.writeMicroseconds(MAX_SENS2); // crée impulsion - sens1<br />
if (!servoB.attached()) servoB.attach(broche_servoB); // attache le servomoteur à la broche si pas attaché<br />
servoB.writeMicroseconds(MAX_SENS2); // crée impulsion - sens2<br />
ringOff(); // appel fonction extinction de toutes les LED<br />
for(int i=10;i<13;i++){<br />
strip.setPixelColor(i, strip.Color(150,0,0)); // LED rouge brillance moyenne.<br />
strip.show(); // Envoi des données vers le Ring.<br />
}<br />
}<br />
<br />
void ringOff()<br />
{<br />
for(int i=0;i<16;i++){<br />
strip.setPixelColor(i, strip.Color(0,0,0)); // Toutes les LED éteintes<br />
strip.show(); // Envoi des données vers le Ring.<br />
}<br />
}<br />
<br />
void rainbowCycle(uint8_t wait) {<br />
uint16_t i, j;<br />
<br />
for(j=0; j<256; j++) { // 1 cycle couleur arc en ciel j<256*n = n cycles couleur arc en ciel<br />
for(i=0; i< strip.numPixels(); i++) {<br />
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));<br />
}<br />
strip.show();<br />
delay(wait);<br />
}<br />
}<br />
<br />
uint32_t Wheel(byte WheelPos) {<br />
WheelPos = 255 - WheelPos;<br />
if(WheelPos < 85) {<br />
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);<br />
} else if(WheelPos < 170) {<br />
WheelPos -= 85;<br />
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);<br />
} else {<br />
WheelPos -= 170;<br />
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);<br />
}<br />
}<br />
<br />
</syntaxhighlight></div>Adminsys