Menu
CoddyTech

駐車センサー:ディスプレイ

CoddyのArduinoジャーニー「プロジェクト」セクションの一部。レッスン 12/24。

最後の手順では、正確な距離を画面に表示します。16x2 LCDは一般的な方法で配線します。RSは12、Eは11、D4からD7はそれぞれ5、4、3、2に接続します。

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

上段は変わらないので、lcd.begin(16, 2)の後、setup()でDistance:を一度だけ書き込みます。loop()で更新するのは下段だけです。

LCDは、文字が置き換えられるまで表示し続けます。250 cmから8 cmに変わるとき、250 cmの上に8 cmを表示すると、行末に古い文字が残り、画面には8 cmcmと表示されます。長い数値の後に残った文字を消すため、テキストの後にスペースをいくつか表示します。

lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm    ");

スペースを使えば、画面全体を1秒間に10回消去するlcd.clear()によるちらつきも避けられます。

challenge icon

チャレンジ

簡単

LCDに距離を表示します:

  • LiquidCrystal.hをインクルードし、lcd(12, 11, 5, 4, 3, 2)を作成します
  • setup()内で、lcd.begin(16, 2)を実行し、上の行にDistance:を表示します
  • loop()内で、下の行に距離とcmを表示します。例: 57 cm。その後にスペースを入れます

ライト、ビープ音、シリアル出力はそのままにします。Runを押してから、Checkを押します。

自分で試してみよう

// 距離センサー
const int trigPin = 9;
const int echoPin = 10;
// 警告ランプ
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// ブザー
const int buzzerPin = 8;

unsigned long lastBeep = 0;  // 前回のビープ音が鳴り始めた時刻

// パルスを送信し、距離をcm単位で返す。
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// 十分離れていれば緑、近ければ黄、近すぎれば赤。
void showLights(long cm) {
  digitalWrite(greenPin, LOW);
  digitalWrite(yellowPin, LOW);
  digitalWrite(redPin, LOW);
  if (cm >= 100) {
    digitalWrite(greenPin, HIGH);
  } else if (cm >= 30) {
    digitalWrite(yellowPin, HIGH);
  } else {
    digitalWrite(redPin, HIGH);
  }
}

// 物体が近づくほど、ビープ音の間隔を短くする。
void beep(long cm) {
  if (cm >= 100) {
    noTone(buzzerPin);
  } else if (cm < 10) {
    tone(buzzerPin, 1000);  // 近すぎる:鳴り続ける音
  } else if (millis() - lastBeep >= cm * 10) {
    lastBeep = millis();
    tone(buzzerPin, 1000, 50);
  }
}

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  long cm = readDistance();
  Serial.println(cm);
  showLights(cm);
  beep(cm);
  delay(100);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

プロジェクトのすべてのレッスン

自分で練習してみよう: Arduinoプレイグラウンド