Introduction: Obstacle-Avoiding Robot With a Personality!
Here's a video (it's kind-of low quality, but I'm working on that. (I am still trying to work out the part that it's too slow.)
Step 1: The Sensors
- Ultrasonic Rangefinder (aka "sonar")
- 2 Sharp GP2D12 IR Sensors
- 1 Standard IR Assembly (more on this later)
- 1 CdS (Cadmium Sulphide) Photocell
If anyone who has prior experience with any of the Sharp IR rangers, FYI, they are not being used for actual distance measurement in this robot. I do not have an ADC (Analog-to-Digital Converter), neither do I know how to use them that way. They are simply providing a HIGH or LOW signal to the BS2 microcontroller.
The datasheets for the Sharp IR's as well as the Ping))) sensor can be found on the net, but if you're lazy like me, you can scroll down a little further an there they are!
Step 2: The Hardware, Brain, and Other Components
Ok. To start off, the hardware that was used for this robot was part of a kit I got. It is the "Boe-Bot" kit from Parallax (http://www.Parallax.com), but this design is very flexible; you can use any chassis you want, just be sure that 1) the ultrasonic rangefinder is at the highest elevation on the robot so it doesn't hit bottoms of railings, etc, and 2) the IR sensors are angled in such a way that they can even detect objects that are about 1" away from the robot. This keeps it from hitting edges of things that may hit the wheels.
Mounted on the chassis is Parallax's Boe-Board which came with my Boe-Bot kit, which is simply a development board that can be used with any Stamp microcontroller with the same voltage requirements and pin layout. There are many different Stamp development boards on the internet. It is $65 from Parallax.
On the dvelopment board, as Bob's brain, is the BS2e (BASIC Stamp 2 e), which is basically the same as the BS2, except with more memory (RAM and EEPROM). The EEPROM is for program storage, and the RAM is for storing the variables (temporarily, of course). Bob may not be the fastest thinker in the world (~4,000 instructions/sec), but hey, that's good enough.
Bob moves via two continuous rotation servos from Parallax which, as many servos do, have a LOT of torque. For the juice, he has a 4-cell AA battery pack (for a total of 6V) connected to the 5V regulator on the development board, which gives a steady output of, you guessed it, 5V as to not fry the components. Many devices for robotics run on either a 5V or 6V supply; for some reason, it's a standard. And you DON"T want to fry these components; they're expensive. The BS2e has an internal regulator, but don't give it more than 9V if you are not using a development board! Also, if you don't use a development board (which always have regulators), then BE SURE to use a 5V regulator.
NOTE: As for power consumption, Bob is very greedy. Use RECHARGEABLE batteries for this; they last a LOT longer. I used 4 Energizer rechargeables @ 2500ma each, which definitely prolongs the life.
Step 3: Assembling the Light Sensor Circuit
The light sensor requires a circuit for the BS2e to properly utilize it. I got this circuit right out of one of Parallax's books (actually, the one that came with my kit). NOTE: PIN 6 IS ACTUALLY PIN 1; THIS MUST MATCH THE CODE OR YOU MAY DAMAGE OTHER COMPONENTS. BE CAREFUL NOT TO MESS THAT UP.
Step 4: Assembling the Dropoff Detector
This can be put together on some bare PCB. I just ran over to RadioShack and got one, and snipped the board to fit the circuit. This part is CRUCIAL. If you mess this up, poor Bob may die. The IR detector is a Panasonic PNA4601, but you can get them from RatShack, as well as the resistors and the IR LED. It does not matter what size IR LED you get, juts make sure it's not an IR PHOTOTRANSISTOR. That is a TOTALLY different device. Also, you must use heat shrink tubing or some sort of straw (you can spray-pain it black) to narrow the beam of the IR LED, but it has to be completely sovered (except the end of the LED), or the sensor will NOT work. I used a plastic casing from Parallax. You can order the LED and the casing on their website.
Unfortunately, the frequency range on the IR detector I used was very wide, which means it is much more prone to interference. Luckily, RadioShack offers ones only tuned to 38Khz, which means Bob is less likely to act strange around remote controls and other devices that use IR. The DP2D12's are great because they are virtually interference-free because of advanced optics (the lenses) and circuitry. In future projects, I will not be using regular IR detectors. The Sharp IR's are preferable over simple IR receivers.
NOTE: PIN 8 IS ACTUALLY PIN 10. PIN 9 IS CORRECT
Step 5: Bob Needs Sound!
Connect a piezo speaker to PIN 5, and - to ground. Bob needs to express himself! The best kind of piezospeaker to use would be a surface mount one. They are almost always 5 volts. Otherwise, if you use one rated below 5V, you are going to need a resistor.
Step 6: Adding the 'Headlight'
To make Bob look cooler in the dark, he turns on a headlight when he enters a dark room. Any white LED will work for this. Since the circuit is so darn simple, I am just going to tell you: just use a 220ohm resistor to limit the current. And or course, - goes to ground.
Step 7: Fill Up Bob's Brain!
All the connections to the BS2e are listed again below
- PIN 0 - 220ohm resistor to the CdS photocell
- PIN 5 - positive lead of piezo speaker
- PIN 6 - SIG (signal) line of left GP2D12 (left when looking at the robot from above)
- PIN 8 - SIG line of right GP2D12
- PIN 9 - OUT (output) line of the IR detector (dropoff sensor)
- PIN 10 - 1Kohm resistor to the positive lead of the IR LED
- PIN 15 - SIG lead of ultrasonic rangefinder
1) He, or course, avoids objects and dropoffs
2) counts the number of times each one of the sensors was triggered, and determines if he's in a spot that cannot be maneuvered in
3) generates pseudo-random numbers to randomize movement
4) turns on "headlights" after determining that he's in a dark room by using timers and IF...THEN statements
I am still working out the 'lag' part. It has to do with the discharge time of the capacitor for the light sensor, as well as an over-burdened BS2e.
40 Comments
7 years ago on Introduction
this looks interesting, you can find whatever u need to make your own robot here:
http://www.amazon.com/s?marketplaceID=ATVPDKIKX0DER&me=A2I0DT8TRUL79X&merchant=A2I0DT8TRUL79X&redirect=true
7 years ago on Introduction
this looks interesting. You can find whatever you need to construct your robot here:
http://www.amazon.com/s?marketplaceID=ATVPDKIKX0DE...
9 years ago on Introduction
Hi, I started on a project using IR sensors but for some reason my servos only keep moving forward even if the sensor detects an object ahead. I checked the code and it seems to be fine. the connections are according to the codes. so im not quite sure whats going on there. any ideas?
Here is the code if anyone sees anything wrong with it please let me know.
/*
* Robotics with the BOE Shield - FastIrRoaming
* Adaptation of RoamingWithWhiskers with IR object detection instead of
* contact switches
*/
#include // Include servo library
Servo servoLeft; // Declare left and right servos
Servo servoRight;
void setup() // Built-in initialization block
{
pinMode(10, INPUT); pinMode(9, OUTPUT); // Left IR LED & Receiver
pinMode(3, INPUT); pinMode(2, OUTPUT); // Right IR LED & Receiver
tone(4, 3000, 1000); // Play tone for 1 second
delay(1000); // Delay to finish tone
servoLeft.attach(13); // Attach left signal to pin 13
servoRight.attach(12); // Attach right signal to pin 12
}
void loop() // Main loop auto-repeats
{
int irLeft = irDetect(9, 10, 38000); // Check for object on left
int irRight = irDetect(2, 3, 38000); // Check for object on right
if((irLeft == 0) && (irRight == 0)) // If both sides detect
{
maneuver(-200, -200, 20); // Backward 20 milliseconds
}
else if(irLeft == 0) // If only left side detects
{
maneuver(200, -200, 20); // Right for 20 ms
}
else if(irRight == 0) // If only right side detects
{
maneuver(-200, 200, 20); // Left for 20 ms
}
else // Otherwise, no IR detects
{
maneuver(200, 200, 20); // Forward 20 ms
}
}
int irDetect(int irLedPin, int irReceiverPin, long frequency)
{
tone(irLedPin, frequency, 8); // IRLED 38 kHz for at least 1 ms
delay(1); // Wait 1 ms
int ir = digitalRead(irReceiverPin); // IR receiver -> ir variable
delay(1); // Down time before recheck
return ir; // Return 1 no detect, 0 detect
}
void maneuver(int speedLeft, int speedRight, int msTime)
{
// speedLeft, speedRight ranges: Backward Linear Stop Linear Forward
// -200 -100......0......100 200
servoLeft.writeMicroseconds(1500 + speedLeft); // Set left servo speed
servoRight.writeMicroseconds(1500 - speedRight); // Set right servo speed
if(msTime==-1) // if msTime = -1
{
servoLeft.detach(); // Stop servo signals
servoRight.detach();
}
delay(msTime); // Delay for msTime
}
9 years ago on Introduction
Can i use bs2 module instead of bs2e? it works the same way ??
12 years ago on Introduction
do you know how much this costs? and were do i get the stuff to build it with?
This is awesome and please answer my questions.
13 years ago on Step 1
This could, thanks to the sonar being used, theoretically be used to map places out, removing the necessity of a manual map-out of areas. This could be implemented in such things as automatic vacuums and such! The robot goes out to map the area, determines the best area covering and sets out on its mission. Coming upon an obstacle, it could update its maps, and hence never need user input!
13 years ago on Introduction
In step 4, what is the VDD voltage needed for the IR Detector?
Reply 13 years ago on Introduction
5v
13 years ago on Introduction
That's a really cute robot. The startup chirp is the best.
13 years ago on Introduction
to make it move faster remove the 100 milisec pause in the ping coding
Reply 13 years ago on Introduction
...and I WOULD, except that that delay is required to wait for the ping sensor to refresh; without it, the sensor would not function properly because it is being polled too often.
13 years ago on Introduction
why does the source code have an error....got error on string when i run it using the Matlab
15 years ago on Introduction
hm... i want to build a robot, aswell but i dont' want to spend much money... so i guess my best bet would be to salvage parts from broken electronics... so where do i start and how much did this project cost you
Reply 15 years ago on Introduction
The whole thing cost me about $210
Reply 14 years ago on Introduction
HEARTATTACK!!!!!!
Reply 13 years ago on Introduction
$999,999,999,999,999,999,999,999,999,999,999,999,999,999,99?
*Grabs chest* UGHHHHHHHHHH... *BANG*
Reply 14 years ago on Introduction
you should try the $50 dollar robot on societyofrobots.com
Reply 15 years ago on Introduction
try this bookmy son found it useful in making robots some out of "found" parts ....motors from broken toys parts from a mouse etc.
14 years ago on Introduction
were do you get the mini bread boards they look really useful or did you jsut but the boe on the robot
Reply 14 years ago on Introduction
I get those at Radioshack.