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.

The blueprint

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 future

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.

The future

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.

Stay tuned for Part 2!

Bonus video clip of a US-test: