My latest endeavour is to build an Arduino powered autonomous car. Have been playing around with Arduino, testing different projects and learning the language, and have now decided that this would be a fun and challenging project.
After some research in to what parts other people have used in similar projects I made this layout sketch. The car will be based on a cheap RC-car and the parts will be added to it. Following is an explanation to the keys on the blueprint:
Arduino UNO R3
M-Shield - Two-Channel Motor Driver
BT - Bluetooth Module
M1 - Drive engine
M2 - Steering engine
US1 - Ultrasonic Distance Sensor, Front
US2 - Ultrasonic Distance Sensor, Front-Left
US3 - Ultrasonic Distance Sensor, Front-Right
US4 - Ultrasonic Distance Sensor, Rear
Servo - Rear Scanning Servo
The car will drive forward when US1 isn't detecting any obstacles. When US1 detects an oncoming obstacle the car will slow down(or stop if the obstacle is to close) and US2 and US3 will check if there is possible to turn either way. The direction with the greatest degree of freedom(ie. US2 detects 50cm to closest obstacle and US3 detects 51+cm or no obstacles, then the car will opt to turn right) will be chosen and the car will turn that way. The car will slowly start driving forward until US1 don't detect any obstacle, the steering will then reset and the car can continue forward.
If no direction is deemed to have enough room to turn US4 will check behind the car if it's possible to reverse. If it doesn't find any obstacle the car will start reversing while US2 and US3 scan to see if it finds any free areas to turn into. US4 is mounted on a Servo and if US4 finds an obstacle directly behind the car it will check a 180º area, split into 6 sections, behind the car. For each section US4 will save the distance and after scanning the section with the greatest freedom(if any) will be chosen and the car will slowly start reversing in that direction. I'm not sure how to handle the obstacle detection here but might have US1 checking for obstacles and if non is found the car will stop, reset the steering and start driving forward.
If the car can't find anywhere it can go it will simply stop, might have it checking for an area to free up later on.
I have ordered line-detectors so might add those in the future but don't find any needs for them right now. They can be used to find edges and divider lines in roads so might use them to prevent the car from driving of ledges. The Bluetooth module will be used to send data to a computer mainly for debugging and just for fun, but won't be implemented in the first iteration.