Hallo,
ich möchte für ein Schulprojekt einen Blitzsensor basteln und wollte
fragen, ob mir hier vllt jemand helfen könnte. Ich habe schon ein paar
kleine Elektroprojekte mit Arduino und Raspberry Pi mit Hilfe von
Anleitungen umgesetzt und dachte, hier würde es genauso klappen, weil
ich im Internet viele Anleitungen gefunden habe. Also habe ich so einen
AS3935 Blitzsensor bestellt
https://www.amazon.de/gp/product/B07TSJKWQW
und versucht, eine der Anleitungen zu befolgen
http://cocoontech.com/forums/blog/29/entry-467-how-to-use-a-as3935-lightning-sensor-with-a-raspberry-pi/
So habe ich den Sensor mit dem Pi verkabelt:
VCC -> PIN 1 (3,3V) // ich habe auch schon PIN 2 (5V) probiert, was
keinen Unterschied zu machen scheint
GND -> PIN 6 (GND)
SDA/MOSI -> PIN 3 (GPIO 2)
SCL -> PIN 5 (GPIO 3)
SI -> 3V3 -> PIN 1 (3,3V)
IRQ -> PIN 11 (GPIO 17)
Ich bin auch so weit gekommen, dass mein Pi den Sensor als I2C device
erkennt:
Aber ich bekomme den Democode aus dem RaspberryPi-AS3935 Projekt nicht
zum laufen.
In der Doku vom Projekt habe ich verstanden, dass es unterschiedliche
Arten des Sensors gibt, auf die man den Code anpassen muss und dann noch
an den Raspberry Pi, deshalb habe ich in der demo.py die Zeile
1
sensor = RPi_AS3935(address=0x00, bus=0)
geändert zu
1
sensor = RPi_AS3935(address=0x03, bus=1)
was aber auch nicht funktioniert hat.
In den Issues des Projekts hatte jemand ein ähnliches Problem und kam am
Ende anhand eines kleinen Testprogramms zu dem Ergebnis, dass es ein
Hardwarefehler sein könnte:
https://github.com/pcfens/RaspberryPi-AS3935/issues/1#issuecomment-18845623
Das habe ich mit ähnlichen Ergebnissen nachgestellt, aber ich verstehe
nicht, was da genau passiert und ob es helfen würde, irgendwo einen pull
up resistor zu schalten (ich wüsste auch nicht wo).
Den Code habe ich so modifiziert:
Mein Physiklehrer glaubt nicht, dass es am Sensor liegt, aber es ist ihm
zu aufwändig, sich mit dem Datenblatt des Sensors auseinanderzusetzen.
Aber ich könnte ja mal in einem Forum fragen, ob mir das jemand erklären
kann. Ich könnte mir vorstellen, dass er sich da selbst nicht so gut
auskennt…
Hier gibt es das Datenblatt:
https://www.mouser.com/datasheet/2/588/ams_AS3935_Datasheet_EN_v5-1214568.pdf
Ich habe dann dieses Forum gefunden und nach AS3935 gesucht, aber leider
fehlt mir wohl noch viel Wissen, um die vorhandenen Themen zu verstehen,
z.B. Beitrag "AS3935 SPI merkwürdig"
Also es wäre sehr freundlich, wenn mir jemand helfen könnte die
Ergebnisse von meinem Testprogramm zu verstehen und vielleicht sogar
einen Blick auf das Datenblatt werfen und mir sagen könnte, ob ich
irgendwelchen offensichtlichen Fehler beim Aufbau gemacht habe.
Vielen Dank schonmal
Max
Max P. schrieb:> // ich habe auch schon PIN 2 (5V) probiert, was> keinen Unterschied zu machen scheint
Das ist vielleicht nicht ganz optimal gewesen. Der Sensor kann zwar
theoretisch 5V, aber nur wenn der interne Linearregler verwendet wird.
Im Datenblatt steht dazu:
1
In case the voltage regulator is ON 2.4 5.5 V
2
In case the voltage regulator is OFF 2.4 3.6 V
Wenn ich das Amazon-Bild richtig deute (siehe Anhang) könnte der
Linearregler aktiv sein (Vcc und VREG getrennt angeschlossen). Hast Du
mal einen Schaltplan zu dem Board um zu sehen für was die ganzen Brücken
auf der Rückseite sind?
Problem könnte allerdings sein, dass die Pullup am I2C sich scheinbar
auf VCC beziehen. Das heißt, dein Raspi hat vielleicht 5V gesehen am
I2C. Soweit ich weiß mag der aber nur 3,3V.
Also ich würde das mit 5V eher lassen.
Da es ab und zu zu gehen scheint, kann es allerdings ja nicht so falsch
sein (ohne mir den Code genau angeschaut zu haben).
Hast Du ein Oszi oder einen 3€ Sigrok um dir mal die Signale im
Fehlerfall genau anzuschauen?
Ein Schaltplan wie du das verschaltet hast wäre auch noch gut.
Die Default-Konfiguration bei I2C UND VREG sieht wie im Anhang aus.
Hast Du I2CL, I2CD, CS, MISO und SI genau so verschaltet?
MISO und CS hast Du oben nicht erwähnt.
Was mich auch etwas irritiert ist dass im Default I2C der I2CD NICHT mit
einem Pullup nach VDD gepullt wird.
Hallo mani,
Vielen Dank für deine Antwort!
Wie erkennt man denn, dass VREG getrennt angeschlossen ist? Ich habe den
VREG auf Pin 6 vom Controller gefunden, aber mir ist nicht klar, woran
ich sehe, dass der Linearregler verwendet wird und auch nicht warum man
deshalb dann 5V benutzen kann und ob das sinnvoll wäre.
Aber wenn 3,3V funktionieren sollten, dann wäre ich schon sehr glücklich
überhaupt sinnvolle Werte auslesen zu können. Also bleibe ich einfach
bei 3,3V und hoffe, dass ich mit meinem 5V Versuch noch keinen Schaden
angerichtet habe.
Ich habe ein ganz billigen Bausatz Oszi
(https://jyetech.com/dso-150-shell-oscilloscope/), aber vielleicht
reicht das ja trotzdem für diesen Zweck:
1
Number of Channel: 1
2
Analog Bandwidth: 0 - 200KHz
3
Sensitivity: 5mV/Div - 20V/Div
4
Sensitivity error: < 5%
5
Resolution: 12-bit
6
Input Impedance: 1M ohm
7
Maximum Input voltage: 50Vpk
8
Coupling: DC, AC, GND
9
Max Real-time Sampling Rate: 1Msps
10
Timebase: 10us/Div - 500s/Div
11
Record Length: 1024
Die in der Schule sind wohl leider beide kaputt. Ich weiß aber auch
überhaupt nicht, wo ich was ich messen sollte, um hilfreiche Signale zu
finden.
Ein Sigrok habe ich nicht, kannte ich auch noch nicht. Wenn es mir
hierbei helfen kann und nur 3 EUR kostet, lege ich mir sowas aber gerne
zu.
Ich habe auch versucht ein Foto von meiner Schaltung zu machen, aber da
erkennt man leider kaum was, deshalb habe ich es versucht
aufzuschreiben. MISO und CS habe ich nicht erwähnt , weil ich die nicht
belegt habe. Müssen die auf GND gelegt werden (so verstehe ich das von
Ihnen angehängte Schaltbild aus dem Datenblatt)? Könnte das mein Fehler
sein?
Oder macht es Sinn mal zu versuchen, den I2CD / MOSI mit
einem Pullup nach VDD zu verbinden? Und wenn ja, bedeutet das den MOSI
Kontakt über einen Widerstand mit 3,3V zu verbinden?
Vielen Dank für die Unterstützung!
Max
Max P. schrieb:> while True:> try:> as3935_data = i2cbus.read_i2c_block_data(0x03, 0x01)> print "i2cbus.read_i2c_block_data(0x03, 0x01) success.."> print as3935_data[0x03]> except:> print "i2cbus.read_i2c_block_data(0x03, 0x01) fail.."> time.sleep(1)> continue> break
Diese exception handler machen alles nur schwieriger. Versuch einfach
mal
ohne den ganzen Kram außen rum.
Ich kenne Deine "read_i2c_block_data" Funktion nicht. diejenigen, die
ich mit google gefunden habe wollen einen weiteren Parameter - nämlich
wie groß der zu lesende Block ist.
Ich habe genau den hier in Betrieb. Allerdings an einem SAMD21 mit einer
der fertigen Arduino-Libraries. Das lief nach 5 Minuten. Vielleicht
kannst Du ja im Code einer solchen Library nachsehen, wie man den
korrekt anspricht und das dann auf Python portieren?
Gehe dazu in eine Bibliothek, suche das Buch
Titel: Raspberry Pi,
Autoren: Kofler Kühnast, Scherbeck,
ISBN 978-3-8362-4220-2, 3. Auflage 2016, Kapitel 37 Gewitter erkennen
mit dem Blitzsensor, Seite 977 bis 984.
Max P. schrieb:> Wie erkennt man denn, dass VREG getrennt angeschlossen ist?
Anhand der Platine / wie der Chip beschalten ist. Oder falls du einen
Schaltplan zu der Platine bekommen hast...
Max P. schrieb:> und auch nicht warum man deshalb dann 5V benutzen kann und ob das> sinnvoll wäre
Wenn man einen 5V uC hat, macht das schon Sinn. Sonst eher nicht. Lass
es am besten Mal bei 3,3V.
Max P. schrieb:> Ein Sigrok habe ich nicht, kannte ich auch noch nicht. Wenn es mir> hierbei helfen kann und nur 3 EUR kostet, lege ich mir sowas aber gerne> zu.
Nicht so wichtig. War nur eine Überlegung da man dann den
"schlecht"-Fall Mal hätte aufzeichnen können. Aber die 3€ sind gut
investiert, dauert dann aber meist 4 Wochen bis es da ist.
Max P. schrieb:> MISO und CS habe ich nicht erwähnt , weil ich die nicht belegt habe.> Müssen die auf GND gelegt werden (so verstehe ich das von Ihnen> angehängte Schaltbild aus dem Datenblatt)? Könnte das mein Fehler sein?
Wahrscheinlich hat es einen Grund warum die Pins bei I2C mit GND belegt
sind. Vielleicht fängt sich der Chip über die offenen Pins ab und zu
eine Flanke ein die dann dazu führen dass es ab uns zu geht... Und ab
und zu halt nicht.
Also ich würde als erstes Mal die Hardware ordentlich beschalten.
Also I2CL, I2CD, CS, MISO und SI genau so verschalten im im DB!
Hallo, die Software läuft jetzt!
Vielen Dank für all die guten Vorschläge! Ich wollte alle Ratschläge
befolgen und habe mit dem angefangen, MISO und CS mit GND zu verkabeln -
so wie es aus dem Datenblatt hervorgeht. Den Rest habe ich so gelassen
(VCC = 3,3V). Dann lief die Software sofort.
Tut mir Leid, dass ich das nicht selbst gemerkt habe. Bisher hat mich
immer die Menge an Infos in den Datenblättern abgeschreckt, aber nun
weiß ich schonmal, wie man den Teil zum verschalten findet und versteht!
Das wird mir bestimmt auch bei zukünftigen Projekten sehr helfen!
Nun habe ich den Demo Code
https://github.com/pcfens/RaspberryPi-AS3935/blob/master/demo.py
ausgeführt und die Ausgabe
sensor.calibrate(tun_cap=0x0D) * changed to my capacitor value of 104
geändert habe. Nun bekomme ich
1
Waiting for lightning - or at least something that looks like it
angezeigt und warte auf das nächste Gewitter.
Bis dahin versuche ich die Antenne zu kalibrieren, habe aber auch dabei
Schwierigkeiten.
Im Datenblatt steht
1
Antenna Tuning
2
The AS3935 uses a loop antenna based on a parallel LC resonator. The antenna has to be designed to have its resonance frequency at 500kHz and a quality factor of around 15. By setting the register REG0x08[7] = 1 the antenna's resonance frequency is displayed on the IRQ pin as a digital signal. The external unit can measure this frequency and tune the antenna adding or removing the internal capacitors with the register REG0x08[3:0]. It is necessary to tune the antenna with an accuracy of ±3.5% to optimize the performance of the signal validation and distance estimation. The resonance frequency is internally divided by a factor, which is programmable with the register REG0x03[7:6].
3
4
Figure 45 shows the division ratio.
5
Division Ratio REG0x03[7] REG0x03[6]
6
16 0 0
7
32 0 1
8
64 1 0
9
128 1 1
Und
1
Address Register Name Bit Type Default Value Description
2
0x08 TUN_CAP [3:0] R/W 0000 Internal Tuning Capacitors (from 0 to 120pF in steps of 8pF)
Kann man aus diesen Infos irgendwie erkennen, wie man die Antenne
kalibrieren kann? Wie kommt man darauf, "sensor.calibrate(tun_cap=0x0F)"
auf "sensor.calibrate(tun_cap=0x0D)" zu ändern und woher weiß man,
welchen capacitor value man eintragen muss?
Viele Grüße
Max
Max P. schrieb:> Kann man aus diesen Infos irgendwie erkennen, wie man die Antenne> kalibrieren kann?
Ja. Der Schwingkreis muss mit 500000 Hz +- 3.5 % Abweichung schwingen.
Die aktuelle Frequenz kannst Du über den IRQ PIN auslesen und falls es
mehr als 3.5% Abweichung sind, die Kondensatoren an bzw. abschalten um
die Frequenz so zu verändern, dass es passt. In den einschlägigen
Libraries kann man sehen, wie das geht. Steht aber auch im Datenblatt,
was man in welches Register schreiben muss, um die Kondensatoren zu
schalten.