Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update #1

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 94 additions & 50 deletions BluetoothControlTank.ino
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
/*
L=Left, R=Right, F=Forward, B=Back
0=spot,
2=Left, 3=Right, 1=Forward, 4=Back
5=move forward left, 6=move forward right
7=move backward left, 8=move backward right
*/
#include <Servo.h>
enum { pinLB = 12, pinLF = 3, pinRB = 13, pinRF = 11 };
int delay_time = 300;
int direct = 0;

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 val;

Servo myservo;

void setup()
{
Expand All @@ -16,65 +18,107 @@ void setup()
pinMode(pinLF, OUTPUT); // pin 3 (PWM)
pinMode(pinRB, OUTPUT); // pin 13
pinMode(pinRF, OUTPUT); // pin 11 (PWM)
myservo.attach(9); // Define servo motor output pin to D9 (PWM)
handshake();
}

void loop()
{
if (Serial.available())
{
char val = Serial.read();

switch (val)
{
case '0': stopp(); break;
case '1': forward(); break;
case '4': backward(); break;
case '3': turn_right(); break;
case '2': turn_left(); break;
case '5': forward_left(); break;
case '6': forward_right(); break;
case '7': backward_left(); break;
case '8': backward_right(); break;
}
}
}

void advance() // move forward
void set(bool LB, bool RB, int LF, int RF)
{
digitalWrite(pinLB, LOW); // right wheel moves forward
digitalWrite(pinRB, LOW); // left wheel moves forward
analogWrite(pinLF, 255);
analogWrite(pinRF, 255);
digitalWrite(pinLB, LB);
digitalWrite(pinRB, RB);
analogWrite(pinLF, LF);
analogWrite(pinRF, RF);
}

void stopp() // stop
{
digitalWrite(pinLB, HIGH);
digitalWrite(pinRB, HIGH);
analogWrite(pinLF, 0);
analogWrite(pinRF, 0);
direct = 0;
set(HIGH, HIGH, 0, 0);
}
void right() // turn right (single wheel)
void forward()
{
digitalWrite(pinLB, LOW); // left wheel moves forward
digitalWrite(pinRB, HIGH); // right wheel moves backward
analogWrite(pinLF, 255);
analogWrite(pinRF, 255);
direct = 1;
set(LOW, LOW, 255, 255);
}
void left() // turn left (single wheel)
void backward()
{
digitalWrite(pinLB, HIGH); // left wheel moves forward
digitalWrite(pinRB, LOW); // right wheel moves backward
analogWrite(pinLF, 255);
analogWrite(pinRF, 255);
direct = -1;
set(HIGH, HIGH, 255, 255);
}
void back() // move backward
void turn_right()
{
digitalWrite(pinLB, HIGH); // motor moves to left rear
digitalWrite(pinRB, HIGH); // motor moves to right rear
analogWrite(pinLF, 255);
analogWrite(pinRF, 255);
set(LOW, HIGH, 255, 255);
delay(delay_time);
stopp();
}

void loop()
void turn_left()
{
val = Serial.read();
if (val == 'f') {
advance();
}
if (val == 'b') {
back();
}
if (val == 'l') {
left();
delay(600);
stopp();
}
if (val == 'r') {
right();
delay(600);
set(HIGH, LOW, 255, 255);
delay(delay_time);
stopp();
}
void backward_left()
{
set(HIGH, LOW, 255, 0);
delay(delay_time);
stopp();
}
void backward_right()
{
set(LOW, HIGH, 0, 255);
delay(delay_time);
stopp();
}
void forward_left()
{
set(LOW, HIGH, 255, 0);
myservo.write(45);
delay(delay_time);
if (direct == 1)
forward();
else
stopp();
}
if ( val == 's') {
myservo.write(90);
}
void forward_right()
{
set(HIGH, LOW, 0, 255);
myservo.write(180-45);
delay(delay_time);
if (direct == 1)
forward();
else
stopp();
}
myservo.write(90);
}
void handshake()
{
myservo.write(45);
delay(delay_time);
myservo.write(135);
delay(delay_time);
myservo.write(90);
}

