Ks0071 keyestudio Mini Tank Robot
keyestudio Mini Tank Robot
Introduction
Mini tank robot is a learning application development system of microcontroller based on Arduino. It has functions such as ultrasonic obstacle avoidance, Bluetooth remotecontrol. This kitcontains many interesting programs. It can also be expanded with external circuit modules to haveother functions. This kit is designed to help you interestingly learn Arduino. You can learn Arduino MCU development ability while having fun.
Parameters
1. Motor parameters: 6V, 150rpm/min
2. Use L298P driver module for motor control.
3. Equipped with Ultrasonic module, can detect whether there are obstacles ahead, and the distance between the Tank robot and the obstacles to realize obstacle avoidance function.
4. Equipped with Bluetooth wireless module, can remotely control the robot after pairing with mobile phone Bluetooth.
5. Can be connected to external 7 ~ 12V power supply; with various sensor modules, it can realize various functions.
Component List
1. keyestudio UNO R3 controller * 1
2. keyestudio L298P shield * 1
3. keyestudio V5 sensor shield * 1
4. HC-SR04 ultrasonic sensor module * 1
5. keyestudio Bluetooth Module (HC-06) * 1
6. Plastic platform (PC) * 1
7. Servo motor * 1
8. Transparent Acrylic board * 1
9. Metal holder * 4
10. Tank driver wheel * 2
11. Tank load-bearing wheel * 2
12. Caterpillar band * 2
13. Metal motor * 2
14. Copper coupler * 2
15. 18650 2-cell battery case * 1
16. USB cable (1m) * 1
17. Copper bush * 2
18. Flange bearing * 4
19. Hexagon copper bush (M3*10MM) * 4
20. Hexagon copper bush (M3*45MM) * 4
21. Round Screw (M3*6MM) * 10
22. Round Screw (M4*35MM) * 4
23. Inner hexagon screw (M3*8MM) * 10
24. Inner hexagon screw (M3*20MM) * 6
25. Inner hexagon screw (M3*25MM) * 6
26. Inner hexagon screw (M4*10MM) * 6
27. Inner hexagon screw (M4*50MM) * 2
28. M3 Nut * 6
29. M4 self-locking nut * 2
30. M4 nut * 15
31. Connector wire (150mm, black) * 2
32. Connector wire (150mm, red) * 2
33. F-F Dupont wire (20CM, 4Pin) * 1
34. Supporting part (27*27*16MM, blue) * 2
35. Winding wire (12CM) * 1
- Self-prepare part
18650 rechargeable battery * 2
18650 charger * 1
Application of Arduino
Introduction
What’s Arduino?
Arduino is an open-source hardware project platform. This platform includes a circuit board with simple I/O function and program development environment software. It can be used to develop interactive products. For example, it can read signals of multiple switches and sensors, and control light, servo motor and other various physical devices. It’s widely applied in robot field.
Arduino installation and program upload:
First, download the Arduino development software, click below hyperlink:
arduino-1.5.6-r2-windows.rar
Downloaded file is a arduino-1.5.6-r2-windows.zip compressed folder, unzip it to your hard drive.
Double click Arduino-1.5.6 .exe. Click “I agree”;
Click “Next”;
And then “Install”;
Wait for the installation to be completed, click close.
Below is how Arduino 1.5.6 looks like.
Next, let’s install Arduino driver.
For different operating system, there may be slight difference in installation method. Below is an example in WIN 7.
When you connect Arduino Uno to your computer the first time, right click “Computer” —> “Properties”—> “Device manager”, you can see “Unknown devices”.
Click “Unknown devices”, select “Update Driver software”.
In this page, click “Browse my computer for driver software”.
Find the “drivers” file.
Click “Next”; select “Install this driver software anyway” to begin the installation.
Installation completed; click “Close”.
After driver is installed, go to “Device manager” again. Right click “Computer” —> “Properties”—> “Device manager”, you can see UNO device as below figure shows, also the Com port info.
Following is a sketch uploading example called “Hello World!”.
First, open Arduino IDE. In this example sketch, we program Arduino to display “Hello World!” in serial monitor when it receives a specific character string “R”; also the on-board D13 LED will blink once each time it receives “R”.
First, set up board; In “Tools”, select “Arduino Uno”.
Next, set up COM port; In “Tools”, select “COM3”.
After selection, you can see indicated area is the same with settings in “Device manager”.
Copy the example sketch and paste it to the IDE; click “Verify ” to check compiling mistakes; click “Upload ” to upload the program to the board.
After uploading is done, open “serial monitor ”; enter “R”; click “Send”, the serial monitor will display “Hello World!” and the D13 LED will blink once.
Congratulations! Your first sketch uploading is a success!
Project Details
Project 1: Ultrasonic Sensor
Introduction
The HC-SR04 Ultrasonic Sensor is a very affordable proximity distance sensor that has been used mainly for object avoidance in various robotics projects. It essentially gives your Arduino eyes spacial awareness and can prevent your robot from crashing or falling off a table. It has also been used in turret applications, water level sensing, and even as a parking sensor. This simple project will use the HC-SR04 sensor with an Arduino and a Processing sketch to provide a neat little interactive display on your computer screen.
Specification
Working Voltage: DC 5V
Working Current: 15mA
Working Frequency: 40Hz
Max Range: 4m
Min Range: 2cm
Measuring Angle: 15 degree
Trigger Input Signal: 10µS TTL pulse
Echo Output Signal Input TTL lever signal and the range in proportion
Connection Diagram
Sample Code
VCC to Arduino 5v
GND to Arduino GND
Echo to Arduino pin 4
Trig to Arduino pin 5
#define echoPin 4 // Echo Pin #define trigPin 5 // Trigger Pin #define LEDPin 13 // Onboard LED int maximumRange = 200; // Maximum range needed int minimumRange = 0; // Minimum range needed long duration, distance; // Duration used to calculate distance void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(LEDPin, OUTPUT); // Use LED indicator (if required) } void loop() { /* The following trigPin/echoPin cycle is used to determine the distance of the nearest object by bouncing soundwaves off of it. */ digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //Calculate the distance (in cm) based on the speed of sound. distance = duration/58.2; if (distance >= maximumRange || distance <= minimumRange){ /* Send a negative number to computer and Turn LED ON to indicate "out of range" */ Serial.println("-1"); digitalWrite(LEDPin, HIGH); } else { /* Send the distance to the computer using Serial protocol, and turn LED OFF to indicate successful reading. */ Serial.println(distance); digitalWrite(LEDPin, LOW); } //Delay 50ms before next reading. delay(50); }
Result
After connection and uploading, when ultrasonic sensor senses obstacle within sensing area, it is measuring the distance between itself and obstacle and the value of distance is displayed on serial monitor as shown in bellow figure.
Project 2: Bluetooth Module
Introduction
This Bluetooth module can easily achieve serial wireless data transmission. Its operating frequency is among the most popular 2.4GHz ISM frequency band (i.e. Industrial, scientific and medical). It adopts Bluetooth 2.1+EDR standard. In Bluetooth 2.1, signal transmit time of different devices stands at a 0.5 seconds interval so that the workload of bluetooth chip can be reduced substantially and more sleeping time can be saved for bluetooth. This module is set with serial interface, which is easy-to-use and simplifying overall design/development cycle.
Specification
Bluetooth Protocol: Bluetooth 2.1+ EDR standard
USB Protocol: USB v1.1/2.0
Operating Frequency: 2.4GHz ISM frequency band
Modulation Mode: Gauss frequency Shift Keying
Transmit Power: ≤ 4dBm, second stage
Sensitivity: ≤-84dBm at 0.1% Bit Error Rate
Transmission Speed: 2.1Mbps(Max)/160 kbps(Asynchronous); 1Mbps/1Mbps(Synchronous)
Safety Feature: Authentication and encryption
Supported Configuration: Bluetooth serial port (major and minor)
Supply Voltage: +3.3 VDC 50mA
Operating Temperature: -20 to 55℃
Sample Code
int val; int ledpin=13; void setup() { Serial.begin(9600); pinMode(ledpin,OUTPUT); } void loop() { val=Serial.read(); if(val=='a') { digitalWrite(ledpin,HIGH); delay(250); digitalWrite(ledpin,LOW); delay(250); Serial.println("keyestudio"); }}
Result
After power-on, power indicator D1 is on, and LED on Bluetooth module is blinking; open Bluetooth on mobile phone, pair them, input 1234, and finish pairing as shown in Figure 1 ; open APP—Bluetooth serial communication assistant, connect it to Bluetooth, select normal mode, complete connection, and LED on Bluetooth module is on as shown in Figure 2; input an “a” in the assistant, and display “keyesdudio” in it as shown in Figure 3.
Project 3: Ultrasonic ranging Tank Robot
Introduction
In project 1, we use the ultrasonic sensor module for the tank to realize obstacle avoidance function. In project 2, we use a HC-06 Bluetooth module for the tank, so the tank can be controlled form a cellphone terminal.
This project is based on project 1 and project 2. Here, we apply echo sounding method for the ranging. The trig end of ultrasonic sensor will launch ultrasonic wave in a specific direction. At the same time, the timer begins to count; when the ultrasonic wave encounters an obstacle, it’s reflected back; when the echo end receives the signal, the timer stops the count. With the traveling speed of the wave and the traveling time, we can calculate the distance between the launching point and the obstacle.
Also,we will use the HC-06 Bluetooth module for the Tank to communicate with the terminal. The tank will send the measured distance to the terminal, so we can see clearly the distance between the tank and the obstacle while the tank is on.
This robot can be used in outdoor exploration or terrain exploration in a confined space.
Schematic and connection diagram
Ultrasonic ranging Tank Robot program
/* L = Left R = Right F = forward B = backward */ #include <Servo.h> int pinLB = 12; // define pin 12 int pinLF = 3; // define pin 3 int pinRB = 13; // define pin 13 int pinRF = 11; // define pin 11 //////////////////////////////// int inputPin = 4; // define pin for sensor echo int outputPin =5; // define pin for sensor trig int Fspeedd = 0; // forward speed int Rspeedd = 0; // right speed int Lspeedd = 0; // left speed int directionn = 0; // forward=8 backward=2 left=4 right=6 Servo myservo; // set myservo int delay_time = 250; // settling time after steering servo motor moving B int Fgo = 8; // Move F int Rgo = 6; // move to the R int Lgo = 4; // move to the L int Bgo = 2; // move B void setup() { Serial.begin(9600); // Define motor output pin pinMode(pinLB,OUTPUT); // pin 12 pinMode(pinLF,OUTPUT); // pin 3 (PWM) pinMode(pinRB,OUTPUT); // pin 13 pinMode(pinRF,OUTPUT); // pin 11 (PWM) pinMode(inputPin, INPUT); // define input pin for sensor pinMode(outputPin, OUTPUT); // define output pin for sensor myservo.attach(9); // Define servo motor output pin to D9 (PWM) } void advance() // move forward { digitalWrite(pinLB,LOW); // right wheel moves forward digitalWrite(pinRB, LOW); // left wheel moves forward analogWrite(pinLF,255); analogWrite(pinRF,255); } void stopp() // stop { digitalWrite(pinLB,HIGH); digitalWrite(pinRB,HIGH); analogWrite(pinLF,0); analogWrite(pinRF,0); } void right() // turn right (single wheel) { digitalWrite(pinLB,HIGH); // wheel on the left moves forward digitalWrite(pinRB,LOW); // wheel on the right moves backward analogWrite(pinLF, 255); analogWrite(pinRF,255); } void left() // turn left (single wheel) { digitalWrite(pinLB,LOW); // wheel on the left moves backward digitalWrite(pinRB,HIGH); // wheel on the right moves forward analogWrite(pinLF, 255); analogWrite(pinRF,255); } void back() // move backward { digitalWrite(pinLB,HIGH); // motor moves to left rear digitalWrite(pinRB,HIGH); // motor moves to right rear analogWrite(pinLF,255); analogWrite(pinRF,255); } void detection() // measure 3 angles (0.90.179) { int delay_time = 250; // stabilizing time for servo motor after moving backward ask_pin_F(); // read the distance ahead if(Fspeedd < 10) // if distance ahead is <10cm { stopp(); // clear data delay(100); back(); // move backward for 0.2S delay(200); } if(Fspeedd < 25) // if distance ahead is <25cm { stopp(); delay(100); // clear data ask_pin_L(); // read distance on the left delay(delay_time); // stabilizing time for servo motor ask_pin_R(); // read distance on the right delay(delay_time); // stabilizing time for servo motor if(Lspeedd > Rspeedd) // if distance on the left is >distance on the right { directionn = Lgo; // move to the L } if(Lspeedd <= Rspeedd) // if distance on the left is <= distance on the right { directionn = Rgo; // move to the right } if (Lspeedd < 10 && Rspeedd < 10) // if distance on left and right are both <10cm { directionn = Bgo; // move backward } } else // if distance ahead is >25cm { directionn = Fgo; // move forward } } void ask_pin_F() // measure the distance ahead { myservo.write(90); digitalWrite(outputPin, LOW); // ultrasonic sensor transmit low level signal 2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // ultrasonic sensor transmit high level signal10μs, at least 10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // keep transmitting low level signal float Fdistance = pulseIn(inputPin, HIGH); // read the time in between Fdistance= Fdistance/5.8/10; // convert time into distance (unit: cm) Fspeedd = Fdistance; // read the distance into Fspeedd Serial.print("Fspeedd = "); Serial.print(Fspeedd ); Serial.println(" cm"); } void ask_pin_L() // measure distance on the left { myservo.write(5); delay(delay_time); digitalWrite(outputPin, LOW); // ultrasonic sensor transmit low level signal 2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // ultrasonic sensor transmit high level signal10μs, at least 10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // keep transmitting low level signal float Ldistance = pulseIn(inputPin, HIGH); // read the time in between Ldistance= Ldistance/5.8/10; // convert time into distance (unit: cm) Lspeedd = Ldistance; // read the distance into Lspeedd Serial.print("Lspeedd = "); Serial.print(Lspeedd ); Serial.print(" cm "); } void ask_pin_R() // measure distance on the right { myservo.write(177); delay(delay_time); digitalWrite(outputPin, LOW); // ultrasonic sensor transmit low level signal 2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // ultrasonic sensor transmit high level signal10μs, at least 10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // keep transmitting low level signal float Rdistance = pulseIn(inputPin, HIGH); // read the time in between Rdistance= Rdistance/5.8/10; // convert time into distance (unit: cm) Rspeedd = Rdistance; // read the distance into Rspeedd Serial.print(" Rspeedd = "); Serial.print(Rspeedd ); Serial.println(" cm"); } void loop() { myservo.write(90); // home set the servo motor, ready for next measurement detection(); // measure the angle and determine which direction to move if(directionn == 2) // if directionn= 2 { back(); delay(800); // go backward left() ; delay(200); // Move slightly to the left (to prevent stuck in dead end) } if(directionn == 6) // if directionn = 6 { back(); delay(100); right(); delay(600); // turn right } if(directionn == 4) // if directionn = 4 { back(); delay(600); left(); delay(600); // turn left } if(directionn == 8) // if directionn = 8 { advance(); // move forward delay(100); } }
Video
Install video:http://www.keyestudio.com/wp/2016/05/ks0071-keyestudio-mini-tank-robot-smart-car/ Demonstration Video:http://www.keyestudio.com/wp/2016/08/ks0071-keyestudio-mini-tank-robot-demonstration-video/