Sensors Material taken from Robotics with the Boe-Bot Where Are We Going? Sumo-Bot competitions Devices that Contain Sensors The boebot uses sensors to interact with its environment. There are a variety of sensors used for a variety of purposes: smoke, sound, rotation/tilt, vibration, magnetic orientation, temperature, humidity, pressure, proximity, distance, light, and so on. Ultrasonic Distance Sensor PING Ultrasonic Range Finder Parallax Tutorial •PING ultrasonic distance sensor provides precise distance measurements from about 2 cm (0.8 inches) to 3 meters (3.3 yards). •It works by transmitting an ultrasonic burst and providing an output pulse that corresponds to the time required for the burst echo to return to the sensor. •By measuring the echo pulse width the distance to target can easily be calculated. Theory of Operation The PING sensor emits a short ultrasonic burst and then "listens" for the echo. Under control of a host microcontroller (trigger pulse), the sensor emits a short 40 kHz (ultrasonic) burst. This burst travels through the air at about 1130 feet per second, hits an object and then bounces back to the sensor. The PING sensor provides an output pulse to the host that will terminate when the echo is detected, hence the width of this pulse corresponds to the distance to the target. Limited Detection Range Simple to Connect http://learn.parallax.com/ Programs Code---Without Library Support With the Ping library: #include <Ping.h> int PingPin = 9; Ping sonar(PingPin); void setup() { Serial.begin(9600); } void loop() { delay(50); sonar.fire(); Serial.print("Ping: "); Serial.print(sonar.inches()); Serial.println("in"); } Object Detection Using IR The IR Detector The IR detector is only looking for infrared that’s flashing on and off 38,500 times per second. It has built-in optical filters that allow very little light except the 980 nm infrared. It also has an electronic filter that only allows signals around 38.5 kHz to pass through. This prevents IR interference from common sources such as sunlight and indoor lighting. Schematics Ground Ground Ground Ground http://learn.parallax.com/ IR Detection Range Less series resistance will make an LED glow more brightly. Brighter IR LEDs can make it possible to detect objects that are further away. Detecting IR The key to making each IR LED/detector pair work is to send 1 ms of a 38.5 kHz IR signal, and then, immediately store the IR detector’s output in a variable. The IR detector’s output state is HIGH (1) when it receives NO IR signal. When the IR detector sees the 38500 Hz signal reflected by an object, its output is LOW (0). The IR detector’s output only stays LOW for a fraction of a millisecond after the 38.5 kHz signal is sent, so it’s essential to store the IR detector’s output in a variable immediately after sending the 38.5 kHz signal. Code for Testing IR int LeftIRDec = 11; int LeftIREmit = 10; int RightIRDec = 4; int RightIREmit = 5; void setup() { pinMode(LeftIRDec, INPUT); pinMode(LeftIREmit, OUTPUT); pinMode(RightIRDec, INPUT); pinMode(RightIREmit, OUTPUT); Serial.begin(9600); } void loop() { int irLeft = irDetect(LeftIREmit, LeftIRDec, 38000); int irRight = irDetect(RightIREmit, RightIRDec, 38000); Serial.print(irLeft); Serial.print(" "); Serial.println(irRight); delay(100); } int irDetect(int irLedPin, int irReceiverPin, long frequency) { tone(irLedPin, frequency, 8); delay(1); int ir = digitalRead(irReceiverPin); } // IR receiver -> ir variable delay(1); // Down time before recheck return ir; // Return 1 no detect, 0 detect Object Detection And Avoidance Code Customizing the code: Assign names to the pins Remove the call to tone() in setup() Change from avoidance to pursuit More? QTI Line Sensor How it Works The QTI is a reflective object sensor. There’s an infrared LED behind its clear window and an infrared phototransistor behind its black window. When the infrared light emitted by the LED reflects off a surface and returns to the black window, it strikes the infrared phototransistor’s base, causing it to conduct current. The more infrared incident on the phototransistor’s base, the more current it conducts. Like an RC Circuit http://learn.parallax.com/ Code for Testing QTIs int LeftQTI = 8; int RightQTI = 2; void setup() { Serial.begin(9600); } void loop() { long tLeft = rcTime(LeftQTI); long tRight = rcTime(RightQTI); Serial.print("tLeft = "); Serial.print(tLeft); Serial.println(" us"); Serial.print("tRight = "); Serial.print(tRight); Serial.println(" us"); delay(1000); } long rcTime(int pin) { // ..returns decay time pinMode(pin, OUTPUT); // Charge capacitor digitalWrite(pin, HIGH); // ..by setting pin ouput-high delay(1); // ..for 5 ms pinMode(pin, INPUT); // Set pin to input digitalWrite(pin, LOW); // ..with no pullup long time = micros(); // Mark the time while(digitalRead(pin)); // Wait for voltage < threshold time = micros() - time; // Calculate decay time return time; // Return decay time } Code for Detecting Reflection Customizing the code: Assign names to the pins Remove the call to tone() in setup() Use multiple QTI sensors More? Simple Connections http://learn.parallax.com/ Mount the QTI sensor close to the ground