Arduino a bouřkový senzor, zprovoznění a úprava kódu.

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
jova1
Příspěvky: 1207
Registrován: 20 pro 2007, 01:00
Bydliště: Chýnov - to je kousek od Tábora
Kontaktovat uživatele:

Arduino a bouřkový senzor, zprovoznění a úprava kódu.

#1 Příspěvek od jova1 »

Zdravím.
Mohl by mi tu někdo poradit se zprovozněním a úpravou programu bouřkového senzoru? Předem upozorňuju, že Cčko mi absolutně nic neříká, patrně ho ani v budoucnu používat nebudu, tak případný rádce bude muset mít velkou trpělivost a nejlépe mi napsat, jak upravit příslušnou část kódu.
Zakoupil jsem tento senzor a snažím se ho zprovoznit podle těchto stránek:
https://wiki.dfrobot.com/Gravity%3A%20L ... 0#target_5
Bohužel k pokusům mám v současnosti pouze desku LEONARDO R3 a tak nevím, zda je to důvod, proč se to chová následovně:
Zapojil jsem to podle obrázku.
Zkopíroval a vložil do programu arduina v 1.8.13 uvedený kód.
Stáhl a patrně i nainstaloval uvedenou knihovnu (program neprotestuje po ověření).
Nahrál program do LEONARDA.
Spustil sériový monitor, nastavil 115200 baudů.
A… nic. Monitor nic nevypíše.
Vůbec netuším co s tím, poradíte někdo?

Uživatelský avatar
misocko
Příspěvky: 1250
Registrován: 26 čer 2009, 02:00
Bydliště: Hlohovec (Sk)

#2 Příspěvek od misocko »

Zacni tym ze zistis ci ti vobec komunikuje arduino s pc. Nejaky jednoduchy kod na serial.print si stiahni z netu.
Odporucam niekoho poprosit aby Ti kod upravil.

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#3 Příspěvek od Celeron »

Nastavils před nahráním (předpokládám v Arduino IDE) opravdu Leonardo? Pokud se třeba u desky Pro Micro ATmega32U4, (co má stejnej procík) nechá nastavení na některou desku s ATmega328P,(Uno, Mini, Nano) tak to spolehlivě zruší bootloader a musí se přes SPI obnovit. A když odpráskneš bootloader, tak nejde sériák. Zkus to nahrát znova, pokud to nepůjde, jseš bez bootloaderu.
Koukal jsem na ten program a je psanej pro ESP. Obávám se, že bez úpravy Ti na Leonardu nepůjde.
Jirka

Proč mi nemůže všechno chodit hned ?!!

Uživatelský avatar
hafca
Příspěvky: 4401
Registrován: 27 črc 2004, 02:00
Bydliště: 25km na západ od Prahy
Kontaktovat uživatele:

#4 Příspěvek od hafca »

Tak nevím, já to nahrál do UNO a sériová komunikace funguje. Asi by to opravdu chtělo zkontrolovat tu komunikaci.
Mám s tímhle čidlem postavený detektor s Nokia 5110 displejem. Navíc je tam ještě BMP180 na výpis teploty a tlaku.
Na vyzkoušení stačí tenhle program a navíc bude vidět jakou má modul adresu.
// Arduino I2C skener
// navody.dratek.cz

// připojení potřebné knihovny
#include <Wire.h>
// nastavení čísel propojovacích pinů
#define I2C_SDA 21
#define I2C_SCL 22

void setup() {
// zahájení komunikace po I2C sběrnici,
// lze použít buď výchozí piny s variantou ()
// nebo specifikovat piny např. u ESP desek (SDA, SCL)
Wire.begin();
//Wire.begin(I2C_SDA, I2C_SCL);

// zahájení komunikace po sériové lince
Serial.begin(9600);
Serial.println("Start I2C skeneru...");
}

