您的位置:首页 > 其它

文章标题

2017-07-02 00:04 316 查看
树莓派控制水位传感器,最重要的是需要数模转化器。以下是需要器材

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()


根据自己需要,自行修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: