Bateau V1

Tu peux poster ta dernière version du code ?

Que veux-tu dire par "que le moteur gauche qui est validé" ?

Je veux dire que le moteur gauche fonctionne au départ alors qu'il devrait y avoir les 2 ensembles.

Le led/moteur droit n'est jamais allumée/en marche

Bateau_V1.ino (7.45 KB)

Bateau.h (3.18 KB)

OK, je regarde demain...
Bonne soirée !

C'est bizarre, je ne vois rien qui cloche.

Est-ce que la console affiche des messages, notamment le temps qui passe, par exemple

Temps ecoule = 1000
Temps ecoule = 2000
etc.

Bien sûr, il y a d'autres messages affichés entre eux.

Vérifie tes branchements, il y a peut-être un faux contact, une diode grillée, etc.

Je te renvoie une nouvelle version, plus propre...
Lance une exécution en "pleine eau" (sans obstacle) et copie / colle le contenu de la console. Merci

Bateau_V1.ino (7.48 KB)

Bateau.h (3.34 KB)

Je ne pourrais tester que ce soir.
Je n'ai pas le montage sous la main
Désolé
Je n'a ique l'arduino et l'écran oled sous la main

Pas de problème

Resalut

Donc en ce qui concerne mon montage électronique tout est bien soudé, rien de grillé car si j'installe dessue la V0 tout fonctionne parfaitement.

Voici le retour du serial

Temps ecoule = 0
Avant toute !Temps ecoule = 2030
Temps ecoule = 5026
Temps ecoule = 8023
Temps ecoule = 11017
Temps ecoule = 13049
Temps ecoule = 14005
Temps ecoule = 16027
Temps ecoule = 19011
Temps ecoule = 21043
Temps ecoule = 22003
Temps ecoule = 24040
Temps ecoule = 25008
Temps ecoule = 27045
Temps ecoule = 28009
Temps ecoule = 30043
Temps ecoule = 31004
Temps ecoule = 33039
Temps ecoule = 34004
Temps ecoule = 36036
Temps ecoule = 37003
Temps ecoule = 39036
Temps ecoule = 42037
Temps ecoule = 43002
Temps ecoule = 45036
Temps ecoule = 48030
Temps ecoule = 51023
Temps ecoule = 54021
Temps ecoule = 57017
Temps ecoule = 60011
Temps ecoule = 62040
Temps ecoule = 63001
Temps ecoule = 65030
Temps ecoule = 68023
Temps ecoule = 71012
Temps ecoule = 73044
Temps ecoule = 74007
Temps ecoule = 76043
Temps ecoule = 77009
Temps ecoule = 79047
Temps ecoule = 80010
Temps ecoule = 82049
Temps ecoule = 83017
Temps ecoule = 86020
Temps ecoule = 89013
Temps ecoule = 91047
Temps ecoule = 92010
Temps ecoule = 94046
Temps ecoule = 95007
Temps ecoule = 97040
Temps ecoule = 100032
Temps ecoule = 101032
Temps ecoule = 102034
Temps ecoule = 103034
Temps ecoule = 104036
Temps ecoule = 105036
Temps ecoule = 106038
Temps ecoule = 107038
Temps ecoule = 108040
Temps ecoule = 109040
Temps ecoule = 110042
Temps ecoule = 111042
Temps ecoule = 112044
Temps ecoule = 113044
Temps ecoule = 114045
Temps ecoule = 115046
Temps ecoule = 116047
Temps ecoule = 117048
Temps ecoule = 118049

Je ne vois rien d'anormal, est-ce que les broches sont les mêmes entre la V0 et la V1 ? Voici pour la V1 : compare avec la V0 et avec les branchements que tu as faits :

Servo monServomoteur;         // servoMoteur à la broche D9

// constantes
const int DetecteurPinG = 2;  // bouton gauche sur pin 2
const int DetecteurPinD = 4;  // bouton droit sur pin 4
const int PompeGauche   = 3;  // declaration pompe au pin 3
const int PompeDroite   = 12; // declaration pompe au pin 12
const int moteur_D =  5;      // le numero du pin du moteur droit
const int moteur_G = 11;      // le numero du pin du moteur gauche

Peux-tu mettre des diodes sur les pins des pompes aussi ?

