Le système Arduino

L’espace pour parler de tout ce qui concerne l’électronique embarquée
soum5015
Messages : 40
Inscription : 26 août 2013 11:13

Re: Le système Arduino

Message par soum5015 »

Merci Geeks, pour ton avis eclairer…
Je pensai faire cela avec un seul arduino… pilotant l'ensemble… cela afin que le fail safe, le capteur d'eau (interne (pour vidange du balaste) et externe (pour la mise en route des moteurs)), le gouvernail et les moteurs puisse interagir simplement avec le reste du programme sans liaison…
d'autre part les ballastes seraient pilotés via un potar 6 positions indiquant le niveau de remplissage : celui ci est capté par un effet de hall de l'aimant suivant le deplacement du ballast (et ILS et contacteur de fin de course)… Il me faut donc un sytème pour lire les données et les gerer le moteur balaste via un transistor mofset et un relais pour l'inversion…
Dans la baignoire j'ai pour projet de mettre un attiny84 pour eclairage et sortie periscopique dès que les "marches"(barreaux d'acces au kiosque du VIIC) sont hors eau… je m'interrogeai pour le correcteur d'assiette pour savoir si je l'integre ou pas au système… (avec ta réponse je pense qu'il sera indépendant comme sur http://bateaux.trucs.free.fr/correcteur_attiny.html)
"En effet, comment fera tu si tu a besoin de tes ballasts en même temps que ta propulsion ? Tu ne pourra pas !"…
j'ai vu un système qui permet le "multifonction" en asynchrone … je crois… d'après ce que j'ai lu il ne faut evidement pas gérer de timing et/ou stoppé la boucle du programme… mais peut être a tu raison… mais dans ce cas tout l'interet du système (gestion de la propulsion et de la gouverne) devient obsoléte…
pour la structure je suis d'accord :

Code : Tout sélectionner

    Init

    Programme principal
    -> Lire les données issue du récepteur
    -> Lire les données issue du ballaste
    -> Lire les données issue des capteurs d'eau
    -> Lire les données issue electrique (voltmetre / fale safe)
    -> Lire les données issue de l'accelerometre (correcteur d'assiette)
    -> Faire un traitement des données
    -> stocker le traitement


    -> Ecrire sur les sorties 
    -> générer la pwm moteur propulsion
    -> générer la pwm moteur pompe
    -> gérer le servo gouvernail (c'est la que ça coince !!!)
    -> gérer le servo barre profondeur (c'est la que ça coince !!!)
    -> faire autre chose (beaucoup de café) 
La gestion PWM peut ce faire sur plusieurs moteurs (seul les données prises à la "volé" sont renvoyé de manière cyclique… (je ne sais pas si je suis clair?)
par contre les servos demandent effectivement un laps de temps jusqu'à la fin de sa course (de l'info transmise)… c'est là que ça va coincer peut être… (faut verifier l'histoire de la solution l'asynchrone)

Pour la fonction (pas logarithmique mais exponentielle "désolé")
j'ai trouvé ça :

Code : Tout sélectionner

double 	exp (double __x)   // function returns the exponential value of x.
…En tout cas merci pour cette réponse…
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Le système Arduino

Message par Geeks »

Oui, tu peux t'appuyé sur une fonction pour l'effet exponentielle. :Up:

En fait, tu devrais faire un montage en l'air. Une platine d'essai, quelques fils, et tester chaque solutions. Ainsi, non seulement tu verra les défauts éventuels mais aussi tu n'aura pas à gérer le montage, démontage ainsi que les mains dans l'eau.

A mon humble avis, si je devais faire un tel projet je commencerais par le récepteur. Il délivre des signeaux PWM du type 1 à 2ms de front positif toute les 20ms. Il existe une fonction qui permet de validé ça. Si il y a perte de radio, tu n'a plus ce signal ou il devient incorrect. Alors tu peux imaginé une perte radio.

Ensuite, quand tu a une détection correct, tu dois récupéré plusieurs voies. Et tu procède à tes calculs. Quand je parle de calculs, je mettrais bien des leds. Exemple, je pousse le manche en avant, led 1 et 2 allumée. Si je pousse en arrière, led 3 et 4 alummée... et ainsi de suite. Déjà cela va te permettre de savoir dans quelle direction tu part.

Au niveau des fonctions annexes. Soit tu module des sorties en parallèles, soit tu te monte un bus avec des données séries. Dans la réalité, un bus peut tomber en panne, il faut donc l'évité pour les fonctions principales. Mais les éclairages, les sorties d'aériens, c'est optoonnel. Donc pilotable par ce biais.

Enfin, quel que soit ton intention de programmé une fonction direct ou une fonction globale, renseigne toi sur les interruptions. Il existe aussi des librairies qui sont très bien fichu si tu n'est pas regardant avec les temporisations.
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
soum5015
Messages : 40
Inscription : 26 août 2013 11:13

Re: Le système Arduino

Message par soum5015 »

Merci ! c'est vrai que vaut mieux tester ça hors eau !… et avec des leds.
A suivre…
Avatar de l’utilisateur
Geeks
Messages : 3593
Inscription : 03 juil. 2010 21:04
Localisation : Brive la Gaillarde (Correze 19)

Re: Le système Arduino

Message par Geeks »

Oui et tu verra qu'il existe souvent plusieurs manières d'arrivé au même résultats.

Cependant, il y a en as des plus optimisés que d'autres :o

Je dit ça car par exemple récement. Je faisait des groupes de if :

Code : Tout sélectionner

//Si la valeur 1 est égale à 10
   //Faire ça

//Si la valeur 1 est égale à 20
   //Faire autrement
C'est beaucoup moins bien optimisé que cela:

Code : Tout sélectionner

//Si la valeur 1 est égale à 10
   //Faire ça

//else if -> Si la valeur 1 est égale à 20
   //Faire autrement
En d'autre terme, dans le premier cas, on dois toujours tout vérifier, c'est à dire que si tu à 50 if(), tu te tape les 50 mêmes si elles ne sont pas bonne. Dans le second cas, tu ne te tappe les conditions que jusqu'à ce que tu en ai une de vrai.

Au niveau code réel cette fois (pour l'exemple):

Code : Tout sélectionner

int Valeur1 = 0;
//...
//Une partie de mon code
// Valeur prends 105
//...

if(Valeur 1 == 5) {
   check(0);
}

else if(Valeur1 == 10) {
   ckeck(1);
}
//...
else if(Valeur1 == 105) {
   ckeck(10);
}
Comme tu remarquera, le premier id est normal, les suivant c'est else, espace, if, patenthèse. :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
laurent0091
Messages : 187
Inscription : 06 mars 2011 00:00
Localisation : Essone (91)
Contact :

Re: Le système Arduino

Message par laurent0091 »

Bonjour à tous,
Ci-dessous, l'adaptation d'une platine capteur de pression.
Basé autour d'un BMP085, j'ai fait une petite adaptation pour qu'il soit exploitable pour notre loisir.

Image

J'ai fabriqué deux pièces, une en PVC et l'autre en aluminium, le tout collé à l’époxyde.
Image


Image

Pour découvrir toutes les étapes de fabrication, le lien de l'article ci-dessous :
http://diopter.fr/index.php/technique/e ... e-pression

Laurent
Répondre