不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

CrowPiレッスン6:光センサーを使用して、弱い光または明るい光を検出する

2020-11-07 14:38:00 | CrowPi

Detect low or bright light using the Light sensor.

レッスン6"光センサーを使用して、弱い光または明るい光を検出する"をやっていく。

What will you learn

このレッスンを終了すると、次のことができるようになります。
  • 光センサーを使用して、弱い光と明るい光を検出する方法を学習します

What will you need

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • いいえ

CrowPi上での光センサーの位置



↑ここの上を手で覆うと表示される値が小さくなる

光センサーの操作

このレッスンで使用するPythonスクリプトは以下の通り。

Examples/light_sensor.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author: Matt Hawkins
# Author's Git: https://bitbucket.org/MattHawkinsUK/
# Author's website: https://www.raspberrypi-spy.co.uk
# http://elecrow.com/

import RPi.GPIO as GPIO
import smbus
import time

# Find the right revision for bus driver
if(GPIO.RPI_REVISION == 1):
 bus = smbus.SMBus(0)
else:
 bus = smbus.SMBus(1)

class LightSensor():

 def __init__(self):

  # Define some constants from the datasheet

  self.DEVICE = 0x5c # Default device I2C address

  self.POWER_DOWN = 0x00 # No active state
  self.POWER_ON = 0x01 # Power on
  self.RESET = 0x07 # Reset data register value

  # Start measurement at 4lx resolution. Time typically 16ms.
  self.CONTINUOUS_LOW_RES_MODE = 0x13
  # Start measurement at 1lx resolution. Time typically 120ms
  self.CONTINUOUS_HIGH_RES_MODE_1 = 0x10
  # Start measurement at 0.5lx resolution. Time typically 120ms
  self.CONTINUOUS_HIGH_RES_MODE_2 = 0x11
  # Start measurement at 1lx resolution. Time typically 120ms
  # Device is automatically set to Power Down after measurement.
  self.ONE_TIME_HIGH_RES_MODE_1 = 0x20
  # Start measurement at 0.5lx resolution. Time typically 120ms
  # Device is automatically set to Power Down after measurement.
  self.ONE_TIME_HIGH_RES_MODE_2 = 0x21
  # Start measurement at 1lx resolution. Time typically 120ms
  # Device is automatically set to Power Down after measurement.
  self.ONE_TIME_LOW_RES_MODE = 0x23

 def convertToNumber(self, data):

  # Simple function to convert 2 bytes of data
  # into a decimal number
  return ((data[1] + (256 * data[0])) / 1.2)

 def readLight(self):

  data =  bus.read_i2c_block_data(self.DEVICE,self.ONE_TIME_HIGH_RES_MODE_1)
  return self.convertToNumber(data)

def main():

 sensor = LightSensor()
 try:
  while True:
   print("Light Level : " + str(sensor.readLight()) + " lx")
   time.sleep(0.5)
 except KeyboardInterrupt:
  pass

if __name__ == "__main__":
 main()

光センサーは、I2Cを使うため、通常のGPIOを使用しない。

このスクリプトを実行すると、環境の明るさを検出して、照度を表す数値(lx)がターミナルに表示される。


無限ループとなるので、終了するには、CTRL+C。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CrowPiレッスン5:サウンドセンサーを使用して音を検出する

2020-11-06 23:25:29 | CrowPi

Detect sound using the sound sensor.

レッスン5"サウンドセンサーを使用して音を検出する"をやっていく。

What will you learn

このレッスンを終了すると、次のことができるようになります。
  • サウンドセンサーモジュールを使用して音を検出する方法を学習します

What will you need

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • いいえ

CrowPiのサウンドセンサーの位置


↑音の検出の閾値を調整するため、青の四角いとこのネジを回して、サウンドセンサーの感度を調整する必要がある。
  • 左に回すと閾値が低くなり、音を検出しやすくなる。
  • 右に回すと閾値が高くなり、音を検出しにくくなる。

サウンドセンサーからの入力の取得

このレッスンで使用するPythonスクリプトは以下の通り。

Examples/sound.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# http://elecrow.com/

import RPi.GPIO as GPIO
import time

