Accelerometer Controlled Rover(Wireless)
.
Accelerometer Controlled Rover(Wireless)
by Shubhojit Chattopadhyay & Pratik Chatterjee
Introduction
This Project demonstrates the use of an ADXL 345 Accelerometer to control a robot wirelessly using 2 Xbee Modules. It consists of 2 units: A base unit having the accelerometer, mbed and a xbee module and a remote unit having the robot(controlled by 2 dc motors through 2 H-bridges), mbed and a xbee module. The sampled tilt values of the accelerometer is communicated wirelessly by the xbee module on the base unit and is picked up by the xbee module on the remote unit and is fed to the dc motors to move the robot forward or reverse. We have only considered the movement of the accelerometer in one direction(i.e X axis).
Check at the bottom of this page for links to all the modules used in References.
Image
The remote unit is on the left and the base unit is on the right.
Figures and Connections
Connections between mbed and ADXL345
MBED pins | ADXL 345 pins |
---|---|
Vout | Vcc |
Gnd | Gnd |
p5 | SDA |
p6 | SDO |
p7 | SCL |
p8 | CS |
Connections between mbed and xbee Module
MBED pins | Xbee Module pins |
---|---|
3.3V | Vcc |
serial rx(p10) | Dout |
serial tx(p9) | Din |
Digitalout pin(eg.p11,p8) | RST |
Gnd | Gnd |
Connections between mbed and H-bridge
MBED pins | H-bridge |
---|---|
pwm(p22,23) | PWM |
Digitalout pin(fwd) | INa |
Digitalout pin(rev) | INb |
Code
Base Unit
The base unit consists of a mbed , ADXL345 accelerometer and a xbee module.
//Base Unit containing the accelerometer and the Xbee Module #include "mbed.h" #include "ADXL345.h" ADXL345 accelerometer(p5, p6, p7, p8); Serial pc(USBTX, USBRX); Serial xbee1(p9, p10); DigitalOut rst1(p11); DigitalOut myled(LED3);//Create variable for Led 3 on the mbed int main() { // reset the xbees (at least 200ns) rst1 = 0; // rst2 = 0; wait_ms(1); rst1 = 1; // rst2 = 1; wait_ms(1); int readings[3] = {0, 0, 0}; pc.printf("Starting ADXL345 test...\n"); pc.printf("Device ID is: 0x%02x\n", accelerometer.getDevId()); //Go into standby mode to configure the device. accelerometer.setPowerControl(0x00); //Full resolution, +/-16g, 4mg/LSB. accelerometer.setDataFormatControl(0x0B); //3.2kHz data rate. accelerometer.setDataRate(ADXL345_3200HZ); //Measurement mode. accelerometer.setPowerControl(0x08); while(1) { wait(0.5); accelerometer.getOutput(readings); //13-bit, sign extended values. pc.printf("%f, %f, %f\n\r", (float)readings[0]/65535, (float)readings[1]/65535, (float)readings[2]/65535); if ((float)readings[1]/65535 > 0.5) xbee1.putc('C'); //Forward if ((float)readings[1]/65535 < 0.5) xbee1.putc('D'); //Reverse myled = 1; wait_ms(100); myled=0; wait_ms(100); } }
Import programxbee_base
Code for Base Module
Remote Unit
The Remote unit consists of a mbed ,a xbee module and H-bridge controlled 2 dc motors.
//Robot Unit with the Xbee module #include "mbed.h" #include "Motor.h" Serial xbee2(p9, p10); DigitalOut rst2(p8); Serial pc(USBTX, USBRX); DigitalOut myled2(LED3); DigitalOut myled1(LED4); Motor m1(p23, p11, p12); // pwm, fwd, rev //lEFT MOTOR Motor m2(p22, p14, p15); // pwm, fwd, rev //rIGHT MOTOR Motor m3(p23, p12, p11); // pwm, rev, fwd Motor m4(p22, p15, p14); // pwm, rev, fwd int main() { char temp = '0'; // reset the xbees (at least 200ns) // rst1 = 0; rst2 = 0; wait_ms(1); //rst1 = 1; rst2 = 1; wait_ms(1); for (float s= -1.0; s < 1.0 ; s += 0.01) { while(1) { temp = xbee2.getc(); if(temp == 'C'){ //FORWARD m1.speed(s); m2.speed(s); wait(0.02); } if(temp == 'D'){ //REVERSE m3.speed(s); m4.speed(s); wait(0.02); } myled1 = 1; wait_ms(1); myled1 = 0; myled2 =1; } } }
Import programxbee_robot
Code For the Remote Module
Video
The following video was taken outside the ECE 4180 lab at Georgia Tech.
References
1 comment on Accelerometer Controlled Rover(Wireless):
Please log in to post comments.
what is configuration mode of both xbees?