Je t'envoie une nouvelle version, elle fait :

  • Pleine eau 20 secondes
  • Bordure gauche 10 secondes
  • Pleine eau 10 secondes
  • Bordure droite 20 secondes
  • Pause 40 secondes
  • Puis retour au départ
    Avec affichage du temps écoulé toutes les 2 secondes.

Je ne peux pas le rendre plus loquace car tu seras submergé. Teste, après vérification des branchements, et copie le contenu de la console et repère les allumages / extinctions de diodes en fonction des états (au besoin fais plusieurs exécutions). Merci

Bateau_V1.ino (7.46 KB)

Bateau.h (3.33 KB)

EDIT : je modifie mon dernier msg ( je viens de comprendre pour les pin :frowning: :frowning: )

il faut modifier la V1 mettre

// constantes
const int DetecteurPinG = 2;  // bouton gauche sur pin 2
const int DetecteurPinD = 4;  // bouton droit sur pin 4
const int PompeGauche   = 5;  // declaration pompe au pin 3
const int PompeDroite   = 12; // declaration pompe au pin 12
const int moteur_D = 3;      // le numero du pin du moteur droit
const int moteur_G = 11;      // le numero du pin du moteur gauche

Les 2 led/moteur s'allument bien en phase pleine eau

Si j'ai bien compris on doit passer un cycle pleine eau / bordure gauche puis bordure droit.
Mais bordure droit ne vient pas.

Temps ecoule = 0
Avant toute !
***********************les 2 LED/Moteur allumés***********
Temps ecoule = 2014
Temps ecoule = 4028
Temps ecoule = 6043
Temps ecoule = 18012
Temps ecoule = 20027

***********************LED1/Moteur droit  allumé   qui plaque le bateau à gauche OK
Bordure gauche
Moteur gauche OFF, droit ON : fait tourner a gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 28004
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 30022
Avant toute !
***********************les 2 LED/Moteur allumés***********
Temps ecoule = 32035



************PROBLEME****************** Si j'ai compris on devrait avoir Bordure droit après
**************************************** alors que c'est Bordure gauche qui suit ?
Bordure gauche
Moteur droit OFF, gauche ON : fait tourner a droite
***********************LED2/Moteur gauche  allumé   qui plaque le bateau à droite OK
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 44014
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 46031
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 56000
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 58017
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Bordure gauche
Temps ecoule = 60036
Temps ecoule = 72001
Temps ecoule = 74015
Temps ecoule = 76029
Temps ecoule = 78044
Temps ecoule = 90009
Temps ecoule = 92023
Temps ecoule = 94038
Moteurs et pompes eteints.

Non, tout fonctionne bien, c'est juste le message de bordure droite qui est faux : il écrit "bordure gauche". Tu peux modifier le Serial.print de la fonction BordureDroite dans la version que je t'ai envoyée.

Pour qu'il écrive moins souvent "bordure gauche" et "bordure droite", tu peux modifier les Serial.print des fonctions BordureDroite et BordureGauche comme suit:
  if (state != oldstate) Serial.println("Bordure gauche");et   if (state != oldstate) Serial.println("Bordure droite");

