En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies pour vous proposer des contenus et services adaptés. Mentions légales.
Vous êtes ici :   Accueil » sécurité plongée
 
Prévisualiser...  Imprimer...  Imprimer la page...
Prévisualiser...  Imprimer...  Imprimer la section...

Rubriques

Rencontres (SM)

Mike James's

De jolis Modèles à voir sur ce site

 ↑  

Astuces (SM)

 ↑  

Mon Materiel

 ↑  

HMS TRENCHANT

 ↑  

Le U73

 ↑  

S100 SchnellBoot

 ↑  

La JOCELYNE

 ↑  

Le MOLCH

 ↑  

Réseaux sociaux

sécurité plongée

rss Cet article est disponible en format standard RSS pour publication sur votre site web :
https://papy94.fr/Site/data/fr-articles.xml

Détecteur d'eau + sécurité profondeur
du TRAFALGAR

Version 01

Mars 2013

les composants:

  • 1 AtTiny85
  • 2 résistances
  • Des barrettes mâles
  • 1 Circuit imprimé
  • 1 capteur de pression MPX10GP

Le capteur de pression MPX10GP sera remplacé par un Capteur de pression barométrique et de température BMP085 beaucoup plus précis dans la version 02

Dans le TRAFALGAR, le remplissage du ballast se fait par une pompe, pour la vidange,c'est la compression de l'air qui chasse l'eau, il faut pincer le tuyau pour garder l'eau dans le ballast

un simple failsafe ferait l'affaire pour garantir la vidange du ballast en cas de perte radio

J'ai voulu faire un system qui remplace le Failsafe, mais qui aussi en cas d'entée d'eau et de profondeur dépassée ferais la même action sur le servo presse-durite

Si la profondeur mesurée par le capteur de pression est supérieur a la pression que j'ai défini (profondeur maxi à ne pas dépasser), mon montage prendra le pas sur l'émetteur et le servo ira se mettre en position de vidange tant que je ne serai pas remonté au dessus de ma profondeur maxi

Quand je repasserai au dessus de ma profondeur maxi, l'émetteur reprendra le contrôle du servo

Une sonde est branchée, et détectera s’il y a présence d'eau dans le fond du compartiment, en cas de détection, mon montage prendra le pas sur l'émetteur et le servo ira se mettre en position de vidange ,mais l'émetteur ne pourra reprendre la main et je ne pourrais pas replonger

Sur ce montage, je peux régler la profondeur maxi au moyen de l'émetteur (navigation en piscine ou en étang)

Le montage se branche entre le récepteur et le servo

La vidéo ,test avec une seringue pour simuler la pression

Securite_plongee_02.jpg

Le code ARDUINO pour programmer l'AtTiny85

/*=====================================================================
                           CAPTEUR PRESSION reglabe avec emetteur + DETECTEUR D EAU
Commande un servo a  l aide d un capteur de pression MPX10GP et d un detecteur d eau
La profondeur Max pourra etre modifiee en faisant varier la valeur profondeur maxi avec la voie 7:
(Valeur theorique du Signal_Capteur =495 a  525)
 ====================================================================*/
#include <SoftRcPulseOut.h>           // Appel de la librairie servo
SoftRcPulseOut servo_1;               // Declare le servo (Pin 0 pour AtTyni85)
const int Signal_Reglage = 4;         // Declare la variable (Signal_Reglage profondeur) sur le pin 4.
Le recepteur voie 7 sera branche ici (Pin 4 pour AtTyni85)
const int Signal_Capteur = 1;         // Declare la variable (Signal_Capteur) sur le pin 2. Le Capteur
sera branche ici (Pin 2 pour AtTyni85) il
const int Signal_Recepteur = 3;       // Declare la variable (Signal_Recepteur) sur le pin 3. Le recepteur voie 6 sera branche ici (Pin 3 pour AtTyni85)
const int Signal_Detecteur = 1;       // Declare le fil du detecteur (Signal_eau) sur le pin  (Pin 1 pour AtTyni85)
//le Signal_Capteur et Signal_Detecteur sont tout les deux declare sur le PIN 1 bien que le Signal_Capteur
soit sur le PIN 2,je ne comprend pas car cela fonctionne comme ca

