top drop menu

Recent Post

금요일, 11월 4

프로세싱(3) - 아두이노 HC-SR04 거리감지 센서의 활용

아두이노에 장착된 거리 센서 HC-SR04를 센서값을 이용하는 프로세싱 예제를 간단히 만들어 보자. 먼저 아두이노에 HC-SR04를 적절하게 연결하고 세팅해 놓자. 아두이노와 프로세싱 양쪽에 따로 코딩을 해 둬야 한다.

#include <NewPing.h> #define Trig 11 #define Echo 12 #define Max_distance 400 NewPing myPing(Trig, Echo, Max_distance); void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: int uS = myPing.ping(); int myDist = uS / US_ROUNDTRIP_CM; // Serial.print("Ping:"); // Serial.print(uS / US_ROUNDTRIP_CM); // Serial.println("cm"); int myVal = map(myDist, 1,400, 1, 255); Serial.write(myVal); delay(30); }

감지된 거리값을 시리얼에 쓰기 하도록 프로그래밍 되어 있다. 그런데 측정값이 왜 이리 널뛰기를 하지? 좀 더 안정적인 값을 측정하는 방법이 있는지 나중에 확인해 보자.이제 프로세싱에서 작업을 하자.


열심히 박스와 동그라미를 그려서 주인공을 그려 넣자. 원리는 간단하다. 아두이노에서 측정한 거리값을 시리얼을 통해 가져와서 주황색 박스의 x값에 계속해서 대입해 주면 되는것이다. 이게 실제 시뮬레이션이라면 거리비를 구해서 적절히 해줘야 할것 같지만 이 예제에서는 그냥 간단히 동작하는 것에 만족하자.

import processing.serial.*; Serial myPort; int val; void setup(){ size(600, 400); String portName = Serial.list()[1]; myPort = new Serial(this, portName, 9600); } void draw(){ if (myPort.available() > 0) { val = myPort.read(); } background(200); fill(0); rect(30,220, 50, 100); rect(50, 190, 50, 30); fill(200); ellipse(56, 320, 55, 55); ellipse(90, 205, 15, 15); //로봇이름 textSize(20); fill(110); if (val <=10 ) { PFont font = createFont("NanumGothic", 20); textFont(font); text("저리가!", 50, 180); } else { text("Robot", 50, 180); } //거리값 println(val); fill(124,44,99); textSize(40); text(val, 280, 100); //object fill(230, 67, 30); float obj_x = map(val, 1,30, 110, 350); rect(obj_x, 200, 30, 140); }
Blogger Widget