Go Down

Topic: bateau V2 (Read 934 times) previous topic - next topic

lesept

Donc il faut grouper la V1, l'afficheur et la température, et la V2 ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

Exact.
 Je me disais pour les fonctions BordureDroite et BordureGauche, il ne faut faire marcher qu'un seul moteur en marche avant et non 1 marche avant et 1 marche arrière, sinon le bateau 'tournerait' sur place.

En clair pour BordureDroite, moteur gauche 255 moteur droit 0.
C'est bien expliqué ?

lesept

Oui, c'est clair.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

Salut : je relance le sujet, je n'ai pas pu avancer car je galérais sur un projet pour moi.
Peux-tu me redonner les versions finales de la V1, de l'afficheur et de la V2 (tout ce qu'il faut mettre ensemble) ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

#19
Jul 06, 2018, 06:11 pm Last Edit: Jul 06, 2018, 06:13 pm by ArduinoFree
Salut

En résumé , garder la V2
Ajouter l'écran ( les températures et la tension)
Ajouter les 2 pompes
Ajouter de la V1, les fonctions BordureDroite et BordureGauche.

Et un plus ,  m'expliquer comment brancher sur les modules sensor shield et le LN298 ajoutés sur l'Arduino

Merci beaucoup

lesept

Un burger et une grande frite ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

Pour être sûr que je comprends bien ce que tu veux faire : tu veux partir de la V2, ajouter l'écran et les pompes, et ajouter les fonctions (modifiées) BordureX de la V1.

La V2, de ce que j'ai compris, elle fait ça :
  • Marche avant et détection d'obstacle devant, si rien devant on continue en marche avant
  • Si obstacle :
    • On regarde à droite : si obstacle on tourne à gauche
    • Sinon, on regarde à gauche : si obstacle on tourne à droite
    • Sinon, demi tour et marche avant
J'ai vu une petite erreur dans la V2 : il faut penser à mettre la variable pos à 90 à la fin de la fonction checkDirection.

Pour ajouter l'écran : a priori aucun problème.
Pour les pompes non plus, il faut juste que tu me dises dans quelles circonstances la pompe droite et la pompe gauche doivent être allumées et éteintes.
Pour les fonctions BordureX, c'est un peu plus compliqué. Il faut que je me replonge dedans (le code pas la piscine) et que je me souvienne de ce qu'elles font. Mais il faut aussi que tu me dises sous quelles conditions elles sont appelées.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree


Salut

Le raisonnement de la V2 est bon.

les pompes sont liées à BordureDroite et BordureGauche.

donc pendant 10 mn , c'est la fonction normale du bateau
Puis BordureDroite pendant 10mn
Puis normale pendant 10 mn
Puis BordureDGauche pendant 10mn
Pause pendant 50mn

La pompe gauche est en fonction dans BordureGauche.
BordureGauche plaque le bateau sur  le coté gauche du bateau en faisant tourner le moteur droit

La pompe droit est en fonction dans BordureDroite.
BordureDroit plaque le bateau sur  le coté droit du bateau en faisant tourner le moteur gauche


ArduinoFree

Un burger et une grande frite ?
Je réponds à ta question.
Et au bord de la piscine je suis Ricqlès -menthe glaciale plutôt

lesept

Ok, alors si je comprends bien :

  • Marche avant et détection d'obstacle devant, si rien devant on continue en marche avant
  • Si obstacle :
    • On regarde à droite : si obstacle on tourne à gauche             <-- C'est là qu'on lance BordureDroite
    • Sinon, on regarde à gauche : si obstacle on tourne à droite <-- C'est là qu'on lance BordureGauche
    • Sinon, demi tour et marche avant

Si ce n'est pas ça, je ne comprends pas comment s'insèrent les fonctions BordureX...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

#25
Jul 07, 2018, 02:59 pm Last Edit: Jul 07, 2018, 03:17 pm by ArduinoFree
La première phase est celle du déplacement normal de  la voiture/bateau : chercher un itinéraire vide d'obstacle

On avance tout droit.
Si obstacle, arrêt et on regarde à droite :
               si rien on tourne à droite
Sinon, on regarde à gauche
             Si rien on tourne à gauche