# define sound pin
sound_pin = 24
# set GPIO mode to GPIO.BOARD
GPIO.setmode(GPIO.BCM)
# setup pin as INPUT
GPIO.setup(sound_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

try:
 while True:
  # check if sound detected or not
  if(GPIO.input(sound_pin)==GPIO.LOW):
   print('Sound Detected')
   time.sleep(0.1)
except KeyboardInterrupt:
 # CTRL+C detected, cleaning and quitting the script
 GPIO.cleanup()

例のごとく、GPIO.setmodeとpin番号を修正。

修正後
# define sound pin
sound_pin = 18
# set GPIO mode to GPIO.BOARD
GPIO.setmode(GPIO.BOARD)

このスクリプトを実行すると、センサーの近くで音を鳴らすとターミナルに“Sound Detected”と表示される。


無限ループとなるので、終了するには、CTRL+C。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CrowPiレッスン4:バイブレーションセンサーを使用してバイブレーションを送信する

2020-11-06 17:10:51 | CrowPi

Send vibration using the vibration sensor

レッスン4"バイブレーションセンサーを使用してバイブレーションを送信する"をやっていく。


↑vibration sensorが振動する。右スイッチ1をオンにするのを忘れずに。

What will you learn

このレッスンを終了すると、次のことができるようになります。
  • 振動センサーの制御と振動信号の送信方法

What will you need

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • はい、右のスイッチ、ピン番号1-スイッチを入れてオンになっていることを確認します(センサーの切り替え方法を忘れた場合は、5ページを参照してください)


このレッスンで使用するPythonスクリプトは以下の通り。

Examples/vibration.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# http://elecrow.com/

import RPi.GPIO as GPIO
import time

# define vibration pin
vibration_pin = 27

# Set board mode to GPIO.BOARD
GPIO.setmode(GPIO.BCM)

# Setup vibration pin to OUTPUT
GPIO.setup(vibration_pin, GPIO.OUT)

# turn on vibration
GPIO.output(vibration_pin, GPIO.HIGH)
# wait half a second
time.sleep(0.5)
# turn off vibration
GPIO.output(vibration_pin, GPIO.LOW)
# cleaup GPIO
GPIO.cleanup()

例のごとく、GPIO.setmodeとpin番号を修正。

修正後
# define vibration pin
vibration_pin = 13

# set board mode to GPIO.BOARD
GPIO.setmode(GPIO.BOARD)

このスクリプトを実行すると、vibration sensorが振動する。
※ 右側のスイッチのNo.1をオンにしておくことに注意。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CrowPiレッスン3:リレーのしくみとその制御方法

2020-11-06 16:05:43 | CrowPi

How Relay works and how to control it.

レッスン3"リレーのしくみとその制御方法"をやっていく。


↑スクリプトを実行するとここがカチャカチャ鳴る。
本来はここに何かしらの回路を接続してオンオフできる。

What will you learn

このレッスンを終了すると、次のことができるようになります。
  • リレーの制御方法-GPIO信号を使用してリレーを開閉します

What will you need

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • いいえ


このレッスンで使用するPythonスクリプトは以下の通り。

Examples/relay.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# http://elecrow.com/

import RPi.GPIO as GPIO
import time

# define relay pin
relay_pin = 21

# set GPIO mode as GPIO.BOARD
GPIO.setmode(GPIO.BCM)
# setup relay pin as OUTPUT
GPIO.setup(relay_pin, GPIO.OUT)

# Open Relay
GPIO.output(relay_pin, GPIO.LOW)
# Wait half a second
time.sleep(0.5)
# Close Relay
GPIO.output(relay_pin, GPIO.HIGH)
# Wait half a second
time.sleep(0.5)
# Close Relay
GPIO.output(relay_pin, GPIO.LOW)
GPIO.cleanup()

例のごとく、GPIO.setmodeとpin番号を修正。

修正後
# define relay pin
relay_pin = 40

# set board mode to GPIO.BOARD
GPIO.setmode(GPIO.BOARD)

動画では、羽を付けたモーターを回路とした例が紹介されているが、同様のモーターは付属していないので、同じことを再現することはできない。
また、動画は2種類あり、通常版とV2があるが、内容的には同じで、V2の方の動画でVer.2のrelay回路図が表示されるくらいのようである。
モーターをrelayにつなぐ部分が異なっており、小太り兄ちゃんが説明している動画に沿った回路となっているのだろう。

とりあえず、モーターなしで上記のスクリプトを実行すると、relayがカチッとなり、回路のオンオフが切り替わっているだろうことがわかる。
ここに何をどのようにつなぐかが重要だと思うので、その部分をもうちょっと詳しく教えてくれると良かったのだが。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CrowPiレッスン2:ボタンから入力を取得してブザーを制御する

2020-11-06 14:12:46 | CrowPi
Get input from button to control the Buzzer.
続いて、レッスン2”Get input from button to control the Buzzer.(ボタンから入力を取得してブザーを制御する)”を始める。

↑このボタンを押すとブザーが鳴る


What will you learn

このレッスンを終了すると、次のことができるようになります。
  • ボタンを押すとブザーが鳴ります

What will you need

  • 初期設定後のCrowPiボード

Requires switching modules using the switch

  • はい、左側のスイッチ-すべてのピンを上にしてオンにします(センサーの切り替え方法を忘れた場合は、5ページを参照してください)


このレッスンで使用するPythonスクリプトは以下の通り。

Examples/button_buzzer.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# http://elecrow.com/

import RPi.GPIO as GPIO
import time

# configure both button and buzzer pins
button_pin = 26
buzzer_pin = 18


# set board mode to GPIO.BOARD
GPIO.setmode(GPIO.BCM)

# setup button pin asBu input and buzzer pin as output
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(buzzer_pin, GPIO.OUT)

try:
 while True:
  # check if button pressed
  if(GPIO.input(button_pin) == 0):
   # set buzzer on
   GPIO.output(buzzer_pin, GPIO.HIGH)
  else:
   # it's not pressed, set button off
   GPIO.output(buzzer_pin, GPIO.LOW)
except KeyboardInterrupt:
 GPIO.cleanup()

今回も同様に、GPIO.BCMをBOARDに修正。
それに伴いpin番号も修正。

Examples/button_buzzer.py(修正後)
# configure both button and buzzer pins
button_pin = 37
buzzer_pin = 12


# set board mode to GPIO.BOARD
GPIO.setmode(GPIO.BOARD)

上記のスクリプトを実行し、CrowPiボード上の対応するボタンを押すとブザーが鳴ることを確認。
上記のスクリプトでは、ボタンの入力を無限ループで取得しており、キーボード割り込みを例外処理して終了するので、Ctrl+Cを押す。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする