Go Down

Topic: Bateau V1 (Read 2046 times) previous topic - next topic

ArduinoFree

Jun 11, 2018, 01:23 pm Last Edit: Jun 11, 2018, 01:24 pm by ArduinoFree
Bonjour voici la version suivante de mon bateau V0

" copie du dernier message du post Code qui boucle en permanence"

je vais continuer à jeter un oeil sur votre post. sans poster de code, car à deux, ça devient vite impossible
donc je laisse la main à notre ami "lesept"qui te soutient depuis le début.
Effectivement c'est plus simple.
Merci

j'ai regardé ta V1.
j'ai du mal à comprendre que dans ta loop, tu surveilles les 3 possibilités par portions de 20 secondes.
autrement, tu as rajouté un gouvernail.
Tes moteurs ne font plus que marche avant/arrière ou tu gardes l'effet de poussée par un seul moteur pour dégager des coins?.
Pour c'est deux j'ai mal codé apparemment, j'ai bien rajouté un gouvernail pour aider à tourner en utilisant un servo moteur.

Dans les coins 1 moteur pour s'en dégager

Le programme fait des cycles de 10 mn
10 mn en pleine eau en évitant les bords                                         ( c'est la programmation de la VO)
10 mn en se collant sur le bord de la piscine par le coté gauche du bateau
10 mn en pleine eau en évitant les bords
10 mn en se collant sur le bord de la piscine par le coté droit du bateau
10 mn de pause

Les 20 sec étaient pour vérifier sur mon montage avec des leds


nota: dans ta V1 tu n'appelles jamais la fonction ultras sons.
tu mets les pompes lorsque le bateau est pres des bords,  dans quel but?
La V1 (ancienne) était l'amélioration de la V0, qui elle aussi avait ce pb d'ultrasons
les pompes c'est pour faire effet pompier  ( lance à incendie)


A ce soir, je retourne à ma pelle et pioche

lesept

#1
Jun 11, 2018, 03:01 pm Last Edit: Jun 11, 2018, 03:55 pm by lesept
Avant de se lancer dans un programme, qui ne sera qu'une mise à jour de la V0, mettons les choses bien au point : dans la V1
  • il n'y a pas de marche arrière ni de PWM
  • les virages se font avec le gouvernail et les moteurs
  • le programme est une suite de cycles de 10 minutes

De plus :
  • Le cycle 'pleine eau' est exactement le programme V0
  • BordureGauche et BordureDroite sont à reprendre selon ton code du fil précédent

Y a-t-il d'autres choses à prendre en compte ?
Si non, je vais faire la modif en mettant les états où il le faut et ça devrait fonctionner bien assez rapidement.

EDIT : Voici une première version. Il manque la gestion des 3 secondes lorsqu'on plaque le bateau sur une bordure: il faudra me réexpliquer :)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

#2
Jun 11, 2018, 04:30 pm Last Edit: Jun 11, 2018, 04:47 pm by ArduinoFree
dans la V1
  • il n'y a pas de marche arrière ni de PWM
  • les virages se font avec le gouvernail et les moteurs
  • le programme est une suite de cycles de 10 minutes

ok


dans la V1
  • Le cycle 'pleine eau' est exactement le programme V0
  • BordureGauche et BordureDroite sont à reprendre selon ton code du fil précédent

Y a-t-il d'autres choses à prendre en compte ?
Si non, je vais faire la modif en mettant les états où il le faut et ça devrait fonctionner bien assez rapidement.
dans la gestion des pins, il est indiqué les emplacements pour un écran oled, une sonde de température (air) et une pour une sonde température étanche( eau de la piscine).
C'est l'objet du post sur l'écran oled 128x64.
Ces fonctions seront ajoutées après  que ce programme fonctionne



Y a-t-il d'autres choses à prendre en compte ?
Si non, je vais faire la modif en mettant les états où il le faut et ça devrait fonctionner bien assez rapidement.
dans la gestion des pins, il est indiqué les emplacements pour un écran oled, une sonde de température (air) et une pour une sonde température étanche( eau de la piscine).
C'est l'objet du post sur l'écran oled i2c 128x64
PS : je viens de tout recevoir, je vais bientôt faire le test de montage

Lecture  du serial
Code: [Select]
Au départ moteur droit allumé et Avant toute !
Avant toute !
Apres 10 sec moteur gauche   !Moteur gauche OFF, droit ON : fait tourner a gauche
Avant toute !
Apres 10 sec moteur droit
Avant toute !
Reste sur le moteur droit allumé longtemps 30 sec env
moteur gauche bref
Reste sur le moteur droit allumé longtemps



Avant toute !Moteur gauche OFF, droit ON : fait tourner a gauche
Avant toute !Moteur droit OFF, gauche ON : fait tourner a droite
Avant toute !Moteur gauche OFF, droit ON : fait tourner a gauche
Avant toute !Moteur droit OFF, gauche ON : fait tourner a droite
Moteur gauche OFF, droit ON : fait tourner a gauche
Moteur droit OFF, gauche ON : fait tourner a droite
Moteur gauche OFF, droit ON : fait tourner a gauche
Moteur droit OFF, gauche ON : fait tourner a droite
Avant toute !Moteur gauche OFF, droit ON : fait tourner a gauche
Avant toute !




Il manque la gestion des 3 secondes lorsqu'on plaque le bateau sur une bordure: il faudra me réexpliquer :)
voir l'image

en fait quand le bateau dépasse un angle saillant, plus de contact sur son coté, donc pour le forcer à se coller sur le même coté , je pensais prolonger de 3 sec le moteur

lesept

Tu as vu que la pin 3 est utilisée pour 2 choses différentes : il faut corriger ça. D'une manière générale, vérifie :
  • que les déclarations des pins correspondent à tes branchements (je ne les vois pas très bien d'ici)
  • que les états sont bien ceux que tu voulais, notamment dans la gestion des bordures (j'ai parfois mis un peu au pif)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

pour la pin du moteur droit je l'ai mis sur la 5
Code: [Select]

const int moteur_D =  5;     // le numero du pin du moteur droit
const int moteur_G = 11;



pour faire un test je n'ai gardé que la fonction pleine eau.
voici l'interprétation du serial
Code: [Select]

Au départ le Moteur droit est toujours allumé

avant toute !
***********************************************Je mets la main
!Moteur droit OFF, gauche ON : fait tourner a droite**led-moteur droit allumée
Moteur gauche OFF, droit ON : fait tourner a gauche**** pas de led-moteur gauche allumée***
Moteur droit OFF, gauche ON : fait tourner a droite  **led-moteur droit allumée
Moteur gauche OFF, droit ON : fait tourner a gauche**** pas de led-moteur gauche allumée***
Moteur droit OFF, gauche ON : fait tourner a droite **led-moteur droit allumée
Moteur gauche OFF, droit ON : fait tourner a gauche**** pas de led-moteur gauche allumée***
Moteur droit OFF, gauche ON : fait tourner a droite**led-moteur droit allumée
Avant toute !                                                     *** que la led-moteur droit allumée pas les 2 moteurs

 

Code: [Select]

void loop() { //deux temporisations distinctes, donc deux chronos différents :

  long tempsEcoule = millis() - startMillis;
  long tempsEcouleAvantPause = millis() - startMillisPause;
  Mesures();
  if (tempsEcoule < 100000) { // 10 mn * 60 * 1 000    600000=10 mn   60000=1mn   10000=10sec
    PleineEau();
    ActionsEtats();
  }
/*  else if (tempsEcoule < 20000) { // 20 mn * 60 * 1 000    1200000
    BordureGauche();
    ActionsEtats();
  }
  else if (tempsEcoule < 40000) { // 30 mn * 60 * 1 000    1800000
    PleineEau();
    ActionsEtats();
  }
  else if (tempsEcoule < 60000) {   // 40 mn * 60 * 1 000    2400000
    BordureDroite();   
    ActionsEtats();
  }
  else if (tempsEcouleAvantPause > 3600000) Pause();   // 60 mn * 60 * 1 000après 60 mn de fonctionnement mise en pause 300000
  else startMillis = millis();*/

  delay (100);
}

ArduinoFree

Toujours dans mes tests.

1 J'ai inversé mes led/moteur en pensant à une led HS : toujours pas de led/moteur gauche qui s'allume
2 Je reviens de vérifier la VO
   Elle fonctionne bien. Si en avant toute, on a bien les 2 led/moteur qui s'allument.

Donc c'est bien un pb de codage.
Je préfère ça car j'ai soudé mon projet et je ne sais pas déssouder  :smiley-confuse:

lesept

#6
Jun 11, 2018, 10:40 pm Last Edit: Jun 11, 2018, 10:43 pm by lesept
Déjà, tu peux ôter la ligne
Code: [Select]
Mesures();au début de la fonction PleineEau()

Ensuite, on a bien les deux leds allumées avant que tu ne simules un obstacle
Puis, on a alternance droite / gauche ce qui est normal : alternance toutes les 5 secondes. Mais le premier chrono dans la loop mesure pendant 10 secondes et il n'est pas remis à 0 car tu as laissé
Code: [Select]
  else startMillis = millis();en commentaire.

Donc je suis un peu perdu. Tu devrais mettre des temps plus longs dans les tests de la loop et ne pas les commenter. Ajoute les deux lignes
Code: [Select]
  if (tempsEcoule%1000==0) {Serial.print ("Temps ecoule = ");
  Serial.println (tempsEcoule); }
après Mesures(); dans la loop (s'il y a trop de texte augmente le 1000).

Note : j'ai laissé encore deux delay que je traiterai plus tard quand ce sera débugué.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

#7
Jun 11, 2018, 11:47 pm Last Edit: Jun 12, 2018, 01:08 pm by ArduinoFree
Je viens de voir une inversion dans les commandes des moteurs entre le mode pleine eauet les commandes par boutons

en pleine eau;  le code écrit tourne à droite, normalement il arrête led2/moteur droit et laisse led1/moteur gauche.


Si j'appuie sur le btncontact gauche ( qui fait  tourner à droite) , j'ai la led1/moteur gauche active.
Mais en pleine eau, si le serial écrit "Tourne à droite", j'ai la led2/moteur droit d'activé

Si j'appuie sur le btncontact droit ( qui fait  tourner à gauche) , j'ai la led2/moteur droit active.
Mais en pleine eau, si le serial écrit "Tourne à gauche", j'ai la led/moteur gauche d'activé

C'est plus clair sur le dessin



Je crois que c'est ce que tu voulais dire quand tu disais que tu avais écrit à l'arrache pour boudureDroit et BordureGauche.
A toi de voir celui que tu veux changer, les btn ou pleine eau

EDIT : désolé de ne voir l'erreur que maintenant.
          C'est bien sur pleine eau qu'il y a eu l'inversion
          Je reviens de faire (encore) le test de VO C'est bien ça
          si j'appuie sur btngauche, le moteur gauche fonctionne  et je tourne à droite
                    Mais si le bateau sur le serial affiche  "tourne à droite", c'est le moteur droit qui fonctionne
                     alors dque ce doit être le gauche
           Idem pour le coté droit

lesept

A vrai dire je ne comprends pas bien tes explications ni tes dessins. Je vois 2 solutions :

La plus simple : les moteurs sont inversés. Il suffit d'échanger les définitions dans l'entête du programme :
Code: [Select]
const int moteur_D =  5;     // le numero du pin du moteur droit
const int moteur_G = 11;
devient
Code: [Select]
const int moteur_D =  11;     // le numero du pin du moteur droit
const int moteur_G = 5;


Sinon, c'est un peu plus compliqué, mais la structure du programme, avec les états, fait que c'est très simple à modifier. Tu peux le faire toi-même, c'est très simple.
Il faut d'abord vérifier que les états sont bien définis. Exemple :
Code: [Select]
void ADroite () { // Virage droite
  Serial.println("Moteur droit OFF, gauche ON : fait tourner a droite");
  digitalWrite(moteur_D, LOW);
  digitalWrite(moteur_G, HIGH);
  if (PompeG) digitalWrite(PompeGauche, HIGH);
}
C'est les instructions de l'état 'VirageDroite'. Tu vérifies que l'action se fait correctement sur les digitalWrite (le bon moteur pour le bon virage) et que le message affiché sur la console est correct.

Ensuite, il faut vérifier que les tests choisissent les bons états. Par exemple, dans PleinEau() :
Code: [Select]
  else if (!BtnContactG || VirageD)
  { // Contact bouton gauche
    if (VirageD) Serial.println("Contact a gauche ! ");
    if (millis() - chrono2 < delaiVirage)
    {
      state = VirageGauche;
      VirageD = true;
    }
    else
    {
      state = AvantToute;
      Serial.println("Avant toute");
      VirageD = false;
      chrono2 = millis();
    }
  }
Le contact du bouton gauche lance ici un virage à gauche. S'il faut un virage à droite, il suffit de changer le nom de l'état choisi : 'VirageGauche' devient 'VirageDroite'. C'est tout simple, mais tu connais cette mécanique mieux que moi, donc c'est plus simple pour toi :)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

Le contact du bouton gauche lance ici un virage à gauche. S'il faut un virage à droite, il suffit de changer le nom de l'état choisi : 'VirageGauche' devient 'VirageDroite'. C'est tout simple, mais tu connais cette mécanique mieux que moi, donc c'est plus simple pour toi :)
C'était là la solution.
La Vo est validée .

Je te la donne
 
Sus à la V1 maintenant

PS
j'ai remis la V1 sur ma carte et le logiciel m'a dit de réparer encodage et recharger car la version de bateau.h était trop vieille !?
Je l'ai fait , pas de pb.


Je dois toujours garder bateau.h dans le même dossier que V0 ?




lesept

Non, bateau.h est un fichier qui sert uniquement à la V1.

La V0 tient dans un seul fichier.

Pour la V1, comme le programme s'annonçait plus long, j'ai préféré le couper en 2 afin que ce soit plus lisible (l'IDE affiche dans deux onglets ce qui est pratique)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

Pour la V1, comme le programme s'annonçait plus long, j'ai préféré le couper en 2 afin que ce soit plus lisible (l'IDE affiche dans deux onglets ce qui est pratique)
Là je suis largué de très très loin. IDE dans 2 onglets !?

Je te rejoins après avoir regardé le match  France 98 versus Fifa 98.
Je rajeunie de 20 ans. C'est pas tous les jours ça, alors j'en profite.
Je reste connecté quand même et je jette un œil.

lesept

C'est simple. Si ton sketch tient dans un fichier ino unique, tu double-cliques dessus et l'IDE l'ouvre dans un onglet unique.

Si tu as plusieurs fichiers, un ino et plusieurs fichiers h, dans le même répertoire, tu double-cliques sur le fichier ino et l'IDE ouvre tous tes fichiers dans plusieurs onglets.

Pour toi, tu as, par exemple :
  • répertoire bateauV0 : un fichier bateauV0.ino
  • répertoire bateauV1 : un fichier bateauV1.ino et un fichier bateau.h

Le fichier bateau.h est référencé dans le fichier bateauV1.ino (#include 'bateau.h') et il contient des fonctions qui sont appelées dans l'autre fichier.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

pour la V1, je dois garder  'bateau.h' ? Je l'ai ouvert c'est en fait la V0

lesept

#14
Jun 13, 2018, 07:29 am Last Edit: Jun 13, 2018, 03:06 pm by lesept
ça ressemble à la v0, ça a la couleur de la v0, mais c'est du ...
non en fait c'est inspiré de la v0 mais c'est un peu différent

donc le fichier .h va dans le même répertoire que le fichier ino de la v1

--> tu valides la v1 ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Go Up