別棟備忘録4

*

長澤ただし  (Processing Report.4)

      2016/01/09

cm精度の距離であればものさしではかるのが簡便であり、普通である。
しかし、時には「手元にものさしがない代わりにArduinoとPCとHC-SR04がある」という状況に遭遇することもあるかもしれない。

HC-SR04が各地で安価に手に入るようになっているので、距離を測定してPC画面に表示する備忘録。
hcsr04

したがって正しいタイトルは

HC-SR04とArduinoとprocesingで距離測定

Arduino→processingに送ってWindows上で表示(演示)することを想定
基本的な発想はこのエントリ 亀田○毅のArduino→Processing

Trig-Pin2
Echo-Pin3 へ
また、意味があるかはともかくとして、温度校正用にLM35をAnalog_0へ
hc-ar

正規版のArduino UNOではなく、色が濃いほうを使ったのは、ささやかな節約です。

Arduino側【先人の例の引用・修正】
int Duration = 0; //受信した間隔
int Distance = 0; //距離
void setup() {
Serial.begin( 9600 );
pinMode( 2, OUTPUT );
pinMode( 3, INPUT );
}
void loop() {
int ans , temp , tv ; //温度計測用の変数
ans = analogRead(0) ; //アナログ0番ピンからセンサ値を読込む
temp = ans * 500 / 1024;
digitalWrite( 2, HIGH ); //超音波を出力
delayMicroseconds( 10 );
digitalWrite( 2, LOW );
Duration = pulseIn( 3, HIGH,10000 );
if (Duration > 0) {
Distance = Duration/2;
float sspeed = 331.5+0.6*temp;
Distance = Distance*sspeed*100/1000000;
Serial.write(Distance);
}
delay(100);
}
ダウンロード:dis2.ino

 

 

processing側

import processing.serial.*;
Serial myPort;
int y;
int portIndex = 3;
int dis = 0;
void setup(){
  size(800,230);
   if(portIndex==-1){
    for(int i=0, l=Serial.list().length ; i < l; i++){
      println(i+" : "+Serial.list()[i]);
    }
    exit();
  }else{
   myPort = new Serial(this, Serial.list()[portIndex], 9600);
}
}
void draw(){
  background(0,0,0); 
  fill(10,10,10);
  rect(310, 60, 600, 65);
  fill(255,255,80);
  textSize(80);
  textAlign(RIGHT);
  text(y, 180, 123);
  textSize(50);
  textAlign(LEFT);
  text("cm", 185, 123);
  rect(310, 60, y*3, 65);
  textAlign(CENTER);
  textSize(20);
  text(0, 310, 150);
  text(50, 460, 150);
  text(100, 610, 150);
  text(150, 760, 150);
  delay(100);
}
void serialEvent(Serial p){
  y = myPort.read();
}

ダウンロード:dis2.pde

はじめに int portIndex = -1; としてポートを確認し、設定する。

稼働画面

dis2
精度は極めて怪しいですが、window上に距離を表示可能。

その道の方へのおまけ
この工作をしたのは、冒頭のものさしの常識に挑戦するため…ではなく、超音波距離計で開管を測定することで「開口部で音波が反射すること」を演示できるとのうわさを聞いた故です。
その様子

左側115cmあまりのところに障害物(いす)をおいています。
管の長さが11cmに対して13cmの表示は誤差では片付かない感じがします。

 - Arduino+Processing, 物理