Introduction: Ultrasonic Interface
TIII (Tangible Intuitive Interactive Interfaces) you can find inspiration and other Arduino based projects (it's in dutch, but visually, you 'll get the point.)
see the instructable for the hacking: Hacking a USB keyboard
Arduino code:
// MATHIEU LEFEBVRE & YORICK STUYTS
// 2011-2012: MECHATRONIA
//laad libraries voor communicatie met ultrasoon sensor SRF02
#include <Wire.h>
#include <SRF02.h>
int w = 300;
//Create a new instance of a SRF02 sensor with the specified (7-bit) device id and measurement mode (SRF02_INCHES, SRF02_CENTIMETERS, SRF02_MICROSECONDS).
SRF02 srf02[2] = {
SRF02(0x70, SRF02_CENTIMETERS),
SRF02(0x71, SRF02_CENTIMETERS)
};
// variabelen nodig voor positiemeting
int afstandVA=0;
int afstandLR=0;
int reading = 0;
// variabelen nodig voor positiebepaling
String key="leeg";
//variabelen nodig voor de positieberekening
int grenzenVA [4]= {150,190, 260,300}; //binnen welke afstanden liggen volgende commando's (vooruit/achteruit)
int grenzenLR [4]= {150,190, 260,300}; //binnen welke afstanden liggen volgende commando's (links/rechts)
void setup(){
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial communication at 9600bps
SRF02::setInterval(70); // default is 70
// pin x => relais x => toetsslag => PC/MAC
pinMode(2, OUTPUT); //UP
pinMode(3, OUTPUT); //DOWN
pinMode(4, OUTPUT); //LEFT
pinMode(5, OUTPUT); //RIGHT
}
void loop(){
meetAfstand(); // afstanden tot alle sensoren
berekenPositie(); // berekendde positie met behulp van de gemeten afstanden
// coordinaat van positie
// en ken een toets toe aan een bepaalde positie
activeerToets(); // activeer toets via:
// optie 1: relais => toetsenbord => usbkabel => PC, de correcte relais wordt aangestuurd
}
void meetAfstand(){
// hier gaan we over van hardware naar software
// code from: http://www.grapelabs.org/arduino/libraries/srf02-ultrasonic-distance-sensor
//EERSTE LEZING
SRF02::update();
afstandVA=srf02[0].read();
afstandLR=srf02[1].read();
//output van de lezingen na storings-controle
Serial.print("VA: ");
Serial.print(afstandVA);
Serial.print(" LR: ");
Serial.print(afstandLR);
Serial.print(" ");
}
void berekenPositie(){
//deze functie berekend de positie en kent een toests toe aan een welbepaalde positie
//berekening positie: vooruit, achteruit, links & rechts
if( afstandVA>grenzenVA[0] && afstandVA if( afstandVA>grenzenVA[2] && afstandVA if( afstandLR>grenzenLR[0] && afstandLR if( afstandLR>grenzenLR[2] && afstandLR
if( afstandVA>grenzenVA[1] && afstandVAgrenzenLR[1] && afstandLR key=" ";
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
//output ter controle tijdens programeren/werking
Serial.print("BEREKENDE POSITIE");
Serial.print(key);
Serial.println(" ");
}
void activeerToets(){
//hier gaan we over van de software naar de hardware, relais worden aangestuurd om zo een toestslag via een usb-toestenbord door te sturen naar de aangesloten computer
if (key=="UP"){//activeer up-relais
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
delay(50);
digitalWrite(2, HIGH);
delay(w-50);
}
else if (key=="DOWN"){//activeer down-relais
digitalWrite(2,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
delay(50);
digitalWrite(3, HIGH);
delay(w-50);
}
else if (key=="LEFT"){//activeer left-relais
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(5,LOW);
delay(50);
digitalWrite(4,LOW);
digitalWrite(4, HIGH);
delay(w-50);
}
else if (key=="RIGHT") {//activeer right-relais
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
delay(50);
digitalWrite(5,LOW);
digitalWrite(5, HIGH);
delay(w-50);
}
}
On the site of see the instructable for the hacking: Hacking a USB keyboard
Arduino code:
// MATHIEU LEFEBVRE & YORICK STUYTS
// 2011-2012: MECHATRONIA
//laad libraries voor communicatie met ultrasoon sensor SRF02
#include <Wire.h>
#include <SRF02.h>
int w = 300;
//Create a new instance of a SRF02 sensor with the specified (7-bit) device id and measurement mode (SRF02_INCHES, SRF02_CENTIMETERS, SRF02_MICROSECONDS).
SRF02 srf02[2] = {
SRF02(0x70, SRF02_CENTIMETERS),
SRF02(0x71, SRF02_CENTIMETERS)
};
// variabelen nodig voor positiemeting
int afstandVA=0;
int afstandLR=0;
int reading = 0;
// variabelen nodig voor positiebepaling
String key="leeg";
//variabelen nodig voor de positieberekening
int grenzenVA [4]= {150,190, 260,300}; //binnen welke afstanden liggen volgende commando's (vooruit/achteruit)
int grenzenLR [4]= {150,190, 260,300}; //binnen welke afstanden liggen volgende commando's (links/rechts)
void setup(){
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial communication at 9600bps
SRF02::setInterval(70); // default is 70
// pin x => relais x => toetsslag => PC/MAC
pinMode(2, OUTPUT); //UP
pinMode(3, OUTPUT); //DOWN
pinMode(4, OUTPUT); //LEFT
pinMode(5, OUTPUT); //RIGHT
}
void loop(){
meetAfstand(); // afstanden tot alle sensoren
berekenPositie(); // berekendde positie met behulp van de gemeten afstanden
// coordinaat van positie
// en ken een toets toe aan een bepaalde positie
activeerToets(); // activeer toets via:
// optie 1: relais => toetsenbord => usbkabel => PC, de correcte relais wordt aangestuurd
}
void meetAfstand(){
// hier gaan we over van hardware naar software
// code from: http://www.grapelabs.org/arduino/libraries/srf02-ultrasonic-distance-sensor
//EERSTE LEZING
SRF02::update();
afstandVA=srf02[0].read();
afstandLR=srf02[1].read();
//output van de lezingen na storings-controle
Serial.print("VA: ");
Serial.print(afstandVA);
Serial.print(" LR: ");
Serial.print(afstandLR);
Serial.print(" ");
}
void berekenPositie(){
//deze functie berekend de positie en kent een toests toe aan een welbepaalde positie
//berekening positie: vooruit, achteruit, links & rechts
if( afstandVA>grenzenVA[0] && afstandVA
if( afstandVA>grenzenVA[1] && afstandVA
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
//output ter controle tijdens programeren/werking
Serial.print("BEREKENDE POSITIE");
Serial.print(key);
Serial.println(" ");
}
void activeerToets(){
//hier gaan we over van de software naar de hardware, relais worden aangestuurd om zo een toestslag via een usb-toestenbord door te sturen naar de aangesloten computer
if (key=="UP"){//activeer up-relais
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
delay(50);
digitalWrite(2, HIGH);
delay(w-50);
}
else if (key=="DOWN"){//activeer down-relais
digitalWrite(2,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
delay(50);
digitalWrite(3, HIGH);
delay(w-50);
}
else if (key=="LEFT"){//activeer left-relais
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(5,LOW);
delay(50);
digitalWrite(4,LOW);
digitalWrite(4, HIGH);
delay(w-50);
}
else if (key=="RIGHT") {//activeer right-relais
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
delay(50);
digitalWrite(5,LOW);
digitalWrite(5, HIGH);
delay(w-50);
}
}