Raspberry Pi(13)で遊ぶ-雨滴検出センサー

Raspberry Pi(13)で遊ぶ-雨滴検出センサー

    このシリーズの以前のブログ投稿では、温度センサーと光強度センサーを実験しました。これらのセンサーと簡単なプログラミング手法を組み合わせることで、これらの環境データを簡単に取得できます。さまざまな豊富なセンサーを使用して、RaspberryPiを使用して「シンプルな気象ステーション」を簡単に構築できます。小さな気象観測所の場合、温度と光の強度のデータを収集することに加えて、現在の気象条件も不可欠です。このブログでは、雨滴検知センサー実験を利用して雨量情報を取得します。

1.雨滴検知センサー

    この実験で使用した雨滴検出センサーモジュールを次の図に示します。

このコンポーネントグループは、検出ボードと制御モジュールで構成されており、2つの部分が別々に接続されているため、検出ボードを適切な検出位置に配置するのに便利であり、検出ボードは面積が大きく、雨滴の検出が簡単です。

このセンサーモジュールの動作回路図は次のとおりです。

使用する場合は、まず検出板の2本のピンを2本のピンだけでモジュール側面のピンに接続します(検出板は交差したくない2本のワイヤーとして理解でき、雨が降るとワイヤーが接続されます落ちる)。

    制御モジュールを見ると、2つのLEDがカプセル化されていることがわかります。1つは電源がオンになると点灯する電源インジケータで、もう1つは信号灯です。雨が降ると信号灯が点灯せず、信号灯が点灯しているときは検出板に雨が降っています。雨が降っているかどうかを検知する場合は、検知板を斜めに配置し、雨水が流れたときにレベル信号の出力を変更することができます。制御モジュールには、センサーの感度を設定するために調整できる調整抵抗も付属しています。制御モジュールの反対側には、AO、DO、GND、およびVCCの4つのピンがあります。なかでもAOはアナログ信号出力であり、このピンから出力される信号で降雨量を判断することができます。DOピンはデジタル信号出力です。このピンが出力する信号は、検出板に雨が降っているかどうかを判断するために使用できます。水滴がない場合は高レベルを出力し、水滴がある場合は高レベルを出力します。このピンはローレベルを出力します。

2.実験的な接続とコーディング

    この実験では、GPIOピンを使用して雨滴検出モジュールのデジタル信号を直接取得し、PCF8591を介して雨滴検出モジュールのアナログ信号を読み取ります。まず、配線は次のとおりです。

PCF8591をRaspberryPiに接続します。

PCF8591 ラズベリーパイ
SDA SDA
SCL SCL
VCC 5V電源
GND GND

雨滴検出モジュール:

雨滴検出モジュール ラズベリーパイ PCF8591
VCC 5V  
GND GND  
  AIN0
行う GPIO17(BCMコード)  

基本的な配線が完了したら、コーディングを開始できます。PCF8591の使用については、前回のブログで詳しく紹介していますが、毎回デジタルからアナログへの変換を行うと、PCF8591の制御コードを書くのが大変で、やりたいファンクションポイントではありません。この実験では、DA変換関連のロジックではなく、雨滴検出モジュールのデータを処理する方法に焦点を当てる必要があります。これにより、一般的なPCF8591ドライバーコードのセットを記述し、次のコンポーネントを使用できます。アナログ信号出力。、このドライバを直接使用できます。

    PCF8591を使用するには、Raspberry PiのI2Cインターフェイスを開くことを忘れないでください。配線が完了したら、次のコマンドを使用してデバイスアドレスを表示します。

sudo i2cdetect -y 1

完全なコードは次のとおりです。

#coding:utf-8
import smbus   #在程序中导入“smbus”模块
# /dev/i2c-1
bus = smbus.SMBus(1)  #创建一个smbus实例

# 初始化驱动模块 定义PCF元件地址
def init(addr):
	global address
	address = addr

# 读取某个通道的数据
def read(chn):
	global address
	if chn == 0:
		#发送一个控制字节到设备 表示要读取AIN0通道的数据
		bus.write_byte(address,0x40)   
	if chn == 1:
		#发送一个控制字节到设备 表示要读取AIN1通道的数据
		bus.write_byte(address,0x41)
	if chn == 2:
		#发送一个控制字节到设备 表示要读取AIN2通道的数据
		bus.write_byte(address,0x42)
	if chn == 3:
		#发送一个控制字节到设备 表示要读取AIN3通道的数据
		bus.write_byte(address,0x43)
	bus.read_byte(address)         # 空读一次,消费掉无效数据
	return bus.read_byte(address)  # 返回某通道输入的模拟值A/D转换后的数字值

def write(val):
	global address
	temp = val
	temp = int(temp) 
	# 进行写数据操作
	bus.write_byte_data(address, 0x40, temp) 

水滴検出を実装するためのコードは次のとおりです。

#coding:utf-8
import pcf8591 as PCF
import RPi.GPIO as GPIO
import time

DO = 11
# 设置使用的引脚编码模式
GPIO.setmode(GPIO.BOARD)
GPIO.setup(DO, GPIO.IN)
PCF.init(0x48)
while True:
	print('------------分割线-------------')
	rainDO = GPIO.input(DO)
	print('是否检测到水滴:%s'%('否' if rainDO else '是'))
	# 读取AIN0的模拟数据
	rainAO = PCF.read(0) 
	print('雨水程度%d'%(255 - rainAO))
	time.sleep(2)

Raspberry Piで上記のプログラムを実行して、水滴を検出します。

テクノロジーに焦点を合わせ、愛を理解し、喜んで共有し、友達になりましょう

QQ:316045346

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/2340880/blog/5251077