树莓派控制水位传感器,最重要的是需要数模转化器。以下是需要器材
1:树莓派
2:水位传感器(某网站有很多种,这里使用的是水位溢出模块)
3:数模转化器
4:面包板
5:公对母、公对公若干
接线图如下,具体根据自己的Pi来实际接线
根据自己的额需要增加树莓派的功能,连接引脚时,注意每个传感器的正负极。
实验代码如下:
import RPi.GPIO as GPIO
import time
SPICLK = 11
SPIMISO = 9
SPIMOSI = 10
SPICS = 8
photo_ch = 0
#port init
def init():
GPIO.setwarnings(False)
GPIO.cleanup() #clean up at the end of your script
GPIO.setmode(GPIO.BCM) #to specify whilch pin numbering system
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
if ((adcnum > 7) or (adcnum < 0)):
return -1
GPIO.output(cspin, True)
GPIO.output(clockpin, False)
GPIO.output(cspin, False)
commandout = adcnum
commandout |= 0x18 # start bit + single-ended bit
commandout <<= 3 # we only need to send 5 bits here
for i in range(5):
if (commandout & 0x80):
GPIO.output(mosipin, True)
else:
GPIO.output(mosipin, False)
commandout <<= 1
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout = 0
for i in range(12):
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout <<= 1
if (GPIO.input(misopin)):
adcout |= 0x1
GPIO.output(cspin, True)
adcout >>= 1 # first bit is 'null' so drop it
return adcout
def main():
init()
time.sleep(2)
print"will start detec water level\n"
while True:
adc_value=readadc(photo_ch, SPICLK, SPIMOSI, SPIMISO, SPICS)
if adc_value == 0:
print"no water\n"
elif adc_value>0 and adc_value<30 :
print"it is raindrop\n"
elif adc_value>=30 and adc_value<200 :
print"it is water flow"
print"water level:"+str("%.1f"%(adc_value/200.*100))+"%\n"
#print "adc_value= " +str(adc_value)+"\n"
time.sleep(1)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
pass
GPIO.cleanup()
根据自己需要,自行修改。