Sinon, demi tour et marche avant          


Ensuite c'est la phase BordureDroite pendant 10 mn où on force le bateau à aller à droite

Ensuite c'est la phase normale (~ PleineEau de V1)  pendant 10 mn où on force le bateau à éviter les obstacles et se promener dans la piscine
Ensuite c'est la phase BordureGauche pendant 10 mn où on force le bateau à aller à gauche
Ensuite c'est la phase Pause pendant 10 mn où on arrête tout


Différences Normale(~ PleineEau de V1) et BordureXXX

Cela correspond aux 2 chronos de la V1 ( 1 chrono pour les PleineEau et BordureXXX, et le 1  pour Pause) et les fonctions PleineEau ( fonction normale de voiture/bateau) et les fonctions BordureDroite et BordureGauche.

Code: [Select]
// POUR LA VERSION V1         Variable globale pour faire le décompte du temps
unsigned long startMillis; // à 0 par défaut pour le chrono de MouvementPleineEaux() suivi de bordureGauche/BordureDroite
unsigned long startMillisPause; // à 0 par défaut  pour le chrono des 60 mn

…..

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

  long tempsEcoule = millis() - startMillis;
  long tempsEcouleAvantPause = millis() - startMillisPause;
  Mesures();

  if (tempsEcoule % 2000 < 50) {
     Serial.print ("Temps ecoule = ");
     Serial.println (tempsEcoule);
  }

  if (tempsEcoule < 20000) { // 10 mn * 60 * 1 000    600000=10 mn   60000=1mn   20000=20sec
    PleineEau();
    ActionsEtats();
  }
  else if (tempsEcoule < 30000) { // 20 mn * 60 * 1 000    1200000       + 10 000 = 30sec
    BordureGauche();
    ActionsEtats();
  }
  else if (tempsEcoule < 40000) { // 30 mn * 60 * 1 000    1800000       + 10 000 = 40sec
    PleineEau();
    ActionsEtats();
  }
  else if (tempsEcoule < 60000) {   // 40 mn * 60 * 1 000    2400000     + 20 000 = 60 sec
    BordureDroite();
    ActionsEtats();
  }
  else if (tempsEcouleAvantPause < 100000) { // 60 mn * 60 * 1 000après 60 mn de fonctionnement mise en pause 300000
    state = Stop;
    ActionsEtats();
    Pause();
  }
  delay (100);
}



lesept

Ok, ce qui me manque c'est l'articulation entre les phases V2 et V1. Tu dis "Sinon, demi tour et marche avant
Ensuite c'est la phase BordureDroite pendant 10 MN".

Le "ensuite" c'est combien de temps après ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

En réfléchissant, il n'y a pas de
Sinon, demi tour et marche avant
Le véhicule est dans une piscine, donc il y a toujours un bord soit à droite soit à gauche.
Il n'y a jamais de cas où le véhicule est coincé dans 'une nasse' dans la piscine.

Donc phase 1, on avance, on regarde à droite, à gauche , si obstacle ou pas on avance ou on regarde sur les cotés si on peut avancer.
Cela pendant 10mn.

Puis on dit au véhicule d'avancer jusqu'au bord de la piscine.
Pour la phase BordureDroite, dès la détection du bord, on plaque le véhicule sur le bord droit cela pendant 10 mn.


Phase de mouvement normal pendant 10 mn.

Puis on dit au véhicule d'avancer jusqu'au bord de la piscine.
Pour la phase BordureGauche, dès la détection du bord, on plaque le véhicule sur le bord gauche cela pendant 10 mn.

et phase de Pause pour finir.

lesept

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

ArduinoFree

#29
Jul 08, 2018, 12:50 am Last Edit: Jul 08, 2018, 10:23 am by ArduinoFree
Salut

Je me suis rappelé d'un détail pour les fonctions BordureXXX

Pour BordureDroite ( par exemple) le bateau va se plaquer toujours sur le coté droit (du bateau).
Pas de  pb tant que le bord est droit ou rond ( pas de détection devant).
Mais quand il va y avoir un angle à gauche;( détection obstacle devant) il faudra faire tourner le bateau sur sa gauche.
Voir le dessin

Et l'inverse pour BordureGauche.


Go Up