int Val_SignalReglage;                // Variable pour stocker la valeur lue sur le Recepteur voie 7
int Val_SignalCapteur;                // Variable pour stocker la valeur lue sur le capteur de pression
int Val_SignalRecepteur;              // Variable pour stocker la valeur lue sur le Recepteur voie 6
int angle_potar = 0;                  // Declare la variable (Angle_potar emetteur)
int Angle_Servo = 0;                  // Declare la variable (Angle_Servo)
int Angle_Servo_vidange = 90;         // Declare la variable (Angle_Servo_vidange)
int Pression_Surface = 0;             // Declare la variable (pression en Surface)
int Profondeur_Max = 0;               // Declare la variable (Profondeur_Max)
int pression_Max = 0;                 // Declare la variable pression Max lue par le capteur de pression
int pression_Min = 0;                 // Declare la variable pression Min lue par le capteur de pression

// Valeur thaorique du Signal_Recepteur voie 6 = 1073 a 2110 avec emetteur Futaba
int Max_voie6 = 2110;                 // Declare la variable valeur max de la voie 6
int Min_voie6 = 1073;                 // Declare la variable valeur min de la voie 6
// Valeur thaorique du Signal_Reglage voie 7 = 960 a  2060  avec emetteur Futaba
int Max_voie7 = 2060;                 // Declare la variable valeur max de la voie 7
int Min_voie7 = 960;                  // Declare la variable valeur min de la voie 7====================================================================
void setup()
{
  pinMode(Signal_Reglage, INPUT);         // Declare la variable Signal Reglage en entree
  pinMode(Signal_Capteur, INPUT);         // Declare la variable Signal Capteur en entree
  pinMode(Signal_Recepteur, INPUT);       // Declare la variable Signal Recepteur en entrée
  servo_1.attach(0);                      // Attache le servo au pin 0   (Pin 0 pour AtTyni85)

  pinMode(Signal_Detecteur, INPUT);       // Declare la variable Signal detecteur eau en entrée
  digitalWrite(Signal_Detecteur, HIGH);   // Activation du pull-up interne pour le detecteur d eau


 // calibration du capteur de pression pendant les 5 premieres secondes pour definir la pression en surface
  pression_Max = analogRead(Signal_Capteur);            // pression Max = valeur lue par le capteur de pression (definir une valeur)
  pression_Min = pression_Max;                          // pression Min = pression Max (definir une valeur)
  while (millis() < 5000) {
   Val_SignalCapteur = analogRead(Signal_Capteur);                           //Stocker la valeur du CAPTEUR dans la variable "Val_SignalCapteur"
   if (Val_SignalCapteur > pression_Max) {pression_Max = Val_SignalCapteur;} // Enregistre la valeur Max lue par le capteur de pression   
   if (Val_SignalCapteur < pression_Min) {pression_Min = Val_SignalCapteur;} // Enregistre la valeur Mini lue par le capteur de pression
    //---fin calibration capteur de pression
  }
  if (pression_Max > pression_Min) {Pression_Surface = pression_Max-((pression_Max-pression_Min)/2);}  // defini la pression moyenne en surface
  if (pression_Max == pression_Min) {Pression_Surface = pression_Max;}                                 //si pas d ecart prendre la valeur maxi en reference
}