145 changes: 145 additions & 0 deletions BluetoothControlTank2.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
/*
0=spot,
2=Left, 3=Right, 1=Forward, 4=Back
5=move forward left, 6=move forward right
7=move backward left, 8=move backward right
*/
#include <Servo.h>
enum { pinLB = 12, pinLF = 3, pinRB = 13, pinRF = 11 };
int inputPin = 4; // define pin for sensor echo
int outputPin = 5; // define pin for sensor trig
int delay_time_ = 300;
int direct_ = 0; // forward=1 backward=-1 stop=0
int distance_ = 0; // forward speed

Servo myservo;

void setup()
{
Serial.begin(9600); // define pin for motor output
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)
handshake();
}

void loop()
{
if (Serial.available())
{
char val = Serial.read();

switch (val)
{
case '0': stopp(); break;
case '1': forward(); break;
case '4': backward(); break;
case '3': turn_right(); break;
case '2': turn_left(); break;
case '5': forward_left(); break;
case '6': forward_right(); break;
case '7': backward_left(); break;
case '8': backward_right(); break;
}
}
ask_pin_F(); // read the distance ahead
if (distance_ < 15 && direct_ == 1) // if distance ahead is <10cm and moving forvard
{
stopp(); // stop
}
}

void set(bool LB, bool RB, int LF, int RF)
{
digitalWrite(pinLB, LB);
digitalWrite(pinRB, RB);
analogWrite(pinLF, LF);
analogWrite(pinRF, RF);
}

void stopp() // stop
{
direct_ = 0;
set(HIGH, HIGH, 0, 0);
}
void forward()
{
direct_ = 1;
set(LOW, LOW, 255, 255);
}
void backward()
{
direct_ = -1;
set(HIGH, HIGH, 255, 255);
}
void turn_right()
{
set(LOW, HIGH, 255, 255);
delay(delay_time_);
stopp();
}

void turn_left()
{
set(HIGH, LOW, 255, 255);
delay(delay_time_);
stopp();
}
void backward_left()
{
set(HIGH, LOW, 255, 0);
delay(delay_time_);
stopp();
}
void backward_right()
{
set(LOW, HIGH, 0, 255);
delay(delay_time_);
stopp();
}
void forward_left()
{
set(LOW, HIGH, 255, 0);
myservo.write(45);
delay(delay_time_);
if (direct_ == 1)
forward();
else
stopp();
myservo.write(90);
}
void forward_right()
{
set(HIGH, LOW, 0, 255);
myservo.write(180 - 45);
delay(delay_time_);
if (direct_ == 1)
forward();
else
stopp();
myservo.write(90);
}
void handshake()
{
myservo.write(45);
delay(delay_time_);
myservo.write(180 - 45);
delay(delay_time_);
myservo.write(90);
}
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 f_distance = pulseIn(inputPin, HIGH); // read the time in between
distance_ = f_distance / 5.8 / 10; // convert time into distance (unit: cm)
}

Binary file added Bluetooth_Arduino_Tank.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,13 @@
# BluetoothControlTank
Arduino Mini Tank Bluetooth Control

The scatch has been adopted for Android application named Bluetooth Arduino Tank

Keyestudio mini tank | Android application
------------ | -------------
![Keyestudio mini tank](mini_tank.jpg) | ![Android app](Bluetooth_Arduino_Tank.png)

The android application UI provides 9 buttons for control

![](http://cdn.instructables.com/FWS/XCDZ/INS19WM6/FWSXCDZINS19WM6.MEDIUM.jpg)
![](http://cdn.instructables.com/FHL/SD21/INS1A4OE/FHLSD21INS1A4OE.MEDIUM.jpg)

Binary file added mini_tank.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.