Hello again,
During the past few days I have been trying to write code so to use a
Maplin Anemometer, which uses a magentic switch to send pulses as it
rotates.
Which is connected to my GrovePi.
I have been trying to adapt ppm_counter.py that was posted earlier in this
group. The code uses GPIO.inputs, and the Grovepi uses
grovepi.digitalRead(2) to read the sensor.
I have been trying to adapt the code so it will work with my GrovePi D2
input, and so far I have not been able to get a wind speed reading.
I have included both ppm_counter.py, and my attempt, in the hope someone
make some suggestions
Michael
--
You received this message because you are subscribed to the Google Groups
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.
#!/usr/bin/python
# ppm_counter.py
#
# This was written to use the Raspberry Pi as a weather station. Using
# Argent Data systems wind instruments, we connect on one of the Pi's
# GPIO inputs and then loop for a set time (sample) and watch the GPIO
# pin for pulses (counter). We then take the number of pulses and average them,
# then we multiply them by the speed correction factor (cfactor) to find
# the speed in MPH.
#
# This is a 5 second average as originally written. This could be then
# Put into an array and then a 2 minute average could be calculated for
# display as a sustained speed, and the highest reading in a 5 minute set
# could be used as a gust, with a high speed greater than 10 knots above the
# lowest lull in a 10 minute period as the Peak Wind.
#
# Copyright 2013 cmcdonald <[email protected]>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
#
from time import sleep
import time
import RPi.GPIO as GPIO
DEBUG = 0
counter = 0
finishtime = 0
# This is the correction factor for the Argent Data anemeometor
# one RPS = 1.492 MPH of wind. RPS not RPM
# if using another instrument, change cfactore to manufactures setting
cfactor = 1.492
sample = 5
speed = 0
pinin = 17 # This is the GPIO pin we will listen on
state = False
# Setup which GPIO Pin as pin to watch for counter
GPIO.setmode(GPIO.BCM)
GPIO.setup(pinin, GPIO.IN)
def ppm_counter():
# Loop through for a few seconds (sample) and watch for
# pulses. (sample) is the time in seconds, then average it by
# (sample) for an average of pulses per second, then multiply by
# correction factor (cfactor) for speed in MPH
counter = 0
# finishtime is right now (clock time) + 5 real seconds, not
# CPU seconds
finishtime = (int(time.time()) + sample)
#We are going to assume the switch is open, so state = false
state = False
while (int(time.time()) < finishtime):
if DEBUG > 0:
print (int(time.time()))
# Check to see if the pin goes Low (switch closed)
if ( GPIO.input(pinin) == True ):
# State was false, now set that the switch closed and
# watch for it to open
state = True
# We see that the switch closed, now wait until it opens
if ((state == True) and (GPIO.input(pinin) == False)):
# Reset State to open
state = False
# Increment the counter
counter = counter + 1
if DEBUG > 0:
print counter
# counter is the total number of pulses during the sample time
# We need to then calculate the speed at pps*cfactor=speed in MPH
speed = ((counter / sample) * cfactor)
if DEBUG > 0:
print speed
return (speed)
def main():
while True:
speed = ppm_counter()
print speed
return 0
if __name__ == '__main__':
main()
#! /usr/bin/env python
# $Revision: 1 $
# $Edited: WhimickRH $
# $Date: 2016-08-01 $
# $Anemometer & Wind Direction
import grovepi
import RPi.GPIO as GPIO
from grovepi import *
import math
import time
from time import sleep
from time import strftime, localtime
# ------------------Global variables----------------------
DEBUG = 0
counter = 0
finishtime = 0
# This is the correction factor for the Argent Data anemeometor
# one RPS = 1.492 MPH of wind. RPS not RPM
# if using another instrument, change cfactore to manufactures setting
cfactor = 1.492
sample = 5
speed = 0
pulse = 0
state = 0
wind_speed = 0
winddir = 0
# ------------------CONFIGURATION--------------------------
rev = GPIO.RPI_REVISION
if rev == 2 or rev == 3:
bus = smbus.SMBus(1)
else:
bus = smbus.SMBus(0)
# Connect the Maplin Anemometer to digital port D3
# SIG,NC,VCC,GND
grovepi.pinMode(2,"INPUT")
led = 4
digitalWrite(led, 0)
# ------------------ANEMOMETER SENSOR-------------------------
def ppm_counter():
global pulse, state, speed, counter, finishtime
# Loop through for a few seconds (sample) and watch for
# pulses. (sample) is the time in seconds, then average it by
# (sample) for an average of pulses per second, then multiply by
# correction factor (cfactor) for speed in MPH
counter = 0
# finishtime is right now (clock time) + 5 real seconds, not
# CPU seconds
finishtime = (int(time.time()) + sample)
# We are going to assume the switch is open, so pulse = 0
state = 0
while (int(time.time()) < finishtime):
if DEBUG > 1:
print (int(time.time()))
# Check to see if the pin goes Low (switch closed)
pulse = grovepi.digitalRead(2)
if pulse == 1:
# pulse was 0, now set that the switch closed and
# watch for it to open
digitalWrite(led, 1)
print 'led on'
state = 1
# We see that the switch closed, now wait until it opens
pulse = grovepi.digitalRead(2)
if (state == 1) and (pulse == 0):
# Reset pulse to open
digitalWrite(led, 0)
state = 0
# Increment the counter
counter = counter + 1
print 'led off'
if DEBUG == 0:
print counter
# counter is the total number of pulses during the sample time
# We need to then calculate the speed at pps*cfactor=speed in MPH
speed = ((counter / sample) * cfactor)
if DEBUG == 0:
print speed
return()
def get_speed():
while True:
speed = ppm_counter()
print speed
return()
# -------------------Main Program----------------------
while True:
try:
# turn led status light on.
# digitalWrite(led, 1)
# Get time
start_time = time.time()
datetime = strftime("%Y-%m-%d %H:%M:00", localtime())
# Get Wind Speed
# w_pulse = get_w_pulse()
# Get wind speed and three second peak. (WMO standard)
windSpeed = get_speed()
print windSpeed
if windSpeed == 0: # Wind speed is zero
pass
#winddir = winddir # set to None to have 0 dir
# Get End Times and calculate program pause to next collection
end_time = time.time()
proc_time = round(end_time - start_time, 4)
if (proc_time > 1) or (math.ceil(end_time) > math.ceil(start_time)):
sleep_time = 0
else:
sleep_time = math.ceil(end_time) - end_time
except IOError as e:
# digitalWrite(led, 0)
sleep(1.0)
continue
else:
pass