Własny detektor burzy

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
elektron81
Młodszy majsterkowicz
Posty: 1
Rejestracja: 12 cze 2015, 20:45

Własny detektor burzy

Post autor: elektron81 » 12 cze 2015, 21:10

Witam
Czy byłby ktoś uprzejmy żeby dopisać kawałek kodu do istniejącego już projektu.
http://majsterkowo.pl/wlasny-detektor-burzy/

Potrzebuje żeby podczas wykrycia burzy załączyły się 2 przekaźniki np. na 1godz.
ale zależnie od częstotliwości wykrycia.
Zakładam że dwa odczyty w czasie 10min to będzie ok.

Sam nie jestem wstanie dopisać tej funkcji bo nie miałem styczności z programowaniem.


Pozdrawiam

Kod: Zaznacz cały

#include <SPI.h>
#include <AS3935.h>

void printAS3935Registers();

byte SPItransfer(byte sendByte);

void AS3935Irq();
volatile int AS3935IrqTriggered;

AS3935 AS3935(SPItransfer,SS,2);

void setup()
{
  Serial.begin(9600);

  SPI.begin();

  SPI.setDataMode(SPI_MODE1);

  SPI.setClockDivider(SPI_CLOCK_DIV16);

  SPI.setBitOrder(MSBFIRST);

  AS3935.reset();

  if(!AS3935.calibrate())
    Serial.println("Tuning out of range, check your wiring, your sensor and make sure physics laws have not changed!");

  AS3935.setIndoors(); // gdy sensor jest na zewnatrz zamieniamy na AS3935.setOutdoors();

  AS3935.enableDisturbers();

  AS3935.setNoiseFloor(1); // kalibracja zaklocen - patrz opis

  printAS3935Registers();
  AS3935IrqTriggered = 0;

  //attachInterrupt(1,AS3935Irq,RISING); // odkomentuj dla Arduino Mega, zakomentuj dla UNO
  attachInterrupt(0,AS3935Irq,RISING); // odkomentuj dla Arduino UNO, zakomentuj dla MEGA
}

void loop()
{
  if(AS3935IrqTriggered)
  {
    AS3935IrqTriggered = 0;
    int irqSource = AS3935.interruptSource();
    if (irqSource & 0b0001)
      Serial.println("Noise level too high, try adjusting noise floor");
    if (irqSource & 0b0100)
      Serial.println("Disturber detected");
    if (irqSource & 0b1000)
    {
      int strokeDistance = AS3935.lightningDistanceKm();
      if (strokeDistance == 1)
        Serial.println("Storm overhead, watch out!");
      if (strokeDistance == 63)
        Serial.println("Out of range lightning detected.");
      if (strokeDistance < 63 && strokeDistance > 1)
      {
        Serial.print("Lightning detected ");
        Serial.print(strokeDistance,DEC);
        Serial.println(" kilometers away.");
      }
    }
  }
}

void printAS3935Registers()
{
  int noiseFloor = AS3935.getNoiseFloor();
  int spikeRejection = AS3935.getSpikeRejection();
  int watchdogThreshold = AS3935.getWatchdogThreshold();
  Serial.print("Noise floor is: ");
  Serial.println(noiseFloor,DEC);
  Serial.print("Spike rejection is: ");
  Serial.println(spikeRejection,DEC);
  Serial.print("Watchdog threshold is: ");
  Serial.println(watchdogThreshold,DEC);  
}

byte SPItransfer(byte sendByte)
{
  return SPI.transfer(sendByte);
}

void AS3935Irq()
{
  AS3935IrqTriggered = 1;
}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


giciors
Młodszy majsterkowicz
Posty: 37
Rejestracja: 12 sie 2014, 16:36

Re: Własny detektor burzy

Post autor: giciors » 15 cze 2015, 21:37

WItam
to naprawdę dużo nie kosztuje , wystarczy spędzić w necie jakieś 2 godzinki i już będziesz w stanie to zrobić : dla Ciebie podpowiedz: zapodajesz dowolny pin w tym miejscu {
Serial.print("Lightning detected ");
Serial.print(strokeDistance,DEC);
Serial.println(" kilometers away.");
tu wstawias procedurę odpalenia przekaźnika


}
ODPOWIEDZ

Strony partnerskie: