Création ROV

Où l'on cause d'autres modèles que l'on réalise, des navires de surface, voitures, hélicos, avions, car on peut aussi vouloir partager ses autres activités modélistes...
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Création ROV

Message par Geeks »

Et bien félicitation :applaudi:

Sache qu'un code n'est jamais fini !

Quand passera-tu aux fonctions ?
Exemple ici:

Code : Tout sélectionner

//Si il faut avancer
if(...) {
   funcAvant();
}

//Fonction avant
void funcAvant() {
   digitalWrite(motorPin2a , HIGH); 
   digitalWrite(motorPin2b , LOW); 
   digitalWrite(motorPin1a , HIGH);
   digitalWrite(motorPin1b , LOW);
}
L'avantage avec ça c'est qu'à chaque fois que tu va faire une marche avant tu n'a plus qu'à écrire "funcAvant();"

Il te faut un:
funcAvant();
func(Arriere();
funcStop();

Allé, hop, à la reprogrammation :banane:
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Avatar de l’utilisateur
oniff
Messages : 186
Inscription : 07 mars 2011 20:00
Localisation : Rennes

Re: Création ROV

Message par oniff »

Impécable le capteur d'eau, j'ai réussi à l'incorporer dans mon code, ayé le code est entièrement fini.
Pu qu'a essayer.
Pas mal du tout la fonction funcAvant, ça réduit énormément le code. Mais je verrais ça plus tard ;) Je vais déja tester celui la.
Sinon le capteur voie d'eau réagit bien?
J'ai envi de mettre plusieurs sondes (3 ou 4) en parallèles qui exploitent la même Led, je n'est pas besoin de les ajouter de capteur supplémentaire au code afin de déterminer la zone "inondée",
car si voie d'eau il y a, ou quelle soit, je remonte.
Avatar de l’utilisateur
MG
Messages : 3399
Inscription : 31 janv. 2010 19:46
Localisation : Gard
Contact :

Re: Création ROV

Message par MG »

le mieux est l'ennemi du bien
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Création ROV

Message par Geeks »

Le capteur est instantanée !

Un transistor est très rapide pour comuter. Rend toi compte dans un ordinateur, tu en a des millions à la chaine et c'est rapide :Up:

La question va plutôt être :
Si je met plusieurs capteurs, il faut qu'il ai chacun un port diférent. Attention avec ça... L'alim sera effectivement utilisable par tous les capteurs, mais pas le fil raccordé en entrée.

En revanche, tu peux utiliser un PCF8574 qui te permettra d'avoir des voies libéré. Grace à l'I2c ! Par contre, tu est limité à 8 entrées. Mais cela simplifie beaucoup de choses.

Remplace ta led par un afficheur LCD.. Ah tien, tu pourraît savoir ou viens l'avanie ! Et ce sur 2 fils :Oo:

Bon, là c'est déjà un peu plus compliquer. Reste d'bord avec un seul capteur, essaie le et ensuite, tu songera à en mettre un autre. Entre temps, ça peut être intéressant de jeter un oeil sur les bus synchrones. :Up:

Bon allé, chu sympa, je te donne la logique (pas le code hein).

Mettons un soum avec 8 compartiments. J'aurais la logique suivante: Chaque compartiment à soit pas d'eau 0 logique, soit une voie d'eau 1 logique :
Compartiments ->[moteur][ballast arrière][compresseur, pompe][radio, batteries][servo][moteurs aériens][ballast avant][vide]

En état normal, j'aurais : 11111111 (ben oui, si il n'y a pas d'eau, j'ai un 1 logique).

Mais si j'ai une voie d'eau sur le compartiment radio ?
Très simple : 11101111 -> et là on remonte à la surface.

Ensuite, c'est une question de discussion etre la carte arduino et le PCF... J'en ai déjà trop dit !

Dans ton cas, tu ne passera pas par l'i2c donc tu va utiliser des broches de ta carte. Genre 40 à 43. De la même façon tu aura des 1 en absence d'eau. Du coup avec un simple afficheur à 4 leds montés entre 44 et 47 tu aura une indication. Enfin, moi j'aurais bien mis un afficheur à ce compte la. Donc pour en revenir à tes broches...