void loop() {
// vytvoření pomocných proměnných
byte chyba, adresa;
int pocetZarizeni = 0;
Serial.println("Zacatek hledani...");
// smyčka pro hledání zařízení
// I2C zařízení mohou mít adresu 1-126
for (adresa = 1; adresa < 127; adresa++ ) {
// zahájení komunikace a jeho následné ukončení,
// při ukončení probíhá detekce zařízení pomocí
// kontroly návratové hodnoty
Wire.beginTransmission(adresa);
chyba = Wire.endTransmission();
// pokud nám zařízení odpoví '0',
// tak funguje správně
if (chyba == 0) {
// vytištění informací o zařízení včetně
// jeho adresy v hexa formátu
Serial.print("I2C zarizeni nalezeno na adrese 0x");
Serial.print(adresa, HEX);
Serial.println(" !");
// inkrementace počítadla zařízení
pocetZarizeni++;
}
// při chybě v komunikaci je chybný výstup 4
else if (chyba == 4) {
// vytištění informací o zařízení včetně
// jeho adresy v hexa formátu
Serial.print("Neznama chyba na adrese 0x");
Serial.println(adresa, HEX);
}
}
// kontrola počítadla zařízení
if (pocetZarizeni == 0) {
// nebylo nalezeno žádné zařízení, protože neproběhla inkrementace
Serial.println("Zadne I2C zarizeni nebylo nalezeno.");
}
else {
// oznámení o konci hledání
Serial.print("Konec hledani, nalezeno ");
Serial.print(pocetZarizeni);
Serial.println(" zarizeni.");
}
// pauza před novým během smyčky
delay(5000);
}
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.

Uživatelský avatar
jova1
Příspěvky: 1207
Registrován: 20 pro 2007, 01:00
Bydliště: Chýnov - to je kousek od Tábora
Kontaktovat uživatele:

#5 Příspěvek od jova1 »

Sice většině termínům nerozumím, ale pokusím se odpovědět intuitivně.
LEOPNARDO bylo nastavené, pokud do něj pošlu jednoduchý kód s textem a nastavím monitor na 9600b. tak to text zobrazí. Takže předpokládám, že je vše ostatní v pořádku.
Ještě jsem našel ARDUINO MEGA 2560 a zdá se, že se něco děje. :D
Monitor vypsal:
DFRobot AS3935 lightning sensor begin!
set up for indoor operation
disturber detection enabled
AS3935 manual cal complete

