mm-uav_arm_bluetooth_operation
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
mm-uav_arm_bluetooth_operation [2016/08/02 04:04] – created dongbinkim | mm-uav_arm_bluetooth_operation [2016/10/23 20:22] (current) – dwallace | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | MM-UAV Arm Bluetooth Operation | ||
====== MM-UAV Arm Bluetooth Operation ====== | ====== MM-UAV Arm Bluetooth Operation ====== | ||
- | <!-- Replace the above line with the name of your "How To" Tutorial e.g. How to Laser cut Your Name in Wood --> | + | **Author:** Dongbin Kim Email: < |
- | + | ||
- | <!-- Everywhere you see <some sentence>, | + | |
- | + | ||
- | **Author: | + | |
\\ | \\ | ||
- | **Date:** Last modified on <08/01/16> | + | **Date:** Last modified on 08/01/16 |
\\ | \\ | ||
- | **Keywords: | + | **Keywords: |
\\ | \\ | ||
- | <!-- Add a representative photo of your tutorial below. | + | {{:bluetooth_operation_2_.jpg? |
- | + | ||
- | {{:mm-uav_danko_arm.jpg?300|}} | + | |
\\ | \\ | ||
The photo above depicts MM-UAV arm bluetooth operation which allows you to manipulate the arm that you built up before this section via bluetooth. The big picture problem is that you can't control wirelessly with Pololu maestro servo controller. Solving this partially or completely is important because you will be able to control the arm to the direction that you want at a specific time. This tutorial shows you how to build it up with Arduino and takes approximately 2 hours to complete. | The photo above depicts MM-UAV arm bluetooth operation which allows you to manipulate the arm that you built up before this section via bluetooth. The big picture problem is that you can't control wirelessly with Pololu maestro servo controller. Solving this partially or completely is important because you will be able to control the arm to the direction that you want at a specific time. This tutorial shows you how to build it up with Arduino and takes approximately 2 hours to complete. | ||
Line 23: | Line 16: | ||
<fc blue> | <fc blue> | ||
- | * Know how to write down Arduino sketch | + | * Know how to write down Arduino sketch, Serial communication |
\\ | \\ | ||
- | * Perhaps also know how to understand | + | * Perhaps also know how to understand |
\\ | \\ | ||
* Perhaps additional background needed may include basic electrical engineering knowledge | * Perhaps additional background needed may include basic electrical engineering knowledge | ||
Line 32: | Line 25: | ||
\\ | \\ | ||
The rest of this tutorial is presented as follows: | The rest of this tutorial is presented as follows: | ||
- | * [[tutorialTemplate# | + | * [[mm-uav_arm_bluetooth_operation# |
- | * [[tutorialTemplate# | + | * [[mm-uav_arm_bluetooth_operation# |
- | * Programming <!- delete this line if not applicable -> | + | |
* Final Words | * Final Words | ||
Line 41: | Line 33: | ||
US-based vendors to obtain material to complete this tutorial include Amazon.com. | US-based vendors to obtain material to complete this tutorial include Amazon.com. | ||
\\ | \\ | ||
- | To complete this tutorial, you'll need the following items. But I omitted the items from MM-UAV arm assembly because this page is to learn how to manipulate the arm wirelessly. | + | To complete this tutorial, you'll need the following items. But I omitted the items from MM-UAV arm assembly because this page is to learn how to manipulate the arm wirelessly. |
- | + | ||
- | <!-- Alternatively create: (1) a Google XLS document that's publicly viewable and provide link; and (2) a PDF version of the Google XLS, store the PDF file in your site, and provide link to it --> | + | |
\\ | \\ | ||
Line 58: | Line 47: | ||
\\ | \\ | ||
<!-- Replace the URL below for your Google doc --> | <!-- Replace the URL below for your Google doc --> | ||
- | Here is the [[https:// | + | Here is the [[https:// |
- | \\ | + | |
- | <!-- Replace the filename with your PDF that you uploaded to your DASL Wiki tutorial page --> | + | |
- | Here is the {{: | + | |
\\ | \\ | ||
==== Construction ==== | ==== Construction ==== | ||
- | This section gives step-by-step instructions along with photos to <fill in the blank>. (If a circuit-building tutorial:) A schematic to construct <fill in the blank> is shown here <add image>. <Add hyperlink to PDF of schematic> | + | This section gives step-by-step instructions along with photos to build up MM-UAV arm wireless operation |
\\ | \\ | ||
\\ | \\ | ||
- | **Step 1** | + | **Step 1. Connect Servo motors, Arduino, Breadboard, Battery** |
\\ | \\ | ||
\\ | \\ | ||
- | <Add photos to make step easier to understand> | + | {{: |
\\ | \\ | ||
+ | Arduino Uno only supplies 6 PWM control pins(3, | ||
\\ | \\ | ||
- | **Step 2** | ||
\\ | \\ | ||
+ | **Step 2. Bluetooth installation** | ||
\\ | \\ | ||
- | < | ||
\\ | \\ | ||
- | ==== Programming | + | {{: |
+ | \\ | ||
+ | Bluetooth operation is working much, much better in Android enviorment. Please download ' | ||
+ | \\ | ||
+ | \\ | ||
+ | {{: | ||
+ | \\ | ||
+ | Click 'Set Keys' button and set up the button. 'Data of Key' stands for a data that the app will send Serial communication to Arduino. Make sure you write the same data as in Arduino sketch which is on the next section. | ||
+ | \\ | ||
+ | \\ | ||
+ | **Step 3. Arduino Sketch** | ||
+ | \\ | ||
+ | \\ | ||
+ | Please refer the **Programming** section to Sketch Arduino. If you understand Cpp language, you can easily understand the algorithms. When you are done building up Arduino Sketch, Compile the code and upload on Arduino. | ||
- | A link to the source code can be found <provide URL to your code, probably saved in this DASL Wiki>. | + | **WARNING** - When you upload |
\\ | \\ | ||
- | The goal of the code is <brief explanation> | ||
\\ | \\ | ||
- | ---- | + | **Step 4. Bluetooth Settings** |
- | <!- Insert a snippet of your code here. Try to keep to less than 0.5 page long --> | + | |
- | ---- | + | |
\\ | \\ | ||
- | The snippet above serves | + | \\ |
+ | {{: | ||
+ | \\ | ||
+ | \\ | ||
+ | To set up the bluetooth for yours, you should know how to run AT(Attention) commands. AT commands help you check if bluetooth is connected or not, and help you change name, password, baud rate. The followings are basic AT commands language. | ||
+ | When you type the word at Sent on Serial display, you must check whether you have seen the received word. | ||
+ | |||
+ | 1. Communications Test : | ||
+ | *Sent : AT | ||
+ | *receive : OK | ||
+ | |||
+ | 2. Change baud rate : | ||
+ | *Sent : AT+BAUD1 | ||
+ | *receive : OK1200 | ||
+ | |||
+ | *Sent : AT+BAUD2 | ||
+ | *receive : OK2400 | ||
+ | |||
+ | 1 : 1200 | ||
+ | |||
+ | 2 : 2400 | ||
+ | |||
+ | 3 : 4800 | ||
+ | |||
+ | 4 : 9600 | ||
+ | |||
+ | 5 : 19200 | ||
+ | |||
+ | 6 : 38400 | ||
+ | |||
+ | 7 : 57600 | ||
+ | |||
+ | 8 : 115200 | ||
+ | |||
+ | Baud rate setting can be save even power down. | ||
+ | |||
+ | 3. Change Bluetooth device name: | ||
+ | *Sent : AT+NAMEdevicename | ||
+ | *receive : OKname | ||
+ | (devicename is the name you want the device | ||
+ | Name setting can be save even power down. | ||
+ | |||
+ | 4. Change Pincode: | ||
+ | *Sent : AT+PINxxxx | ||
+ | *receive : OKsetpin | ||
+ | (xxxx is the pin code you set) | ||
+ | Pin code can be save even power down. | ||
+ | \\ | ||
+ | \\ | ||
+ | **Step 5. Bluetooth Operation** | ||
+ | \\ | ||
+ | \\ | ||
+ | {{: | ||
+ | \\ | ||
+ | Once you are done setting up through AT Commands, Connect the power to Arduino and Motors. Then, click ' | ||
+ | GOOD LUCK! | ||
+ | \\ | ||
+ | \\ | ||
+ | ==== Programming ==== | ||
+ | |||
+ | \\ | ||
+ | The goal of the code is to manipulate MM-UAV with bluetooth. | ||
\\ | \\ | ||
---- | ---- | ||
- | <!- Insert another snippet of your code here. | + | < |
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | int tx = 2; //input | ||
+ | int rx = 4; //output | ||
+ | int servopin1 = 5; //motor pin no.1 | ||
+ | int servopin2 = 6; //motor pin no.2 | ||
+ | int servopin3 = 3; //motor pin no.3 | ||
+ | int servopin4 = 11; //motor pin no.4 | ||
+ | String myString = ""; | ||
+ | int ini1 = 120; //motor1 starting point | ||
+ | int ini2 = 45; //motor2 starting point | ||
+ | int ini3 = 20; //motor3 starting point | ||
+ | int ini4 = 60; //motor4 starting point | ||
+ | int angle1, angle2, angle3, angle4; | ||
+ | int pos1, pos2, pos3, pos4; | ||
+ | int goal1, goal2, goal3, goal4; | ||
+ | int dly = 120; //motor speed | ||
+ | |||
+ | |||
+ | Servo servo1; // | ||
+ | Servo servo2; | ||
+ | Servo servo3; | ||
+ | Servo servo4; | ||
+ | |||
+ | |||
+ | SoftwareSerial bluetooth(tx, | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | delay(100); | ||
+ | bluetooth.begin(9600); | ||
+ | servo1.attach(servopin1); | ||
+ | servo2.attach(servopin2); | ||
+ | servo3.attach(servopin3); | ||
+ | servo4.attach(servopin4); | ||
+ | servo1.write(ini1 - 35); // 0 deg to 90 deg on Motor 1 is 120 deg to 30 deg | ||
+ | servo2.write(ini2 + 35); // 0 deg to 90 deg on Motor 2 is 45 deg to 135 deg | ||
+ | servo3.write(ini3 + 35); // 0 deg to 90 deg on Motor 3 is 20 deg to 110 deg | ||
+ | servo4.write(ini4 + 35); // 0 deg to 90 deg on Motor 4 is 60 deg to 150 deg | ||
+ | //start degree is 35 degree | ||
+ | } | ||
+ | |||
+ | |||
+ | void loop() { | ||
+ | while (bluetooth.available()) | ||
+ | { | ||
+ | char myChar = (char)bluetooth.read(); | ||
+ | myString += myChar; | ||
+ | delay(5); | ||
+ | } | ||
+ | |||
+ | if (!myString.equals("" | ||
+ | { | ||
+ | Serial.println(" | ||
+ | |||
+ | if (myString == " | ||
+ | { | ||
+ | int pos1 = servo1.read(); | ||
+ | int pos2 = servo2.read(); | ||
+ | int pos3 = servo3.read(); | ||
+ | int pos4 = servo4.read(); | ||
+ | int goal1 = 5; //all motor moves 5 degrees, if you make this number bigger, it moves bigger | ||
+ | delay(dly); | ||
+ | for (angle1 = 0; angle1 <= goal1; angle1 += 1) | ||
+ | { | ||
+ | servo1.write(pos1 | ||
+ | servo2.write(pos2 + angle1); | ||
+ | servo3.write(pos3 + angle1); | ||
+ | servo4.write(pos4 + angle1); //all motor moves 5 degrees downward | ||
+ | delay(dly); | ||
+ | } | ||
+ | } else if (myString == " | ||
+ | |||
+ | int pos1 = servo1.read(); | ||
+ | int pos2 = servo2.read(); | ||
+ | int pos3 = servo3.read(); | ||
+ | int pos4 = servo4.read(); | ||
+ | int goal1 = 5; | ||
+ | delay(dly); | ||
+ | for (angle1 = 0; angle1 <= goal1; angle1 += 1) | ||
+ | { | ||
+ | servo1.write(pos1 + angle1); | ||
+ | servo2.write(pos2 | ||
+ | servo3.write(pos3 - angle1); | ||
+ | servo4.write(pos4 - angle1); //all motor moves 5 degree upward | ||
+ | delay(dly); | ||
+ | } | ||
+ | |||
+ | } else if (myString == " | ||
+ | |||
+ | int pos1 = servo1.read(); | ||
+ | int pos2 = servo2.read(); | ||
+ | int pos3 = servo3.read(); | ||
+ | int pos4 = servo4.read(); | ||
+ | int goal1 = 5; | ||
+ | delay(dly); | ||
+ | for (angle1 = 0; angle1 <= goal1; angle1 += 1) | ||
+ | { | ||
+ | servo1.write(pos1 + angle1); | ||
+ | servo2.write(pos2 + angle1); | ||
+ | servo3.write(pos3 + angle1); | ||
+ | servo4.write(pos4 - angle1); //all motor moves 5 degree forward | ||
+ | delay(dly); | ||
+ | } | ||
+ | |||
+ | } else if (myString == " | ||
+ | |||
+ | int pos1 = servo1.read(); | ||
+ | int pos2 = servo2.read(); | ||
+ | int pos3 = servo3.read(); | ||
+ | int pos4 = servo4.read(); | ||
+ | int goal1 = 5; | ||
+ | delay(dly); | ||
+ | for (angle1 = 0; angle1 <= goal1; angle1 += 1) | ||
+ | { | ||
+ | servo1.write(pos1 - angle1); | ||
+ | servo2.write(pos2 - angle1); | ||
+ | servo3.write(pos3 - angle1); | ||
+ | servo4.write(pos4 + angle1); //all motor moves 5 degree backward | ||
+ | delay(dly); | ||
+ | } | ||
+ | |||
+ | } else if (myString == " | ||
+ | |||
+ | int pos1 = servo1.read(); | ||
+ | int pos2 = servo2.read(); | ||
+ | int pos3 = servo3.read(); | ||
+ | int pos4 = servo4.read(); | ||
+ | int goal1 = 5; | ||
+ | delay(dly); | ||
+ | for (angle1 = 0; angle1 <= goal1; angle1 += 1) | ||
+ | { | ||
+ | servo1.write(pos1 + angle1); | ||
+ | servo2.write(pos2 - angle1); | ||
+ | servo3.write(pos3 + angle1); | ||
+ | servo4.write(pos4 + angle1); //all motor moves 5 degree left | ||
+ | delay(dly); | ||
+ | } | ||
+ | |||
+ | } else if (myString == " | ||
+ | |||
+ | int pos1 = servo1.read(); | ||
+ | int pos2 = servo2.read(); | ||
+ | int pos3 = servo3.read(); | ||
+ | int pos4 = servo4.read(); | ||
+ | int goal1 = 5; | ||
+ | delay(dly); | ||
+ | for (angle1 = 0; angle1 <= goal1; angle1 += 1) | ||
+ | { | ||
+ | servo1.write(pos1 - angle1); | ||
+ | servo2.write(pos2 + angle1); | ||
+ | servo3.write(pos3 - angle1); | ||
+ | servo4.write(pos4 - angle1); //all motor moves 5 degree right | ||
+ | delay(dly); | ||
+ | } | ||
+ | |||
+ | } else if (myString == " | ||
+ | servo1.detach(); | ||
+ | servo2.detach(); | ||
+ | servo3.detach(); | ||
+ | servo4.detach(); | ||
+ | } | ||
+ | myString = ""; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | </code> | ||
---- | ---- | ||
- | Next, the code does <fill in the blank> | ||
- | <!-- Keep entering snippets of code and descriptions until you've given enough for a reader to understand how it works --> | ||
// | // | ||
// | // | ||
==== Final Words ==== | ==== Final Words ==== | ||
- | This tutorial' | + | This tutorial' |
\\ | \\ | ||
\\ | \\ | ||
- | Speculating future work derived from this tutorial, includes | + | Speculating future work derived from this tutorial, includes |
\\ | \\ | ||
\\ | \\ | ||
- | For questions, clarifications, | + | For questions, clarifications, |
mm-uav_arm_bluetooth_operation.1470135897.txt.gz · Last modified: 2016/08/02 04:04 by dongbinkim