Conectamos el Sensor 136B5B a Arduino, arduino lo reconoce y nos envía un valor a Processing, con el cual podemos modificar valores dentro de processing. En este caso, el ejemplo es un círculo que cambia de tamaño según la distancia que se encuentra el sujeto del sensor. Es importante en Processing tener instalada la libería de Arduino AP-Sync.

En el código incluye el parpadee también de luz led conectada al Arduino en la medida que me acerco o alejo. El valor nombrado «distancia» es el que enviaremos a Processing.

*Nota importante: en el código de Processing donde dice streamer = new AP_Sync(this,»COM6″, 9600);  se debe poner el nombre del puerto de Arduino (que cada ordenador lo nombra diferente), en este caso es «COM6».

* Si el código da error, mirar las comillas «» que a veces hay que volver a escribirlas dentro del código.

Código para Arduino para enviar la señal a Processing

[code language=»java»]
#include
AP_Sync streamer(Serial);

const int pingPin = 8;
int led = 7;

void setup() {
// initialize serial communication:
Serial.begin(9600);
pinMode(led, OUTPUT);

}

void loop() {
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, inches, cm;

// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

// convert the time into a distance
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

streamer.sync(«distancia»,cm);

Serial.print(inches);
Serial.print(«in, «);
Serial.print(cm);
Serial.print(«cm»);
Serial.println();

delay(100);

if((cm<=200)) { digitalWrite(led, HIGH); delay(cm); digitalWrite(led, LOW); } else if(cm>200)
{
digitalWrite(led, LOW);
}

}

long microsecondsToInches(long microseconds) {
// According to Parallax’s datasheet for the PING))), there are
// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
// second). This gives the distance travelled by the ping, outbound
// and return, so we divide by 2 to get the distance of the obstacle.
// See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds) {
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}[/code]

Código de Processing

[code language=»java»]import apsync.*;
import processing.serial.*;

PFont f;
AP_Sync streamer;

public float distancia;
public int tmp;

void setup(){
size(1000,600);

streamer = new AP_Sync(this,»COM6″, 9600);
}

void draw() {

if (distancia<200){
background(0);
// circulo
stroke(255);
fill(200,200,0);
ellipse(500,300,1000-distancia*3,1000-distancia*3);
}
}
[/code]