Skip to main content

Grove - 衝突センサー

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

pir

Grove - 衝突センサーは、衝突運動や振動が発生したかどうかを検出することができます。振動が検出されると、低パルス信号を出力します。出力信号をより信頼性の高いものにし、整然としたものにするために、ノイズの影響を軽減するための必要な外部回路を追加しました。そのため、通常の揺れでは出力が発生しません。このセンサーは高感度を持っています。バッテリーマネジメントの自動ウェイクアップや電源オフなどのプロジェクトに適用することができます。

動作電圧は5Vで、標準的なArduino/Seeeduino 5Vシステムと互換性があります。

pir

仕様

  • 電圧: 3.3/5V
tip
Groveモジュールの詳細については、[Grove System](https://wiki.seeedstudio.com/ja/Grove_System/)をご参照ください。

対応プラットフォーム

ArduinoRaspberry Pi

pir

pir

caution
上記で対応可能と記載されているプラットフォームは、モジュールのソフトウェアまたは理論的な互換性を示しています。ほとんどの場合、Arduinoプラットフォーム向けのソフトウェアライブラリやコード例のみを提供しています。すべての可能なMCUプラットフォーム向けにソフトウェアライブラリやデモコードを提供することは不可能です。そのため、ユーザー自身でソフトウェアライブラリを作成する必要があります。

はじめに

Arduinoで遊ぶ

衝突が発生すると出力信号が変化することを利用して、このデモを設計しました。センサーが衝突を検知するたびにLEDが点灯します。ここではLEDを管理デバイスとして使用しており、このデモを参考にして自転車のライトなどのデバイスを制御することができます。

手順は以下の通りです:

  1. Groveケーブルを使用して衝突センサーをGrove - Basic Shieldのデジタルポート2に接続し、LEDをピン13に接続します。

  2. Grove - Basic ShieldをArduinoに差し込みます。

  3. USBケーブルを使用してArduino/SeeeduinoをPCに接続します。

  4. 以下のコードを新しいArduinoスケッチにコピー&ペーストし、Arduinoにアップロードします。

// Grove - 衝突センサーのテスト
#define LED 13 // ArduinoまたはSeeeduinoのオンボードLED
#define COLLISION_SENSOR 2 // 衝突センサーはArduinoのD2に接続

void setup()
{
pins_init();
}

void loop()
{
if(isTriggered())
{
turnOnLED();
delay(2000);
}
else turnOffLED();
}

void pins_init()
{
pinMode(LED,OUTPUT);
turnOffLED();
pinMode(COLLISION_SENSOR,INPUT);
}

boolean isTriggered()
{
if(!digitalRead(COLLISION_SENSOR))
{
delay(50);
if(!digitalRead(COLLISION_SENSOR))
return true; // 衝突センサーがトリガーされる
}
return false;
}

void turnOnLED()
{
digitalWrite(LED,HIGH); // LEDが点灯
}

void turnOffLED()
{
digitalWrite(LED,LOW); // LEDが消灯
}
  1. LEDの状態を確認してください。テーブルに指を叩くたびにLEDが点灯するはずです。

コード内のdelay(50)関数を変更することでセンサーの感度を調整できます。

if(!digitalRead(COLLISION_SENSOR))
{
return true; // 衝突センサーがトリガーされる
}
return false;

Codecraftで遊ぶ

ハードウェア

ステップ1. Grove - 衝突センサーをBase ShieldのポートD2に接続します。

ステップ2. Base ShieldをSeeeduino/Arduinoに差し込みます。

ステップ3. USBケーブルを使用してSeeeduino/ArduinoをPCに接続します。

ソフトウェア

ステップ1. Codecraftを開き、Arduinoサポートを追加し、メインプロシージャを作業エリアにドラッグします。

note
初めてCodecraftを使用する場合は、[Codecraftを使用したArduinoのガイド](https://wiki.seeedstudio.com/ja/Guide_for_Codecraft_using_Arduino/)も参照してください。

ステップ2. 以下の画像のようにブロックをドラッグするか、このページの最後でダウンロードできるcdcファイルを開きます。

pir

プログラムをArduino/Seeeduinoにアップロードします。

tip
コードのアップロードが完了すると、衝突センサーが衝突を検知した際にArduinoのピン13に接続されたLEDが点灯します。

Raspberry Piで遊ぶ (Raspberry Pi用Grove Base Hatを使用)

ハードウェア

  • ステップ1. このプロジェクトで使用するもの:
Raspberry PiGrove Base Hat for RasPiGrove - 衝突センサー

pir

pir

pir

今すぐ購入今すぐ購入今すぐ購入
  • ステップ2. Grove Base HatをRaspberry Piに差し込みます。
  • ステップ3. Grove - 衝突センサーをBase HatのD5ポートに接続します。
  • ステップ4. USBケーブルを使用してRaspberry PiをPCに接続します。

pir

note
ステップ3では、Grove - 衝突センサーを**任意のGPIOポート**に接続することができますが、対応するポート番号に合わせてコマンドを変更する必要があります。

ソフトウェア

  • ステップ1. ソフトウェアの設定に従って開発環境を構成します。
  • ステップ2. grove.pyライブラリをクローンしてソースファイルをダウンロードします。
cd ~
git clone https://github.com/Seeed-Studio/grove.py
  • ステップ3. 以下のコマンドを実行してコードを実行します。
cd grove.py/grove
python grove_collision_sensor.py 5

以下はgrove_collision_sensor.pyのコードです。

import time
from grove.gpio import GPIO


class GroveCollisionSensor(GPIO):
def __init__(self, pin):
super(GroveCollisionSensor, self).__init__(pin, GPIO.IN)
self._last_time = time.time()

self._on_collision = None
self._on_NoCollision = None
self.collisionState = False

@property
def on_collision(self):
return self._on_collision

@on_collision.setter
def on_collision(self, callback):
if not callable(callback):
return

if self.on_event is None:
self.on_event = self._handle_event

self._on_collision = callback

@property
def on_NoCollision(self):
return self._on_NoCollision

@on_NoCollision.setter
def on_NoCollision(self, callback):
if not callable(callback):
return

if self.on_event is None:
self.on_event = self._handle_event

self._on_NoCollision = callback

def _handle_event(self, pin, value):
t = time.time()
dt, self._last_time = t - self._last_time, t

if not value:
if callable(self._on_collision):
self._on_collision(dt)
else:
if callable(self._on_NoCollision):
self._on_NoCollision(dt)

Grove = GroveCollisionSensor


def main():
import sys

if len(sys.argv) < 2:
print('Usage: {} pin'.format(sys.argv[0]))
sys.exit(1)

button = GroveCollisionSensor(int(sys.argv[1]))

def on_collision(t):
print('Collision')
def on_NoCollision(t):
print("No Collision")

button.on_collision = on_collision
# button.on_NoCollision = on_NoCollision

while True:
time.sleep(1)


if __name__ == '__main__':
main()

tip
すべてが正常に動作すれば、以下の結果が表示されるはずです。

pi@raspberrypi:~/grove.py/grove $ python grove_collision_sensor.py 5
Collision
Collision
Collision
Collision
Collision
Collision
Collision
^CTraceback (most recent call last):
File "grove_collision_sensor.py", line 112, in <module>
main()
File "grove_collision_sensor.py", line 108, in main
time.sleep(1)
KeyboardInterrupt
pi@raspberrypi:~/grove.py/grove $

このプログラムを終了するには、++ctrl+c++ を押すだけです。

Raspberry Pi で遊ぶ (GrovePi_Plus を使用)

  1. Raspberry Pi と GrovePi または GrovePi+ を準備してください。

  2. 開発環境の設定を完了している必要があります。設定がまだの場合は こちら を参照してください。

  3. 接続

  • センサーを Grove ケーブルを使用して GrovePi のソケット D2 に接続します。
  1. デモのディレクトリに移動します:
cd yourpath/GrovePi/Software/Python/
  • コードを確認するには
nano grove_collision_sensor.py   # "Ctrl+x" で終了 #
import time
import grovepi

# Grove 衝突センサーをデジタルポート D2 に接続
# SIG,NC,VCC,GND
collision_sensor = 2

grovepi.pinMode(collision_sensor,"INPUT")

while True:
try:
print grovepi.digitalRead(collision_sensor)
time.sleep(.5)

except IOError:
print "Error"
  1. デモを実行します。
sudo python grove_collision_sensor.py

オンライン回路図ビューア

リソース

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。

Loading Comments...