Arduino a bouřkový senzor, zprovoznění a úprava kódu.
Moderátor: Moderátoři
- 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.
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?
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?
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.
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 ?!!
Proč mi nemůže všechno chodit hned ?!!
- hafca
- Příspěvky: 4401
- Registrován: 27 črc 2004, 02:00
- Bydliště: 25km na západ od Prahy
- Kontaktovat uživatele:
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.
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.
- 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:
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.
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![Sad :(](./images/smilies/icon_sad.gif)
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.
![Very Happy :D](./images/smilies/icon_biggrin.gif)
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
![Sad :(](./images/smilies/icon_sad.gif)
- hafca
- Příspěvky: 4401
- Registrován: 27 črc 2004, 02:00
- Bydliště: 25km na západ od Prahy
- Kontaktovat uživatele:
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.
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.
- 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:
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á![Confused :?](./images/smilies/icon_confused.gif)
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á
![Confused :?](./images/smilies/icon_confused.gif)
Ty myslíš tohle?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.
Kód: Vybrat vše
#if defined(ESP32) || defined(ESP8266)
#define IRQ_PIN 0
#else
#define IRQ_PIN 2
#endif
@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).
- hafca
- Příspěvky: 4401
- Registrován: 27 črc 2004, 02:00
- Bydliště: 25km na západ od Prahy
- Kontaktovat uživatele:
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.
- 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:
Uno až příští týden, na I2C to sice připojím, ale program si opravit nedokážu, takže nic.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).
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.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.
Peču na to, zabil jsem s tím půl dne a výsledek 0.
![Confused :?](./images/smilies/icon_confused.gif)
Děkuji všem za snahu.
- hafca
- Příspěvky: 4401
- Registrován: 27 črc 2004, 02:00
- Bydliště: 25km na západ od Prahy
- Kontaktovat uživatele:
To jsi to vzdal brzy. Co to vlastně máš za modul? Myslel jsem, že máš AS3935.
Knihovnu máš tady.
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.
- 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:
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
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