This is our first robot project we would like to show. Our plan is that build a robot which can move in a specified environment. The purpose is to make seniors's life easier. The robot has to be able to carry small, important things to a specific points.
It is the first version of the project.
Step 1: Materials
-a chipKit Max32
- a roomba irobot
- a Pmod digital compass HMC5883L
- a PmodWifi MRF24WG0MA
- 4 pieces of PmodMAXSONAR Ultrasonic Range Finder LV-EZ1
- 4 pieces of n channel mosfet
- 8 pieces of 200 Ohm resistor
- some wires to connect the materials
and finally all these things are located in a plastic box on the top of the robot
Step 2: Basic Theory
The robot handle the environment in a Descartes coordinate system. Where the robot is located, this point is the (0,0) point.We imagine a grid mesh to the coordinate system and the robot has to be in the middle of a grid. A grid is 35 cm, which is the robot's diameter. We call a grid as a node. The robot maps his neighbor node and define that is it free or not.If it's free the robot records it and chooses a free node from his environment to move there. This activity continues until there is no enable node. Finally the environment is mapped. We build a database from the nodes. One node contains a pair of (x,y) and the available neighbor nodes. According to the database we can search between any two points the shortest route with heuristic search algorithm (breadth first) and one of them will be the robot's position.
Step 3: ChipKit Module
The chipKit is main the module because it handles the movement of the robot and processes the datas from the sensors. It builds and maintains the database. We need more memory to build the database from nodes, than we actually have. Because of it firstly we overdefined the heap's size.
#define CHANGE_HEAP_SIZE(size) __asm__ volatile ("\t.globl _min_heap_size\n\t.equ _min_heap_size, " #size "\n")
CHANGE_HEAP_SIZE(0x5000); extern __attribute__((section("linker_defined"))) char _heap; extern __attribute__((section("linker_defined"))) char _min_heap_size;
Step 4: Sensors
One sensor's measuring range is 15.24 cm - 6.45 m. We use 4 sensors and if we make them work simultaniously, they will confuse each other. That's why we use N chanel mosfet circuit.
Process of the datareading:
- firstly none of sensor get power because all mosfet are active high.
- one of mosfet set low so the sensor get power
- ping he sensor's RX
- read the data
- mosfet set high
Step 5: Roomba Robot
This is the easiest part of the project. The communication between the robot and the chipKit is a serial communication. This use an RX and a TX pin. There is a battery in the robot. The chipKit get power from the battery. In the picture the highlighted lines show the usable pins. The communication between the robot and the chipKit is asynchronous. The robot can be controled with operation codes. For example if 137 opcode will be wrote with the correct parameters the robot will move. The Roomba library contains these opcodes.
Step 6: Connection of the Modules
The robot's battery is connected to the chipKit's 5 V output. One of the robot's ground is connected the common ground. The 2 serial communication pins are connected to the chipKit: the robot's RX (pin 1) is connected to the chipKit's TX1 (pin 18), and the robot's TX (pin 2) to the chipKit's RX1 (pint 19).
4 MaxSONAR's ground are connected to the common ground. The RX pinss are connected to 82, 79, 76, 73 pins. The PWM pins are connected to 81, 78, 75, 72 pins. The 4 mosfet prove power to the sonars. Throught the MOSFETs we can turn in and off the sonars.
The MOSFETs gate pins are connected to the 11, 8, 5, 2 pins throught 200 Ohms 4 resistors. The mosfets's source are connected to the sonars's 5 V pins and the mosfets's drains connect to the 5 V battery.
The compass has SCL and SDA pins, which connect to the chipKit' SCL and SDA similar pins.