//====================================================================
void loop()
{
  //-----------------test Detection eau -----------------
  if (digitalRead(Signal_Detecteur)){   //------------ si pas de contact eau-----------
         
          //-----------------definir la profondeur maxi avec la telecommande----------------
            Val_SignalReglage = pulseIn(Signal_Reglage, HIGH, 30000);    // Donne a la variable (Val_SignalReglage) la valeur de (Signal_Reglage) lue sur le pin 4
            angle_potar = map(Val_SignalReglage, Min_voie7, Max_voie7, 0, 30);      // Calibre des valeurs du potar voie 7 de 0 à 30
            angle_potar = constrain(angle_potar, 0, 30);                 // Fixe les valeurs minimum et maximum du potar
            Profondeur_Max = Pression_Surface + angle_potar;             // definir la profondeur maxi demandee avec la voie 7
            if ((Profondeur_Max > 550) or (Profondeur_Max < Pression_Surface))  {Profondeur_Max = Pression_Surface;}
          
          //-----------------test profondeur----------------
          Val_SignalCapteur = analogRead(Signal_Capteur);                  // Lit la valeur du Capteur de pression
               if (Val_SignalCapteur  <= Profondeur_Max) {     //--------si pression capteur < Profondeur_Max défini--------------
                  Val_SignalRecepteur = pulseIn(Signal_Recepteur, HIGH, 30000);  // Donne à la variable (Val_SignalRecepteur) la valeur de (Signal_Recepteur) lue sur le pin 3
                  //interrupts();                                                  // Reactive les interruptions
                  Angle_Servo = map(Val_SignalRecepteur, Min_voie6, Max_voie6, 45, 135);   // Calibre des valeurs de pour le servo de 0 à 180  
                  Angle_Servo = constrain(Angle_Servo, 45, 135);                 // Fixe les valeurs minimum et maximum en degré de monservo
                  servo_1.write(Angle_Servo);                            // Positionne le servo suivant les ordes de la radiocommande  
                  delay(15);                                             // Delai pour que le servo atteigne sa position
                  SoftRcPulseOut::refresh();               // Rafraichissement bibliotheque servo

               }else{     //-------------si pression capteur > Profondeur_Max ------------------
                  servo_1.write(Angle_Servo_vidange);                    // Positionne le servo en vidange
                  delay(15);                                             // Delai pour que le servo atteigne sa position
                  SoftRcPulseOut::refresh();               // Rafraichissement bibliotheque servo
               } //-----------------fin test profondeur----------------    

  }else{  //----------- si Detection eau -------------------------
      servo_1.write(Angle_Servo_vidange);                    // Positionne le servo en vidange
      delay(15);                                             // Deai pour que le servo atteigne sa position
      SoftRcPulseOut::refresh();               // Rafraichissement bibliotheque servo
      }  //-----------------Fin Detection eau-----------------
 } //========================== FIN DU PROGRAMME=============================

Le code n'est pas parfait, le CI n'ont plus, mais cela fonctionne comme je le voulais
et c'est bien le principal

 


Date de création : 06/03/2013 @ 11h08
Dernière modification : 21/01/2014 @ 18h37
Page lue 6420 fois

Traduction

Recherche

Recherche

Préférences


Se reconnecter :
Votre nom (ou pseudo) :
Votre mot de passe
<O>


  649506 visiteurs
  15 visiteurs en ligne

  Nombre de membres 115 membres
Connectés :
membresPapy94

Cela peut servir

 ↑  

Calendrier

Lien constructions

Il faut ètre inscrit sur les forums
_ Buildingreport of my type VIIC scale 1:35 Forum RCgroups
_ My 1/32 VIIC Forum RCgroups
_ graupner Shark conversion Forum RCgroups
_ Engel Gato anyone building Forum RCgroups
_ VII-C/41 REVELL au 1/72ém Forum La royale
_ VII-C/41 REVELL au 1/72ém Forum subsim

 ↑  

Annonce

Archives Nouvelles


+ Année 2017
 -  Année 2017
+ Année 2015
 -  Année 2015
+ Année 2014
 -  Année 2014
+ Année 2013
 -  Année 2013
+ Année 2012
 -  Année 2012
+ Année 2011
 -  Année 2011
+ Année 2010
 -  Année 2010
+ Année 2009
 -  Année 2009
Vous êtes ici :   Accueil » sécurité plongée