文章标题

来源:互联网 发布:淘宝申请退款时间5天 编辑:程序博客网 时间:2024/06/10 06:08

树莓派控制水位传感器,最重要的是需要数模转化器。以下是需要器材
1:树莓派
2:水位传感器(某网站有很多种,这里使用的是水位溢出模块)
3:数模转化器
4:面包板
5:公对母、公对公若干
接线图如下,具体根据自己的Pi来实际接线
这里写图片描述

根据自己的额需要增加树莓派的功能,连接引脚时,注意每个传感器的正负极。

实验代码如下:

import RPi.GPIO as GPIOimport timeSPICLK = 11SPIMISO = 9SPIMOSI = 10SPICS = 8photo_ch = 0#port initdef 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 adcoutdef 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:                  passGPIO.cleanup()

根据自己需要,自行修改。