Vous êtes ici :   Accueil » profondeur de plongée
    Imprimer la page...

profondeur de plongée

Montage Sécurité profondeur de plongée

03/2013

Système de sécurité avec un Arduino Nano et un Capteur de pression
Eviter au sous marin de descendre en dessous d'une profondeur donnée

Le Materiel:
  • Un PC pour programmer l'arduino  (version 1.0.1 pour le prg arduino)
  • Une platine Arduino Nano :   15 € sur Ebayarduino-nano.jpg
  • Un capteur de pression BMP085:  8€ sur Ebay
  • BMP085_00.jpg   
Il faudra faire une petite modification sur le BMP085,pour pouvoir y adapter un tuyau qui sortira a l'extérieur du compartiment étanche du sous marin

BMP85_01.jpg

 

Déroulement du programme
  • Mise a l'eau du sous marin
  • allumer l'émetteur et le récepteur
  • le capteur de pression se calibre pendant les 5 premières secondes a la mise sous tension pour définir la pression atmosphérique  quand le sous marin est en surface
  • pendant la navigation en surface ou sous  la surface de l'eau, le capteur mesure  la pression, tant que la pression est inferieur à la Profondeur_Max définie dans le programme, il restitue les ordres de la télécommande
  • si le capteur mesure une pression supérieur à la Profondeur_Max, il prend le pas sur la télécommande, et viendra mettre le servo dans un angle défini  Angle_Servo_Vidange = XX
  • XX représente l'angle du servo  pour vidanger (angle servo = 90°±45 en théorie), pour moi c'est 91
  • Si le sous marin repasse au dessus de la Profondeur_Max définie, le capteur de pression redonne la main a la télécommande
  • si il y a une perte de signal le capteur mettra aussi le servo en position vidange (fail-safe) tant que le signal ne sera pas revenue
  • Pour les signaux de la télécommande, généralement les impulsions sont comprissent entre 1000 et 2000 avec en point milieu 1500, ces valeurs sont a modifier ,car chaque émetteur est différent ,et les valeurs peuvent etre de 1100 a 2050,avec le point milieu a 1420 par exemple
Le branchement
Branchement_Nano-BMP085.jpg

 

Conclusion
Cela fonctionne parfaitement, et le capteur est tres réactif, il faut soigner les connections, et vérifier la bonne fixation du tuyau


Le code a entrer dans l'AtTinY 85

/* --- Programme Arduino version 1.0.5--- 22/12/2019
carte Arduino UNO + BMP85
 **************************
  ------Branchements ---------------
 GY-65       --> Arduino NANO
 vcc         -->  Pin 5v (ou 3.3 volts)
 GND         -->  Pin masse
 SDA         -->  Pin A4
 SLC         -->  Pin A5
 */
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <SoftwareSerial.h>
 
//----------BMP085----
Adafruit_BMP085 bmp;
long Pression_Surface;      // Pression lut a la Surface par le capteur
int Pression_Relative;      // Difference de Pression entre la Surface et la Pression lut
long Pression_Max = 0;      // Variable pour stocker la valeur Maxi lut sur le capteur de Pression pour faire la moyenne
long Pression_Min = 0;      // Variable pour stocker la valeur Mini par sur le capteur de Pression pour faire la moyenne
int Profondeur_Max = 1916;  // Declare la variable (Profondeur_Max) 479=6.25cm, 958=12.5cm, 1916=25cm, 3833=50cm , 7666= 1metre , 15352= 2metres


//=================================================
void setup(){
  Serial.begin(9600);//moniteur serie-----
  bmp.begin();     //Initialiser BMP085----
  Calibration();   //calibration BMP085----
}
//=========================================================================================================
void loop(){
 //**************** Recuperer les donnees du capteur BMP085    
    Pression_Relative = bmp.readPressure() - Pression_Surface;


//*********Controle de la profondeur avec CAPTEUR DE Pression BMP085 (Pin A4-SDA & A5-SLC sur ARDUINO Nano)
if (Pression_Relative > Profondeur_Max) {   // Si profondeur maxi depassee
  Serial.println("profondeur maxi depassee ");
}else{
  Serial.println("profondeur ok ");
}//----fin du programme     

void Calibration(){    // Calibration du BMP085  pour definir le O Surface pendant les 10 premieres secondes
  Serial.print("calibration, patientez 10 secondes !! ");
  Pression_Max = bmp.readPressure(); // valeur lut par le capteur de Pression (definir une valeur Pression Max )
  Pression_Min = Pression_Max;       // Definir une valeur Pression Min = Pression Max
  for (int i=0; i <= 10; i++) {                         // repeter 10 fois 1 seconde
    Pression_Surface = bmp.readPressure();    //Stocker la valeur du CAPTEUR Pression dans la variable "Pression_Surface"
    if (Pression_Surface > Pression_Max) { Pression_Max = Pression_Surface;} // Enregistre la valeur Max lut par le capteur de Pression
    if (Pression_Surface < Pression_Min) { Pression_Min = Pression_Surface;} // Enregistre la valeur Min lut par le capteur de Pression
  delay(1000);      // wait 1 seconds
  }
  //-------------------- definir valeur moyenne du 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;} // prend la Pression max en Surface si pression min = pression max
 
} //---------fin calibration capteur de Pression


Page lue 431 fois