Wifi Controlled Robot is done as a mini project (Lab4) for ECE 4180 class (Georgia Tech). Robot is assembled in Sparkfun's Shadow chasis robot kit. This robot takes the command from the webpage to move forward, reverse without colliding. The distance sensor is used as a mechanism for collision detection and play a short beep sound. It turn 90 degree with magnetometer when the turn command is sent.
Dependencies: Motordriver mbed
Showing the setup and calibration: Part1 In this part the Wifi setups and attains an IP address so we can control it through a webpage on our phone/PC. After it obtains an IP address it calibrates the IMU so we can have accurate compass headings for precise turns.
The parts that we use are as follows:
- Mbed
- 2 DC motors
- H-Bridge (to drive the DC motors)
- Speaker
- Class D Amp (to drive the Speaker)
- IMU (use the magnometer for compass headings)
- Wifi card (ESP8266)
Showing webpage functionality and Robot Functionality: In this part we demonstrate the functionality of the robot and the webpage to control it.
Final Code
[Repository '/teams/Prana-Koirala/code/Wifi_controlled_Robot_ECE4180/docs/tip/main_8cpp_source.html' not found]
Speaker.h
- Committer:
- pkoirala3
- Date:
- 2017-03-13
- Revision:
- 5:e9f1030a5bbb
- Parent:
- 4:166570fa7fda
File content as of revision 5:e9f1030a5bbb:
class Speaker { public: Speaker(PinName pin) : _pin(pin) { // _pin(pin) means pass pin to the Speaker Constructor // precompute 32 sample points on one sine wave cycle // used for continuous sine wave output later for(int k=0; k<32; k++) { Analog_out_data[k] = int (65536.0 * ((1.0 + sin((float(k)/32.0*6.28318530717959)))/2.0)); // scale the sine wave to 16-bits - as needed for AnalogOut write_u16 arg } } // class method to play a note based on AnalogOut class void PlayNote(float frequency, float duration, float volume) { // scale samples using current volume level arg for(int k=0; k<32; k++) { Analog_scaled_data[k] = Analog_out_data[k] * volume; } // reset to start of sample array i=0; // turn on timer interrupts to start sine wave output Sample_Period.attach(this, &Speaker::Sample_timer_interrupt, 1.0/(frequency*32.0)); // play note for specified time wait(duration); // turns off timer interrupts Sample_Period.detach(); // sets output to mid range - analog zero this->_pin.write_u16(32768); } private: // sets up specified pin for analog using AnalogOut class AnalogOut _pin; // set up a timer to be used for sample rate interrupts Ticker Sample_Period; //variables used by interrupt routine and PlayNote volatile int i; short unsigned Analog_out_data[32]; short unsigned Analog_scaled_data[32]; // Interrupt routine // used to output next analog sample whenever a timer interrupt occurs void Sample_timer_interrupt(void) { // send next analog sample out to D to A this->_pin.write_u16(Analog_scaled_data[i]); // increment pointer and wrap around back to 0 at 32 i = (i+1) & 0x01F; } };