Si je suis logique, j'aurais créer un mot de 4 bits. Déclaration du type "int motSecu = 1111;"
Ensuite tu procède ainsi:

Code : Tout sélectionner

motSecu = digitalRead(40);
motSecu += digitalRead(41);
motSecu += digitalRead(42);
motSecu += digitalRead(43);
motSecu contient donc la donnée de chaque capteur en une seule variable. Astucieux non ?

Tu n'a plus qu'à faire un case sur motSecu et voir s'il vaut autre-chose que "1111". S'il est différent, tu remonte, sinon tu reste dans l'eau. Si le case ne fonctionne pas sur un "int" passe par les if(s).

Enfin voila, te prive pas de faire une sauvegarde de ce qui fonctionne et te lancer sur une autre programmation pour tester. :Up:

Bon jeu :banane:
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Avatar de l’utilisateur
oniff
Messages : 186
Inscription : 07 mars 2011 20:00
Localisation : Rennes

Re: Création ROV

Message par oniff »

Merci Geek, houla, ça devient tendu, l'écran serait tip top mais la je vais être largué :o
Je vais refaire un programme plus simple une fois que le ROV sera terminé, j'ai encore du boulot sur la partie mécanique.
J'ai tester concrètement avec les moteurs, servos et tout... Tout fonctionne impeccable, à part quelque petites erreurs que j'ai rectifiées mais c'est bon.
Par contre, j'ai un temps de réaction assez long entre une action sur un joystick et la réponse d'un moteur par exemple, encore pire sur les servos.
C'est pas non plus catastrophique mais il y à genre 1/4 de seconde avant de bouger. Et je n'est que 5cm de cable entre les joystick et la carte, Je n'ose même pas imaginer avec 50M de cable :shock:
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Création ROV

Message par Geeks »

Oh punaise !

Bon, trop long, je suis d'accord ! Regarde plutôt ça:

Si j'écris

Code : Tout sélectionner

void loop() {
   //capturer les evenements manettes
   //capturer la présence d'eau
   //si marche avant
      //marche avant
   //Si marche arière
      //marche arière
   //Si voie d'eau
      //faire la remonter
      //delay(1000) 
}
Comme tu voie, tu passe par un delay 1000 :evil: C'est là qu'est-ton problème. Il va te falloir faire une interruption. Et la, je vais devoir t'expliquer ce qu'est cette bête.

Une interruption c'est comme si tu était un groom d’ascenseur d’hôtel. L'ascenseur est en bas. Quelqu'un appuie sur le 1, l'ascenseur monte. Puis pendant la montée, quelqu'un appuie vers le bas du second étage. L'ascenceur ne s'arrêtera pas au 1 mais montera au 2 puis descendra au 1 et finira en bas.

Une interuption ça revien à:
1/ Sauver les registres
2/ Faire quelque-chose
3/ Restaurer les registres.

Dans une carte Arduino, on distinque deux catégories d'interruptions. Les interruptions logicielles et les interruptions due à certaines pattes. La je te coneillerais une interruption sur patte. En effet, si tu a une voie d'eau. Tu sera donc bloqué, en toute logique par l'avarie, il faut impérativement remonté. Alors tu peux, par exemple déclencher l'interruption sur le front descendant. Vue que 1 = pas d'eau.

Mais tu peux aussi te contenter de faire une interruption logicielle qui elle devrais faire la même chose mais cette fois c'est toi qui contrôle tout.

Sinon, t'a la solution sous-routine. Et tu peux écrire ceci:

Code : Tout sélectionner

void loop() {
   //capturer les evenements manettes
   //capturer la présence d'eau
   //si marche avant
      //marche avant
   //Si marche arière
      //marche arière
   //Si voie d'eau
      //faire la remonter
      //delay(1000)
   //Si pas de voie d'eau
      //delay(20)
}
Comme tu voie j'ai retirer le delay 1000 lorsque j'ai pas de voie d'eau pour avoir un timing plus court. Comme tu boucle rapidement, ici 20ms, tu aura moins de latence. Je parie que tu peux sans mal descendre à 5ms. Nos servos ayant tendance à supporter une fréquence un peu plus rapide tant que la largeur de créneau montant soit bien entre 1 à 2ms.

