Goedemidddag,
Vanmiddag deze NPN sensor binnen gekregen met als doel deze als watermeter in te gaan zetten.
Nu heb ik heb aangesloten en geprobeerd op verschillende materialen (radiator, schroevendraaier) en natuurlijk op de watermeter. De LED gaat netjes branden op het moment dat hij een metalen object waarneemt.
Maar, met geen mogelijkheid krijg ik de waarde binnen op de Raspberry Pi.
Het betreft een Raspberry Pi 3B+ en de sensor is als volgt aangesloten:
Bruin = Pin 2 of 4 (5V)
Blauw = Pin 6 (GND)
Zwart = Pin 40 (Data)
Na
Als ik 'kortsluiting' maak op de blauwe en zwarte draad dan verschijnt er opeens wel een +1 waarde in beeld.
Eerste keer krijg ik onderstaande melding, maar ik zou niet weten wat er nog meer op die pin zit (nooit wat op gehad) en ook andere pinnen geven het zelfde resultaat.
Script (water_meter.py)
gpis readall
Ik kom tot 2 uitkomsten: sensor kapot of bedrading zit toch verkeerd?
Vanmiddag deze NPN sensor binnen gekregen met als doel deze als watermeter in te gaan zetten.
Nu heb ik heb aangesloten en geprobeerd op verschillende materialen (radiator, schroevendraaier) en natuurlijk op de watermeter. De LED gaat netjes branden op het moment dat hij een metalen object waarneemt.
Maar, met geen mogelijkheid krijg ik de waarde binnen op de Raspberry Pi.
Het betreft een Raspberry Pi 3B+ en de sensor is als volgt aangesloten:
Bruin = Pin 2 of 4 (5V)
Blauw = Pin 6 (GND)
Zwart = Pin 40 (Data)
Na
code:
Zie ik wel dat het tekst bestand netjes word aangemaakt met de standaard waarde. Verder gebeurt er helemaal niets.1
| python water_meter.py |
Als ik 'kortsluiting' maak op de blauwe en zwarte draad dan verschijnt er opeens wel een +1 waarde in beeld.
Eerste keer krijg ik onderstaande melding, maar ik zou niet weten wat er nog meer op die pin zit (nooit wat op gehad) en ook andere pinnen geven het zelfde resultaat.
code:
1
2
| water_meter.py:34: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings. GPIO.setup(40, GPIO.IN, pull_up_down = GPIO.PUD_UP) |
Script (water_meter.py)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| #!/usr/bin/python import RPi.GPIO as GPIO import time import urllib2 import os #Watermeter stand (wordt alleen initeel gebruikt als er geen bestand meterstand.txt is) global Counter Counter = 1154651 #Domoticz URL domoticz_url = "http://192.168.2.1:8080" #Domoticz IDX van de water sensor (RFXMeter) idx = 73 #Open meterstand.txt file en lees meterstand #Als meterstand.txt niet aanwezig is maakt script bestand aan en vult de meterstand fn = "/home/pi/domoticz/scripts/meterstand.txt" if os.path.exists(fn): f = file(fn, "r+") f = open(fn) inhoud = f.readline() a,b,c = inhoud.split() Counter = int(c) else: f = open(fn, "w") f.write( 'meterstand = ' + repr(Counter)) f.close() #Board is pin nr, BMC is GPIO nr #Read output from water meter op pin 40 GPIO.setmode(GPIO.BOARD) # Set GPIO 21 (Pin 40) als Input aditioneel als Pullup-Weerstand aktiveren GPIO.setup(40, GPIO.IN, pull_up_down = GPIO.PUD_UP) #Functie callback #Dit is de functie die aangeroepen wordt in de interrupt def Interrupt(channel): #Teller elke interupt uitlezen en met 1 liter verhogen f = file(fn, "r+") f = open(fn) inhoud = f.readline() a,b,c = inhoud.split() Counter = int(c) Counter = Counter + 1 f.close() #Schrijf meterstand naar bestand f = open( fn, 'w') f.write( 'meterstand = ' + repr(Counter)) f.close() #Send counter to domoticz JSON url1 = domoticz_url+'/json.htm?type=command¶m=udevice&idx='+str(idx)+'&svalue='+str(Counter) req1 = urllib2.Request(url1) response1 = urllib2.urlopen(req1) #Voor debug => print voorbeeld van de JSON aanroep en/of de counter #print "JSON call = "+ str(url1) #print "Watermeter Counter = " + str(Counter) #Interrupt-Event toevoegen, bij een NPN off geeft sensor een 1 en en bij detectie een 0 #Bij detectie (LED on) een 0 daarom check dalende interrupt. GPIO.add_event_detect(40, GPIO.FALLING, callback = Interrupt, bouncetime = 350) try: while True: time.sleep(1) except KeyboardInterrupt: GPIO.cleanup() print "\nBye" |
gpis readall
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| +-----+-----+---------+------+---+---Pi 3+--+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | | | 3.3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | IN | 0 | 7 || 8 | 0 | IN | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 | | | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 1 | IN | GPIO.29 | 29 | 21 | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+---Pi 3+--+---+------+---------+-----+-----+ |
Ik kom tot 2 uitkomsten: sensor kapot of bedrading zit toch verkeerd?
Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!