Arduino講座:その6

第6回

 

「距離センサーとLEDライト」

 

今回は距離センサーとLEDを接続して、人やオブジェクトがセンサーに対して特定の距離になったときにLEDが点灯する様に動かします。

 

まず、前回説明したブレッドボードに距離センサーを設置します(Parallex社Pingという商品を使用)。まず、センサーボードに記載してあるように、3本あるピン(GND,5V,SIG)をそれぞれArduinoのGND,5V,7番pinと接続します。

 

そして、以下のようにLEDライトを6番pin5番pinに接続します。6番pinをLEDの+極へ、抵抗をはさみ、-極をGNDへと接続。これを5番pinも同様に接続。

Arduino の0番pinから13番pin のうちのAnalog pin (~と記載のある番号 3,5,6,9,10,11)を今回は使用します。

 

 

 

そして、ここでは5個のLEDを使って実験してみます。

以下写真のように6,5,4,11,10 にLEDを接続します。(最高に見にくい写真になってしまいましたが)

 

 

そして以下のコードをコピー。

0<100cm, 0<150cm, 0<200cm, 0<250cm, 0<300cm,と50cm毎に異なるLEDがついていく仕様にしています。300cmがこのセンサーの規格上最大と記載があるので, その値を上限に設定し物体が近づくにつれてLEDがついていきます。

 

 

// using a PING))) Sensor

 

// define pins

int SensorPin=7;

int LedPin6=6;

int LedPin5=5;

int LedPin3=3;

int LedPin11=11;

int LedPin10=10;

int LedPin9=9;

 

int distance;

unsigned long pulseDuration=0;

 

void setup() {}

 

void loop() {

 

// measure distance: send “Ping”

pinMode(SensorPin, OUTPUT);

digitalWrite(SensorPin, HIGH);

delayMicroseconds(5);

digitalWrite(SensorPin, LOW);

 

// measure distance: listen for “Ping”

pinMode(SensorPin, INPUT);

pulseDuration=pulseIn(SensorPin, HIGH);

 

// divide by two (back/forth for a single trip), divided by speed of sound = distance in cm

pulseDuration=pulseDuration/2;

distance = int(pulseDuration/29);

 

 

if (distance > 0 && distance < 100) {

int RedValue=(100-distance)*10.2;

analogWrite(LedPin6, RedValue);

} else {

analogWrite(LedPin6, 0);

}

 

if (distance > 0 && distance < 150) {

int RedValue=(150-distance)*10.2;

analogWrite(LedPin5, RedValue);

} else {

analogWrite(LedPin5, 0);

}

 

if (distance > 0 && distance < 200) {

int RedValue=(200-distance)*10.2;

analogWrite(LedPin3, RedValue);

} else {

analogWrite(LedPin3, 0);

}

 

if (distance > 0 && distance < 250) {

int RedValue=(250-distance)*10.2;

analogWrite(LedPin11, RedValue);

} else {

analogWrite(LedPin11, 0);

}

 

if (distance > 0 && distance < 300) {

int RedValue=(300-distance)*10.2;

analogWrite(LedPin10, RedValue);

} else {

analogWrite(LedPin10, 0);

}

 

 

 

// wait a little…

delay(20);

 

}

 

 

極めて基本的な動作なんですが、lightがセンサーに反応してついたり消えたりするのは個人的に見てて嬉しいので好きです。完全に個人的感情ですね。ではまた次回

 

 

by  Hiroshi Ito

 

 

 



Comments are closed.