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