Compteur Geiger Arduini pro-mini / Domoticz

Forum dédie aux capteurs et gateway mysensors.org
dudule63
Messages : 5
Inscription : 30 mai 2019, 16:20

Compteur Geiger Arduini pro-mini / Domoticz

Message par dudule63 »

Bonjour à tous
J’essaie en vain d’envoyer les valeurs d’un compteur Geiger vers Domoticz (KKmoon Détecteur de rayonnement nucléaire de module de kit de compteur assemblé DIY Geiger, celui que l’on trouve partout) Le compteur est relié à un pro-mini et à priori il fonctionne correctement puisque je vois des valeurs qui changent dans le moniteur série (16:32:20.390 -> counts: 12 CPM: 20 ==> uSv/hr: 0.1140),
Par contre rien la valeur « cpm » n’arrive pas dans Domoticz alors qu’elle semble bien envoyée ( 16:24:18.024 -> 376398 TSF:MSG:SEND,1-1-0-0,s=1,c=1,t=24,pt=5,l=4,sg=0,ft=0,st=OK:12)
Henri bachetti avait un peu parlé de ça sur le forum mysensors.

Code : Tout sélectionner


// Averaging (logging) period in milliseconds, typically 15000-60000.
#define AVG_PERIOD  15000
#define ONE_MINUTE  60000

// I'm using the SBM-20 Geiger-Muller (GM) tube with my kit. Conversion
// factors for other GM tubes may be found scattered throughout the Web.
#define SKETCH_NAME "Geiger Sensor"
#define SKETCH_MAJOR_VER "2"
#define SKETCH_MINOR_VER "0"
#define CHILD_ID 1   // Id of the sensor child 1 par défaut
#define SKETCH_NAME "Geiger Sensor"
#define SBM_20
#ifdef SBM_20
#define CONV_FACTOR 0.0057   // SBM-20 counts to uSv/hr multiplier
#endif

// TODO: insert #defines for other Geiger tube conversion factors here.
//*****************************************************
#define MY_RADIO_NRF24
#define MY_RF24_CE_PIN        A0
#define MY_RF24_CS_PIN        10
//***********************************************
unsigned long counts; // # of raw GM Tube events
unsigned long cpm;    // Counts Per Minute (CPM)
unsigned int  mult;   // CPM = (counts in a given interval) * multiplier
//*****************************************************
#define MY_DEBUG
#include <SPI.h>
#include <MySensors.h>
MyMessage msg(CHILD_ID, V_VAR1);
//**********************************************************
// Interrupt handler that counts raw events from Geiger Kit
void tube_impulse() {
  counts++;
}
void setup()
{
  wdt_enable(WDTO_8S);

  // Geiger initialise
  counts = 0;
  cpm = 0;

  // Initialize Serial communications
  Serial.begin(9600);

  // Determine multiplier for your log period
  mult = ONE_MINUTE / AVG_PERIOD;

  pinMode(2, INPUT);                          // Set pin 2 up for GM tube event interrupts
  digitalWrite(2, HIGH);                      // Use internal pullup resistor par 3 défaut
  //
  // NOTE: The OLD Arduino IDE (v1.0.6) seems to work better with the cheap Chinese
  // clone Nano. If you're using the latest IDE, replace this line with a call to
  // digitalPinToInterrupt(pin).
  //
  attachInterrupt(1, tube_impulse, FALLING); //0 par défaut
  wdt_reset();
  Serial.println("http://rhelectronics.net Geiger Kit V3.00");
  Serial.println("=========================================");
  Serial.print("Please stand by for ");
  Serial.print(AVG_PERIOD / 1000);
  Serial.println(" sec. for first reading...");
  Serial.println();
}
void presentation() {
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo(SKETCH_NAME, SKETCH_MAJOR_VER "." SKETCH_MINOR_VER);
  wdt_reset();
  wait(500);
  present(CHILD_ID, S_ARDUINO_NODE);
  wdt_reset();
  wait(500);
}
void loop()
{
  wdt_reset();
  // Elapsed time stuff
  static unsigned long then;
  unsigned long now = millis();

  // Approx radiation level in microsieverts
  double uSv;
  if (now - then > AVG_PERIOD) {
    then = now;
    if (counts) {                     // i.e., if (counts != 0)
      cpm = counts * mult;
      uSv = cpm * CONV_FACTOR;
    } else {
      uSv = 0;
    }
    Serial.print("counts: ");
    Serial.print(counts);
    Serial.print("  CPM: ");
    Serial.print(cpm);
    Serial.print("  ==> uSv/hr: ");
    Serial.println(uSv, 4);          // Display 4 decimal places
    sendSketchInfo(SKETCH_NAME, SKETCH_MAJOR_VER "." SKETCH_MINOR_VER);
    send(msg.set(cpm));
    counts = 0, cpm = 0;
  }
  delay(100);  // TODO: more efficient form of power saving/sleep

}
domdom
Messages : 79
Inscription : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: Compteur Geiger Arduini pro-mini / Domoticz

Message par domdom »

Bonsoir,
Je n'ai pas trop le temps de me pencher sur ton code, mais dans la présentation, ton S_ARDUINO_NODE me semble surprenant...
A ta place, je partirais d'un programme simple mysensors du site (genre https://www.mysensors.org/build/temp), et tu mets une valeur de température en dur (ou un compteur pour avoir un truc qui change).
Une fois que cette étape fonctionne, tu pourras remplacer les valeurs en dur par celles mesurées par ton capteur.
Bon courage
dudule63
Messages : 5
Inscription : 30 mai 2019, 16:20

Re: Compteur Geiger Arduini pro-mini / Domoticz

Message par dudule63 »

Merci pour ta réponse domdom, je vais regarder ça.
Répondre