0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SeeeduinoXIAOマイコンで、距離センサ「GP2Y0E03」を複数使う

Posted at

前の記事

単品編

今回

ポート表
本体シルク(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ライセンス継承はお願いします。商用利用・改変・再配布は問題なし)です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?