Tak nyní jen zjistit jestli to něco chytí. Na zapalovač to nereaguje a nejbližší bouřka je někde nad Balkánem :(

Uživatelský avatar
hafca
Příspěvky: 4401
Registrován: 27 črc 2004, 02:00
Bydliště: 25km na západ od Prahy
Kontaktovat uživatele:

#6 Příspěvek od hafca »

Výpis je stejný jako ten můj, takže to funguje. A jestli to něco vypíše když to škádlíš zapalovačem, tak je i adresa OK.
Ale na tohle by mělo stačit i NANO.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.

Uživatelský avatar
jova1
Příspěvky: 1207
Registrován: 20 pro 2007, 01:00
Bydliště: Chýnov - to je kousek od Tábora
Kontaktovat uživatele:

#7 Příspěvek od jova1 »

Tak jsem z toho ještě víc zmatený. Když do těch dvou desek nahraju ten Arduino I2C skener, tak ani jedna deska ten detektor blesků nenajde :(
C mám zapojené na A5, D na A4. Jiné čipy ARDUINA zatím nemám, ty detektory blesku mám 2 a tak předpokládám, že alespoň jeden by měl být funkční.

Uživatelský avatar
hafca
Příspěvky: 4401
Registrován: 27 črc 2004, 02:00
Bydliště: 25km na západ od Prahy
Kontaktovat uživatele:

#8 Příspěvek od hafca »

Nevím jestli jsem to co jsi napsal pochopil správně.
Leonardo má piny SCL a SDA první dva v řadě pod tlačítkem.
U Mega jsou to poslední dva v řadě na opačné straně než je napájecí konektor.
A u obou by to mělo na deskách být i popsané. Takže jestli to máš jinde, tak to nic najít nemůže.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.

Uživatelský avatar
jova1
Příspěvky: 1207
Registrován: 20 pro 2007, 01:00
Bydliště: Chýnov - to je kousek od Tábora
Kontaktovat uživatele:

#9 Příspěvek od jova1 »

Ano, chyba na mojí straně. Netušil jsem, že ty mé desky mají přímou komunikaci I2C na samostatných pinech. Mám to na té MEGě a ta už detektor našla na adrese 0x2.

Já ale mám ten program pro UNO a tam se používaly piny A4, A5.
Takže předpokládám, že se musí i ten původní program upravit na ty piny sběrnice I2C, nebo mám použít ty piny A4, A5?
Nebo to zatím mám nechat být a koupit to UNO?
Ve výsledku bych se potřeboval dopracovat k obvodu, který při zaregistrování blesků v určité vzdálenosti například pod 10km, sepne relé a po určitém času, např. 20minut, pokud už do 10 km žádné blesky nezaregistruje, zase relé vypne. Nic víc od toho nechci. Předpokládám, pro člověka znalého, otázka pár minut dát takový program dohromady, pro mě zatím evidentně věc nemožná :?

Uživatelský avatar
Mahoney
Příspěvky: 347
Registrován: 26 říj 2019, 02:00

#10 Příspěvek od Mahoney »

Celeron píše: Koukal jsem na ten program a je psanej pro ESP. Obávám se, že bez úpravy Ti na Leonardu nepůjde.
Ty myslíš tohle?

Kód: Vybrat vše

#if defined(ESP32) || defined(ESP8266)
#define IRQ_PIN       0
#else
#define IRQ_PIN       2
#endif
Tohle jen říká, že POKUD je použita deska s ESP32 nebo ESP8266, tak se předefinuje IRQ pin, nic víc.

@jova1: Obojí je správně, můžeš si koupit Uno, a nebo jak píše Hafca, můžeš nastavit I2C piny tam kde je ten procák a deska doopravdy mají, jinak to nebude fungovat. Co se týče simulace blesku, lepší by byl blesk od foťáku (nejlépe ještě klasickýho s výbojkou).

Uživatelský avatar
hafca
Příspěvky: 4401
Registrován: 27 črc 2004, 02:00
Bydliště: 25km na západ od Prahy
Kontaktovat uživatele:

#11 Příspěvek od hafca »

Zkusil bych tenhle jednoduchý program. Zapojení pinů tam je a to co od toho tazatel chce by se tam snad dalo dopsat. Fungovat by to mělo na MEGA i Leonardo.

Kód: Vybrat vše

/***************************************************************************
* File Name: as3935_lightning_i2c_nocal.ino
* Processor/Platform: Arduino Uno R3 (tested)
* Development Environment: Arduino 1.6.1
*
* Designed for use with with Playing With Fusion AS3935 Lightning Sensor
* Breakout: SEN-39001-R01. Demo shows how this lightning sensor can be brought 
* into an Arduino project without a bunch of calibration needed. This is
* because each board is tested calibrated prior to being shipped, and the 
* cal value is written on the packaging.
*
*   SEN-39001-R01 (universal applications)
*   ---> http://www.playingwithfusion.com/productview.php?pdid=22
*
* Copyright © 2015 Playing With Fusion, Inc.
* SOFTWARE LICENSE AGREEMENT: This code is released under the MIT License.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
* **************************************************************************
* REVISION HISTORY:
* Author		Date		Comments
* J. Steinlage		2015Jul20       I2C release based on SPI example
* 
* Playing With Fusion, Inc. invests time and resources developing open-source
* code. Please support Playing With Fusion and continued open-source 
* development by buying products from Playing With Fusion!
*
* **************************************************************************
* APPLICATION SPECIFIC NOTES (READ THIS!!!):
* - This file configures then runs a program on an Arduino to interface with
*   an AS3935 Franklin Lightning Sensor manufactured by AMS.
*    - Configure Arduino
*    - Perform setup for AS3935 chip
*      --- capacitance registers for tuning (based on cal value provided)
*      --- configurations for your application specifics (indoor/outdoor, etc)
*    - read status/info from sensor
*    - Write formatted information to serial port
* - Set configs for your specific needs using the #defines for wiring, and
*   review the setup() function for other settings (indoor/outdoor, for example)
* - I2C specific note: This example uses the I2C interface via the I2C lib, not
*   the 'Wire' lib included with the Arduino IDE.
* 
* Circuit:
*    Arduino Uno   Arduino Mega  -->  SEN-39001: AS3935 Breakout
*    SDA:    SDA        SDA      -->  MOSI/SDA   (SDA is labeled on the bottom of the Arduino)
*    SCLK:   SCL        SCL      -->  SCK/SCL    (SCL is labeled on the bottom of the Arduino)
*    SI:     pin  9     pin 9    -->  SI (select interface; GND=SPI, VDD=I2C
*    IRQ:    pin  2     pin 2    -->  IRQ
*    GND:    GND        ''       -->  CS (pull CS to ground even though it's not used)
*    GND:    GND        ''       -->  GND
*    5V:     5V         ''       -->  Arduino I/O is at 5V, so power board from 5V. Can use 3.3V with Due, etc
**************************************************************************/
// The AS3935 communicates via SPI or I2C. 
// This example uses the I2C interface via the I2C lib, not Wire lib
#include "I2C.h"
// include Playing With Fusion AXS3935 libraries
#include "PWFusion_AS3935_I2C.h"

// interrupt trigger global var        
volatile int8_t AS3935_ISR_Trig = 0;

// defines for hardware config
#define SI_PIN               9
#define IRQ_PIN              2        // digital pins 2 and 3 are available for interrupt capability
#define AS3935_ADD           0x03     // x03 - standard PWF SEN-39001-R01 config
#define AS3935_CAPACITANCE   72       // <-- SET THIS VALUE TO THE NUMBER LISTED ON YOUR BOARD 

// defines for general chip settings
#define AS3935_INDOORS       0
#define AS3935_OUTDOORS      1
#define AS3935_DIST_DIS      0
#define AS3935_DIST_EN       1

// prototypes
void AS3935_ISR();

PWF_AS3935_I2C  lightning0((uint8_t)IRQ_PIN, (uint8_t)SI_PIN, (uint8_t)AS3935_ADD);

void setup()
{
  
  Serial.begin(115200);
  Serial.println("Playing With Fusion: AS3935 Lightning Sensor, SEN-39001-R01");
  Serial.println("beginning boot procedure....");
  
  // setup for the the I2C library: (enable pullups, set speed to 400kHz)
  I2c.begin();
  I2c.pullup(true);
  I2c.setSpeed(1); 
  delay(2);
  
  lightning0.AS3935_DefInit();   // set registers to default  
  // now update sensor cal for your application and power up chip
  lightning0.AS3935_ManualCal(AS3935_CAPACITANCE, AS3935_OUTDOORS, AS3935_DIST_EN);
                                 // AS3935_ManualCal Parameters:
                                 //   --> capacitance, in pF (marked on package)
                                 //   --> indoors/outdoors (AS3935_INDOORS:0 / AS3935_OUTDOORS:1)
                                 //   --> disturbers (AS3935_DIST_EN:1 / AS3935_DIST_DIS:2)
                                 // function also powers up the chip
                  
  // enable interrupt (hook IRQ pin to Arduino Uno/Mega interrupt input: 0 -> pin 2, 1 -> pin 3 )
  attachInterrupt(0, AS3935_ISR, RISING);
  lightning0.AS3935_PrintAllRegs();
  AS3935_ISR_Trig = 0;           // clear trigger

}

void loop()
{
  // This program only handles an AS3935 lightning sensor. It does nothing until 
  // an interrupt is detected on the IRQ pin.
  while(0 == AS3935_ISR_Trig){}
  delay(5);
  
  // reset interrupt flag
  AS3935_ISR_Trig = 0;
  
  // now get interrupt source
  uint8_t int_src = lightning0.AS3935_GetInterruptSrc();
  if(0 == int_src)
  {
    Serial.println("interrupt source result not expected");
  }
  else if(1 == int_src)
  {
    uint8_t lightning_dist_km = lightning0.AS3935_GetLightningDistKm();
    Serial.print("Lightning detected! Distance to strike: ");
    Serial.print(lightning_dist_km);
    Serial.println(" kilometers");
  }
  else if(2 == int_src)
  {
    Serial.println("Disturber detected");
  }
  else if(3 == int_src)
  {
    Serial.println("Noise level too high");
  }
  lightning0.AS3935_PrintAllRegs(); // for debug...
}

// this is irq handler for AS3935 interrupts, has to return void and take no arguments
// always make code in interrupt handlers fast and short
void AS3935_ISR()
{
  AS3935_ISR_Trig = 1;
}
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.

Uživatelský avatar
jova1
Příspěvky: 1207
Registrován: 20 pro 2007, 01:00
Bydliště: Chýnov - to je kousek od Tábora
Kontaktovat uživatele:

#12 Příspěvek od jova1 »

Mahoney píše: @jova1: Obojí je správně, můžeš si koupit Uno, a nebo jak píše Hafca, můžeš nastavit I2C piny tam kde je ten procák a deska doopravdy mají, jinak to nebude fungovat. Co se týče simulace blesku, lepší by byl blesk od foťáku (nejlépe ještě klasickýho s výbojkou).
Uno až příští týden, na I2C to sice připojím, ale program si opravit nedokážu, takže nic.
hafca píše:Zkusil bych tenhle jednoduchý program. Zapojení pinů tam je a to co od toho tazatel chce by se tam snad dalo dopsat. Fungovat by to mělo na MEGA i Leonardo.
Je to sice možné, ale chce to nějakou knihovnu I2C.h kterou se mi nedaří najít a ty co jsem našel, zase nejdou nahrát. Navíc je to psané pro nějaký jiný obvod, takže taky nic.
Peču na to, zabil jsem s tím půl dne a výsledek 0. :?
Děkuji všem za snahu.

Uživatelský avatar
hafca
Příspěvky: 4401
Registrován: 27 črc 2004, 02:00
Bydliště: 25km na západ od Prahy
Kontaktovat uživatele:

#13 Příspěvek od hafca »

To jsi to vzdal brzy. Co to vlastně máš za modul? Myslel jsem, že máš AS3935.
Knihovnu máš tady.
Přílohy
sen39001_arduino_i2c_r00.zip
(10.59 KiB) Staženo 24 x
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.

Uživatelský avatar
jova1
Příspěvky: 1207
Registrován: 20 pro 2007, 01:00
Bydliště: Chýnov - to je kousek od Tábora
Kontaktovat uživatele:

#14 Příspěvek od jova1 »

Když stahnu tu tvou knihovnu, tak mi to hodí hlášku:
Knihovna s názvem PWFusion_AS3935_I2C již existuje
Když spustím tvůj program, tak mi to hodí hlášku:
I2C.h: No such file or directory
A ty se divíš že tohle vzdávám?:(
Ano je to senzor konkrétně tento: https://www.google.com/shopping/product ... EIQ9pwGCAU
Jediný co má je pin s přerušením, I2C. a napájení.
Tady to chce ještě cosi co neznám: * SI: pin 9 pin 9 --> SI (select interface; GND=SPI, VDD=I2C

Uživatelský avatar
hafca
Příspěvky: 4401
Registrován: 27 črc 2004, 02:00
Bydliště: 25km na západ od Prahy
Kontaktovat uživatele:

#15 Příspěvek od hafca »

OK, knihovna I2C je tady.
Ten můj modul nemá tak málo pinů, ale i tak by to mělo jít.
Přílohy
GY_AS3935.jpg
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.

Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“