Enfin, il reste une erreur dans la gestion du temps :
  else if (tempsEcouleAvantPause > 100000) { // 60 mn * 60 * 1 000après 60 mn de fonctionnement mise en pause 300000à remplacer par

  else if (tempsEcouleAvantPause < 100000) { // 60 mn * 60 * 1 000après 60 mn de fonctionnement mise en pause 300000

(inférieur au lieu de supérieur)

Il reste à remplacer les deux delay(3000) des fonctions bordure (pour la forme car je pense que ça fonctionne bien comme ça). Je vais tâcher de trouver du temps aujourd'hui.

Je ne pourrais tester que ce soir... ET même après le match je crois :slight_smile:
Il n'y a pas urgence

Merci

OK, bon match !

Pour l'histoire du delay(3000), c'est pas aussi simple, il faudrait que je sache si c'est un temps mort de 3 secondes nécessaire à réorienter le bateau et pendant lequel on ne vérifie pas les distance et boutons ou s'il faut quand même le faire.

Dans le premier cas, le delay est pertinent, et on peut le conserver. Il faut cependant je pense mettre la commande du servo avant le delay : changer

  else if (!BtnContactG && cm > 5) { //contact et pas de son
    //contact SANS ultrason : le bateau est collé à un bord et le suit
    state = VirageGauche;
    delay (3000);  
    //  le bateau va dépasser l'angle saillant de la piscine :
    //  on le force à continuer à tourner encore pendant 3 sec
    //  pour le recoller au bord
    monServomoteur.write (135);
  }

en

  else if (!BtnContactG && cm > 5) { //contact et pas de son
    //contact SANS ultrason : le bateau est collé à un bord et le suit
    state = VirageGauche;
    monServomoteur.write (135);
    delay (3000);  
    //  le bateau va dépasser l'angle saillant de la piscine :
    //  on le force à continuer à tourner encore pendant 3 sec
    //  pour le recoller au bord
  }

et faire de même dans bordureDroite.

Dans le second cas, ça peut impliquer que si par exemple le bouton qui a fait contact ne touche plus le bord, on peut ne pas respecter cette durée de 3 secondes et passer à un autre état du bateau.

qu'en penses-tu ?

Salut

lesept:
Pour l'histoire du delay(3000), c'est pas aussi simple, il faudrait que je sache si c'est un temps mort de 3 secondes nécessaire à réorienter le bateau et pendant lequel on ne vérifie pas les distance et boutons

En fait; je pensais faire tourner le bateau jusqu'à ce qu'il y ait un contact par bouton ( car ultrason est dans l'axe du bateau et c'est l'un des contacts sur les bords qui détectera/touchera le bord)

Peut-être alors ne pas mettre de delay et attendre ce contact ?
sinon on part sur le temps mort de 3 sec sans vérification.

ArduinoFree:
En fait; je pensais faire tourner le bateau jusqu'à ce qu'il y ait un contact par bouton ( car ultrason est dans l'axe du bateau et c'est l'un des contacts sur les bords qui détectera/touchera le bord)

Peut-être alors ne pas mettre de delay et attendre ce contact ?

En effet, dans ce cas il suffit d'enlever simplement la ligne contenant le delay.

On part là dessus alors.

Je vais essayer de mettre des leds pour simuler le servo et les 2 pompes mais je ne crois pas pouvoir le faire avant la semaine prochaine.

après validation des test avec les nouvelles leds, l'étape suivante va être d'incruster le code avec l'écran oled, mais pour cela je dois faire le montage.
Et c'est pas encore fait :).

Je viens de tester.
J'ai fait un montage grossier pour les pompes.

alors pompe gauche pin 5 ok
pompe droite pin 12 fonctionne toujours après la fonction PAUSE ( 'moteurs et pompes éteints')

les 2 s'arrêtent lors de la fonction pleine eau

je te passe ma version modifiée

Bateau_V1.ino (7.62 KB)

Bateau.h (3.33 KB)

C'est à cause des deux dernières lignes de l fonction ActionEtats :

  digitalWrite (PompeGauche, (PompeG) ? HIGH : LOW);
  digitalWrite (PompeDroite, (PompeD) ? HIGH : LOW);

J'ai modifié le code pour les prendre en compte.

Bateau_V1.ino (7.62 KB)

Bateau.h (3.16 KB)

salut

C'est bon pour les 2 pompes.
J'ai essayé le servo mais rien ne se passe.

J'ai le modèle de l'image.
J'ai bine mis le rouge sur le 5v, marron sur gnd et orange sur le pin 9.

Comme je ne sais pas s'il reçoit l'info, peux-tu mettre un commentaire dans le serial voir s'il est activé ?

Merci

A+

As-tu fait un sketch à part juste pour apprendre à te servir du servo ? Moi je ne connais pas vraiment, j'ai juste testé une fois.

Je te mets une nouvelle version du fichier ino (le fichier h est inchangé) avec des serial qui indiquent l'angle qu'on donne au servo. Mais il lui faut peut-être du temps pour se positionner à cet angle : si ça ne fonctionne pas comme ça, tu peux tester en ajoutant un delay(300) - 300 par exemple - juste après chaque commande monServomoteur.write (xxx);

Bateau_V1.ino (7.82 KB)

Salut

En résumé, le servo reste à 90° ( du moins je ne le vois pas bouger)
La pompe gauche fonctionne dans le 2 virages
la pompe droite ne fonctionne jamais

Les 2 sont toujours sous tension , on entend un grésillement
Pour le test, il est en 2 partie.
La première sans obstacle.

La 2° avec ma main.
Là on lit 45 et 135°

A 45°, le servo ne bouge pas
A 135° , le servo bouge
mais à 90° il ne revient pas

J'ai modifié le code pour la lecture des angles du servo et pour savoir où on en est.

J'ai mis 3 h pour arrivé à faire ce test :confused:

Serial.println("45RienDevant "); pour dire pas de détection ultrason
Serial.println("135RienDevant "); pour dire pas de détection ultrason
Serial.println("90zero "); pour dire pas de détection ultrason

  if ( BtnContactD && cm > 5) { //Pas de contact et Pas de son
    // le bateau ne touche pas le bord incliné d'un escalier
    // ou le fond du bateau touche une marche immergée
    //NI contact NI ultrason : le bateau suit la courbe ou suit la marche immergée
    state = VirageDroite;
    Serial.println("90zero ");
    monServomoteur.write (90);  // on le force tout droit pour suivre le bord ou immergé ou la courbure
    delay(500); 
  }

Voici le retour

************************************** 2 pompes sous tension******
Temps ecoule = 0
Avant toute !
Temps ecoule = 2040
Temps ecoule = 6003
Temps ecoule = 8044
Temps ecoule = 12007
Temps ecoule = 14048
Temps ecoule = 18011
90zero Moteur gauche OFF, droit ON : fait tourner a gauche
************************************** POMPES GAUCHE  PIN 5 ******
90zero ( le bateau suit le bord du bassin, ou de la marche d'escalier)
Avant toute !
***************************************PAS DE POMPE ********* 
Temps ecoule = 32036
Temps ecoule = 38034
90zero 
Moteur droit OFF, gauche ON : fait tourner a droite
************************************POMPE GAUCHE ***********
90zero 
Moteurs et pompes eteints. *** 2 pompes sous tension******




TEST AVEC LA MAIN

************************************** 2 pompes sous tension******
Temps ecoule = 0
Moteur droit OFF, gauche ON : fait tourner a droite
Temps ecoule = 2025
Temps ecoule = 4045
Moteur gauche OFF, droit ON : fait tourner a gauche
Temps ecoule = 10001
Moteur droit OFF, gauche ON : fait tourner a droite
Temps ecoule = 12020
Temps ecoule = 14039
Moteur gauche OFF, droit ON : fait tourner a gauche
45 Moteur droit OFF, gauche ON : fait tourner a droite

*****************POMPE GAUCHE*********************
45 45 45 45 45 45 45 Moteur gauche OFF, droit ON : fait tourner a gauche

******************* PAS DE POMPE***************
Temps ecoule = 32041
Moteur droit OFF, gauche ON : fait tourner a droite
Temps ecoule = 40013
135 
****************POMPE GAUCHE*********************

Moteur gauche OFF, droit ON : fait tourner a gauche
135 
135 
Temps ecoule = 46011
135 
135 
135 
Temps ecoule = 52022
135 
135 
135 
Temps ecoule = 58033
135 
135 
135 
135 
Moteurs et pompes eteints.

Moteurs et pompes eteints.Moteur droit OFF, gauche ON : fait tourner a droite
Temps ecoule = 2018
Temps ecoule = 4036
Moteur gauche OFF, droit ON : fait tourner a gauche
Temps ecoule = 10004
Moteur droit OFF, gauche ON : fait tourner a droite
Temps ecoule = 12027
Temps ecoule = 14049
Moteur gauche OFF, droit ON : fait tourner a gauche
Temps ecoule = 20008
45 Moteur droit OFF, gauche ON : fait tourner a droite
*****************POMPE GAUCHE*********************

45 45 45 45 45 45 45 45 45 Temps ecoule = 26019
45 45 45 45 45 45 45 Moteur gauche OFF, droit ON : fait tourner a gauche

******************* PAS DE POMPE***************
Temps ecoule = 32042
Moteur droit OFF, gauche ON : fait tourner a droite
Temps ecoule = 40015
135 
*****************POMPE GAUCHE*********************
Moteur gauche OFF, droit ON : fait tourner a gauche
135 
135 
Temps ecoule = 46026
135 
135 
Temps ecoule = 52037
135 
135 
135 
Temps ecoule = 58048
135 
135 
135 
135 
Moteurs et pompes eteints.

Bateau_V1.ino (7.99 KB)