Voila, je te conseille de faire une petite recherche sur les interruptions sous Arduino. Tu verra c'est très facile et ça demande 2/3 lignes de code + une fonction. J'en ai parlé plus haut, donc ça devrais être facile.

Tien, tu me dis que c'est dur. Mais en fait pense que tu est ici, tu saute là et tu reviens au même point quand ce que tu à fait la bas est fini. Tu voie, c'est beaucoup plus facile qu'il n'en paraît niveau code. :Oo:
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Avatar de l’utilisateur
oniff
Messages : 186
Inscription : 07 mars 2011 20:00
Localisation : Rennes

Re: Création ROV

Message par oniff »

Oui, c'est vrai que ça s'apprend assez vite, tendu au début, après ça va tout seul avec les bases, mais simplifiées c'est déja plus complexe. Mon code est long mais très simple, aussi simple que la LED qui clignote et pour moi c'était déja le parcourt du combattant.
Donc se serait le "delay" du capteur qui retarderai les actions? Bon la c 'est pas non plus la cata à contrôler, du moins à la surface mais sous l'eau :? . La ou ça vas être casse ouille c'est surtout pour le moteur vertical, si il y à un temps entre l'ordre donner et la marche du moteur, je vais pas être super précis la dessous.
Après je ne pense pas utiliser le capteur d'eau afin de faire remonter le ROV mais plutôt à titre de signal d’avertissement à LED. Je ne dispose que d'un propulseur de plongée/ remontée tournant à 1200tr/min. Si la voie d'eau est importante et le ROV en profondeur, il se peut que je grille les cartes ou la caméra avant que celui-ci n'est eu le temps de remonter par lui même. Si la LED voie d'eau s'allume, je tire sur l'ombilic le plus rapidement possible :Up:
J'ai pris une photo du robot, désoler pour la qualités, je n'était pas super équipé:
Image
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Création ROV

Message par Geeks »

Si c'est que pour du signal, vire totalement tes delays alors.

Il faut raisonner en temps de boucle. En temps normal, sans delay, chaque instructions prennent quelques micro-secondes à 16Mhz. (Pour la petite histoire, je viens de regarder un peu ce que disent google, il n'y a pas réellement de correspondance, on on restera pour se simplifier les explications sur ce temps théorique.)

Si tu boucle tout ton soft (au niveau du loop) en une centaines d'instruction, soit environ 1s, chaque secondes tu va donc rafraichir ton affichage. Pouquoi tu t'ajouterais du delai ? Si ce n'est pour faire clignoter la led. Moi, je penserais pour le coup à quelque chose de plus simple...

Soit, j'ai pas d'eau, capteur à 1, led éteinte.
Soit, j'ai de l'eau, capteur à 0 et led alumée.

La diode resterais donc soit éteinte, soit allumée. :Up:
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Avatar de l’utilisateur
oniff
Messages : 186
Inscription : 07 mars 2011 20:00
Localisation : Rennes

Re: Création ROV

Message par oniff »

Mais oui, c'est de ma faute, pourquoi j'ai laissé le "delay"??? la LED allumée constamment lors de voie d'eau c'est se que je voulais, j'ai pas fait attention.
En effet ça réagit beaucoup plus vite maintenant :Up: Merci Geeks
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Création ROV

Message par Geeks »

En fait, j'y suis pour pas grand chose. :lol:

C'est toi qui a tout programmé :Up:

Si j'ai un conseil à te donner. Fais toujours un organigramme comme j'ai fait au dessus. Avec uniquement des commentaires. Tu va voir des choses que tu ne voie pas en développement. Et toujours utiliser les indentation hein ;) On se rends mieux compte de ce que l'on fait. Moi, voie tu, c'est ainsi que je gère 600 lignes pour l'émetteur et 450 pour le récepteur. :o

Je vais essayer encore de synthétisé. J'ai dans la tête un ou deux raccourcis bien pratique 8-)

A propos, tu nous montera des images qui bougent quand ton ROV sera en action :Up: On adore les images qui bougent chez nous :mrgreen:
A défaut d'avoir la science infuse, j'infuse la science. - Racleur de fond depuis Pons 2014.
Sous-marin en état de repos sur cale : Minimog 01
Répondre