前の記事
単品編
今回
ポート表
本体シルク(SLK)とポートとの対応
| HC-SR04 | 本体SLK | 本体SLK | HC-SR04 |
|---|---|---|---|
| - | A0 | 5V | - |
| - | A1 | GND | GP2Y0E03-1/2、LED-1/2 GND |
| - | A2 | 3.3V | GP2Y0E03-1/2 VCC/VIN/GPIO |
| - | A3 | A10 | - |
| - | A4 | A9 | - |
| LED-1 | A5 | A8 | LED-2 |
| GP2Y0E03-1 | A6 | A7 | GP2Y0E03-2 |
| - | QT | QT | - |
Arudiono IDEで使う
2つのGP2Y0E03からアナログ入力で距離を読み取り、LEDを点灯させる
スケッチ
#define ADIN1_PIN A6
#define ADIN2_PIN A7
#define LEDOUT1_PIN A5
#define LEDOUT2_PIN A8
#define ADIN_AVARAGE_NUM 10
#define ADIN_AVARAGE_DELAY 0
#define CHECK_DELAY 500
#define ADIN_LOW_VALUE 0 // 分解能(最小値)
#define ADIN_HIGH_VALUE 1023 // 分解能(最大値)
#define ADIN_LOW_mV_VALUE 0 // ADの最小値(mV:3.3V)
#define ADIN_HIGH_mV_VALUE 3300 // ADの最大値(mV:3.3V)
#define ADIN_LOW_LIMIT_mV 500 // ADの有効最小値(mV:2.2V)
#define ADIN_HIGH_LIMIT_mV 2200 // ADの有効最大値(mV:0.5V)
#define ADIN_LOW_mV_mm 500 // 0.5V-2.2V(4-50cm)が有効範囲。最小電圧値が500mm
#define ADIN_HIGH_mV_mm 40 // 0.5V-2.2V(4-50cm)が有効範囲。最大電圧値が40mm
#define LEDOUT_ON HIGH
#define LEDOUT_OFF LOW
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(ADIN1_PIN, INPUT);
pinMode(ADIN2_PIN, INPUT);
pinMode(LEDOUT1_PIN, OUTPUT);
pinMode(LEDOUT2_PIN, OUTPUT);
}
int analogInputAverage(int inputPinNo, int averageNum, int readDelay) {
long sumAnalogInputValue;
int loop;
sumAnalogInputValue = 0;
for (loop = 0; loop < averageNum; loop++) {
sumAnalogInputValue = sumAnalogInputValue + analogRead(inputPinNo);
if (ADIN_AVARAGE_DELAY > 0) {
delay(ADIN_AVARAGE_DELAY);
}
}
return sumAnalogInputValue / averageNum;
}
void analogReadTrans(int inputPinNo, int outputPinNo) {
int analogValue;
int analogmV;
int distancemm;
// put your main code here, to run repeatedly:
// センサーから値を読み取る
analogValue = analogInputAverage(inputPinNo, ADIN_AVARAGE_NUM, ADIN_AVARAGE_DELAY);
analogmV = map(analogValue, ADIN_LOW_VALUE, ADIN_HIGH_VALUE, ADIN_LOW_mV_VALUE, ADIN_HIGH_mV_VALUE);
distancemm = map(analogmV, ADIN_LOW_LIMIT_mV, ADIN_HIGH_LIMIT_mV, ADIN_LOW_mV_mm, ADIN_HIGH_mV_mm);
Serial.print("AD[");
Serial.print(inputPinNo);
Serial.print("]");
if ((analogmV < ADIN_LOW_LIMIT_mV) || (analogmV > ADIN_HIGH_LIMIT_mV)) {
Serial.print("OUT OF RANGE:");
digitalWrite(outputPinNo, LEDOUT_OFF);
} else {
Serial.print("IN RANGE:");
digitalWrite(outputPinNo, LEDOUT_ON);
}
Serial.print("AD:");
Serial.print(analogValue);
Serial.print(" / VOLT: ");
Serial.print(analogmV);
Serial.print(" / DISTANCE:");
Serial.print(distancemm);
Serial.println("mm");
}
void loop() {
analogReadTrans(ADIN1_PIN, LEDOUT1_PIN);
analogReadTrans(ADIN2_PIN, LEDOUT2_PIN);
delay(CHECK_DELAY);
}
最後に
スケッチコードはCC BY-SA 4.0(著作者の情報とCCライセンス継承はお願いします。商用利用・改変・再配布は問題なし)です。