Motor Speed Control With Processing

Screenshot

Arduino Code:

#include 

const char WiFiAPPSK[] = "";
WiFiServer server(80);

#define blueLed 16
#define redLed 2
#define greenLed 0

int red = 0, green = 0, blue = 0;
int pinPWM[4] = {14, 15, 12, 13}; //Define PWM pin
int throttle = 0; 
String strial;
String inString = ""; 
int currentColor = 0;
void setup() {
  Serial.begin(9600);
 analogWriteFreq(20000); 
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(blueLed, OUTPUT);
  
  pinMode(pinPWM[0], OUTPUT);
  pinMode(pinPWM[1], OUTPUT);
  pinMode(pinPWM[2], OUTPUT);
  pinMode(pinPWM[3], OUTPUT);
  
 setupWiFi();

}

void loop() {
WiFiClient client = server.available();
 Serial.println("waiting... ");

  Serial.println(client);
  if (client ) {
    while (client.connected()) {
      while(1){
      if (client.available()) {
   
        int inChar;
        inChar = client.read();

  if (isDigit(inChar)) {
    // convert the incoming byte to a char 
    // and add it to the string:
    inString += (char)inChar; 
  }

   if (inChar == '*') {
    // do something different for each value of currentColor:
    switch (currentColor) {
      case 0:    // 0 = red
        red = inString.toInt();
        // clear the string for new input:
        inString = "";
        break;
      case 1:    // 1 = green:
        green = inString.toInt();
        // clear the string for new input:
        inString = "";
        break;
    }
    currentColor++;
  }
  // if you get a newline, you know you've got
  // the last color, i.e. blue:
  if (inChar == '?') {
    throttle = inString.toInt();
    // clear the string for new input:
    inString = "";
    // reset the color counter:
    currentColor = 0;
  }
    }

  
     analogWrite(pinPWM[0], throttle);
     analogWrite(pinPWM[1], throttle);
     analogWrite(pinPWM[2], throttle);
     analogWrite(pinPWM[3], throttle);

   
    }

   // Serial.println("Client disconnected.");
   // client.stop();
 } 

 }
}


void setupWiFi(){
  WiFi.mode(WIFI_AP);

  // Do a little work to get a unique-ish name. Append the
  // last two bytes of the MAC (HEX'd) to "Thing-":
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.softAPmacAddress(mac);
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  macID.toUpperCase();
  String AP_NameString = "ESPCopter";

  char AP_NameChar[AP_NameString.length() + 1];
  memset(AP_NameChar, 0, AP_NameString.length() + 1);

  for (int i=0; i<AP_NameString.length(); i++)
    AP_NameChar[i] = AP_NameString.charAt(i);

   WiFi.softAP(AP_NameChar, WiFiAPPSK);

   server.begin();
}

Processing Code:

import processing.net.*; 
import controlP5.*;
Client myClient; 
ControlP5 cp5;
Knob myKnobA;
String command= "";

void setup() {
   size(500, 500,P3D);
   background(0);
    myClient = new Client(this, "192.168.4.1", 80); 
   println(myClient.ip());  
     cp5 = new ControlP5(this);
  myKnobA = cp5.addKnob("knobValue")
               .setRange(0,100)
               .setValue(0)
               .setPosition(200,200)
               .setRadius(50)
               .setNumberOfTickMarks(50)
               .setTickMarkLength(4)
               .snapToTickMarks(true)
               .setColorForeground(color(255))
               .setColorBackground(color(0, 160, 100))
               .setColorActive(color(255,255,0))
               .setDragDirection(Knob.HORIZONTAL)
               ;
    
}

 void draw() {

 


 
 }

void knobValue(int theValue) {
  println("a knob event. "+theValue);
  command =  0+ "*" + 0+ "*" + theValue + "?" ;
    myClient.write(command);
 
}

RGB LED Control with Processing

Screenshot

Arduino Code

#include 

const char WiFiAPPSK[] = "";
WiFiServer server(80);

#define blueLed 16
#define redLed 2
#define greenLed 0

int red = 0, green = 0, blue = 0;

String strial;
String inString = ""; 
int currentColor = 0;
void setup() {
  Serial.begin(9600);

  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(blueLed, OUTPUT);

  
 setupWiFi();

}

void loop() {
WiFiClient client = server.available();
 Serial.println("waiting... ");

  Serial.println(client);
  if (client ) {
    while (client.connected()) {
      while(1){
      if (client.available()) {
   
        int inChar;
        inChar = client.read();


     if (isDigit(inChar)) {
    // convert the incoming byte to a char 
    // and add it to the string:
    inString += (char)inChar; 
  }

   if (inChar == '*') {
    // do something different for each value of currentColor:
    switch (currentColor) {
      case 0:    // 0 = red
        red = 4*inString.toInt();
        // clear the string for new input:
        inString = "";
        break;
      case 1:    // 1 = green:
        green = 4*inString.toInt();
        // clear the string for new input:
        inString = "";
        break;
    }
    currentColor++;
  }
  // if you get a newline, you know you've got
  // the last color, i.e. blue:
  if (inChar == '?') {
    blue = 4*inString.toInt();
    // clear the string for new input:
    inString = "";
    // reset the color counter:
    currentColor = 0;
  }
    }

   analogWrite(blueLed,PWMRANGE-blue);
  analogWrite(redLed, PWMRANGE-red);
  analogWrite(greenLed, green); 
  
    }

   // Serial.println("Client disconnected.");
   // client.stop();
 } 

 }
}


void setupWiFi(){
  WiFi.mode(WIFI_AP);

  // Do a little work to get a unique-ish name. Append the
  // last two bytes of the MAC (HEX'd) to "Thing-":
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.softAPmacAddress(mac);
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  macID.toUpperCase();
  String AP_NameString = "ESPCopter";

  char AP_NameChar[AP_NameString.length() + 1];
  memset(AP_NameChar, 0, AP_NameString.length() + 1);

  for (int i=0; i<AP_NameString.length(); i++)
    AP_NameChar[i] = AP_NameString.charAt(i);

   WiFi.softAP(AP_NameChar, WiFiAPPSK);

   server.begin();
}

Processing Code

import processing.net.*; 
import controlP5.*;
Client myClient; 
ControlP5 cp5;

String command= "";

void setup() {
   size(500, 500,P3D);
   background(0);
    myClient = new Client(this, "192.168.4.1", 80); 
   println(myClient.ip());  
   
  cp5 = new ControlP5(this);
  cp5.addColorWheel("colorWheel", 125 , 125 , 225 ).setRGB(color(128,0,255));
  noStroke();
    
}

 void draw() {

   command =  cp5.get(ColorWheel.class,"colorWheel").b() + "*" + cp5.get(ColorWheel.class,"colorWheel").g() + "*" +cp5.get(ColorWheel.class,"colorWheel").r() + "?" ;


 
 }
 void colorWheel(int theValue) {
 println("from client: " + command);
 myClient.write(command);

}
 

Button Control with Processing

Screenshot

Arduino Code:

 

#include 

const char WiFiAPPSK[] = "";
WiFiServer server(80);

#define blueLed 16
#define redLed 2
#define greenLed 0


void setup() {
  Serial.begin(9600);

  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(blueLed, OUTPUT);

  
 setupWiFi();

}

void loop() {
WiFiClient client = server.available();
 Serial.println("waiting... ");

  Serial.println(client);
  if (client ) {
    while (client.connected()) {
      while(1){
      if (client.available()) {
   
        int inChar;
        inChar = client.read();
        Serial.println(inChar);
         switch (inChar) {
         case 'A':
         analogWrite(blueLed,0);
         break;
         case 'a':
         analogWrite(blueLed,PWMRANGE);
         break;
         case 'B':
         analogWrite(redLed, PWMRANGE);
         break;
         case 'b':
         analogWrite(redLed, 0);
         break;
         case 'C':
         analogWrite(greenLed, PWMRANGE); 
         break;
         case 'c':
         analogWrite(greenLed, 0); 
         break;
      } 
    }
    }

   // Serial.println("Client disconnected.");
   // client.stop();
 } 

 }
}




void setupWiFi(){
  WiFi.mode(WIFI_AP);

  // Do a little work to get a unique-ish name. Append the
  // last two bytes of the MAC (HEX'd) to "Thing-":
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.softAPmacAddress(mac);
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  macID.toUpperCase();
  String AP_NameString = "ESPCopter";

  char AP_NameChar[AP_NameString.length() + 1];
  memset(AP_NameChar, 0, AP_NameString.length() + 1);

  for (int i=0; i<AP_NameString.length(); i++)
    AP_NameChar[i] = AP_NameString.charAt(i);

   WiFi.softAP(AP_NameChar, WiFiAPPSK);

   server.begin();
}

 

 

Processing Code:

import processing.net.*;
import controlP5.*;
Client myClient;
ControlP5 cp5;
String command= "";
int c1,c2;
void setup() {
size(400, 300,P3D);
background(0);
myClient = new Client(this, "192.168.4.1", 80);
println(myClient.ip());

cp5 = new ControlP5(this);

cp5.addToggle("colorA")
.setPosition(150,100)
.setSize(50,20)
.setValue(false)
.setMode(ControlP5.SWITCH)
;

cp5.addToggle("colorB")
.setPosition(150,150)
.setSize(50,20)
.setValue(false)
.setMode(ControlP5.SWITCH)
;

cp5.addToggle("colorC")
.setPosition(150,200)
.setSize(50,20)
.setValue(false)
.setMode(ControlP5.SWITCH)
;

}

void draw() {

}

// function colorA will receive changes from
// controller with name colorA
void colorA(boolean theFlag) {
println("a button event from colorA: "+theFlag);
background(0,255,0);
if(theFlag == true){
command = "A";
} else {
command = "a";
}

myClient.write(command);
}

// function colorB will receive changes from
// controller with name colorB
void colorB(boolean theFlag) {
println("a button event from colorB: "+theFlag);
background(0,0,255);
if(theFlag == true){
command = "B";
} else {
command = "b";
}
myClient.write(command);
}

// function colorC will receive changes from
// controller with name colorC
void colorC(boolean theFlag) {
println("a button event from colorC: "+theFlag);
background(255,0,0);
if(theFlag == true){
command = "C";
} else {
command = "c";
}

myClient.write(command);
}

Fly ESPcopter with phone, or any touch screen devices

In this post, we are uploading flying code to ESPcopter.  In order to upload fling code it is necessary to follow 5 simple steps:

 

1-) Download a flasher app

Download Flasher

2-) Download a Lastest flying code

Flying Code V.1.1

3-) Download a USB Driver

 

You may need to install Espcopter driver for your computer to recognize to your espcopter.

Download USB Driver

2-) Open the Flaher app

After unzipping your files which are code and flasher open the following app: nodemcu-flasher-master\Win64\Release klosürü içinde ESP8266Flasher.exe.

3-) Connect your ESPcopter to computer

You will see your drone as a comX port.

Begin program

4-) Write your code address

Write your code address link to the first row in Confing.

4-) Upload the code

To upload the code click the flash bottom.

Programming

Program success.

Program success

 

Lets Fly ESPcopter

1-) Connect your device to ESPcopter

WIFI_SSID “ESPcopter”
WIFI_PASSWORD “12345678”

2-) Open the web browser

Search  192.168.4.1 in your web browser. You will see control interface.

 

 

First Button : ARM – DISARM

Second Button: AUTO YAW CONTROL

Third Button: AUTO ALTİTUDE CONTROL

Forth Button: AUTO MISSION CONTROL

Have a nice flight


Getting Started with RemoteXY

In order to create a complete application with RemoteXY it is necessary to follow 5 simple steps::

Step #1 : Dowland RemoteXY Library

Download the library RemoteXY by link.The link will download a ZIP archive of the library of the latest version.

To install the library in the Arduino IDE, you must go to menu " Sketch/Import library.../Add library.... In the open file window, select the file, select the downloaded ZIP archive library RemoteXY.

After you have installed the library, you can check, how it works. For this you will need to open one of the examples, compile it, and upload it to the Arduino. In order to open the example, select File/Examples/RemoteXY/ and then one of the examples.

 

Step #2 : Graphical Interface

Building a graphical interface with a simple drag&drop editor available here

Step #3: Source Code Configuration

Configure and generate the sketch source code to be uploaded on the control board  (ESP8266, Arduino)

Step #4: Upload Sketch

Compile and upload of the generated sketch on the control board (ESP8266,Arduino) through the Arduino IDE (or other supported IDE).

Let's now download the RemoteXY library and install it on Arduino IDE through the proper menu.
The download the source code
As we can see in the generated code some information from the previous config phase are present:
  • SSID of AP WiFI
  • Listening port
The RemoteXY_CONF[] section contains a description of the graphic interface. It will be transfer to the requesting mobile app once a connection with the nodeMCU is established.

Step #5: Download Mobile App

Download the mobile app and install it on your client device (iOS, Android)

Now on your mobile device (smartphone o tablet) join the new WiFi network called ESPcopter.
 
 
It is now time to run the RemoteXY app on mobile and then click on the top tight + sign
Now select the WiFi point option

Now press the Connect button and the app will connect to the nodeMCU and it will download the GUI description

Now you are all set to remotely control the ESPcopter.

MPU9250

#include <Wire.h>

#define MPU9250_ADDRESS 0x68
#define MAG_ADDRESS 0x0C

#define GYRO_FULL_SCALE_250_DPS 0x00
#define GYRO_FULL_SCALE_500_DPS 0x08
#define GYRO_FULL_SCALE_1000_DPS 0x10
#define GYRO_FULL_SCALE_2000_DPS 0x18

#define ACC_FULL_SCALE_2_G 0x00
#define ACC_FULL_SCALE_4_G 0x08
#define ACC_FULL_SCALE_8_G 0x10
#define ACC_FULL_SCALE_16_G 0x18

 

// This function read Nbytes bytes from I2C device at address Address.
// Put read bytes starting at register Register in the Data array.

uint8_t ST1;
int16_t mag_int[3] = {0};

void writeBIT(int addr, int data, int adrrTrans){
Wire.beginTransmission(adrrTrans);
Wire.write(addr);
Wire.write(data);
Wire.endTransmission();
}
void I2Cread(uint8_t Address, uint8_t Register, uint8_t Nbytes, uint8_t* Data){
// Set register address
Wire.beginTransmission(Address);
Wire.write(Register);
Wire.endTransmission();
// Read Nbytes
Wire.requestFrom(Address, Nbytes);
uint8_t index=0;
while (Wire.available())
Data[index++]=Wire.read();
}

 

// Initializations
void setup()
{
// Arduino initializations
Wire.begin();
Serial.begin(115200);

Wire.setClock(400000L);
// Set accelerometers low pass filter at 5Hz
writeBIT(29, 0x06,MPU9250_ADDRESS);
// Set gyroscope low pass filter at 5Hz
writeBIT(26, 0x06,MPU9250_ADDRESS);
// Configure gyroscope range
writeBIT(27, GYRO_FULL_SCALE_2000_DPS,MPU9250_ADDRESS);
// Configure accelerometers range
writeBIT(28, ACC_FULL_SCALE_2_G,MPU9250_ADDRESS);
// Set by pass mode for the magnetometers
writeBIT(0x37, 0x02,MPU9250_ADDRESS);
// Request continuous magnetometer measurements in 16 bits
//writeBIT(0x0A, 0x16,MAG_ADDRESS);
delay(200);
// writeBIT(0x0A, mRes << 4 | 0x06 ,MAG_ADDRESS);

writeBIT(0x0A, 0x00 , MAG_ADDRESS); // Power down magnetometer
delay(20);
writeBIT(0x0A , 0x0F, MAG_ADDRESS); // Enter Fuse ROM access mode
delay(20);

 

}

 

 

// Main loop, read and display data
void loop()
{

// _______________
// ::: Counter :::

// Display data counter
// Serial.print (cpt++,DEC);
// Serial.print (“\t”);

// ____________________________________
// ::: accelerometer and gyroscope :::

// Read accelerometer and gyroscope
uint8_t Buf[14];
int16_t accel[3] = {0}, gyro_int[3] = {0}, MEAN_GYRO[3] = {0};;

I2Cread(MPU9250_ADDRESS,0x3B,14,Buf);

accel[0]=(Buf[0]<<8 | Buf[1]);
accel[1]=(Buf[2]<<8 | Buf[3]);
accel[2]=Buf[4]<<8 | Buf[5];

// Gyroscope
gyro_int[0]=(Buf[8]<<8 | Buf[9]) – MEAN_GYRO[0];
gyro_int[1]=(Buf[10]<<8 | Buf[11]) – MEAN_GYRO[1];
gyro_int[2]=Buf[12]<<8 | Buf[13] – MEAN_GYRO[2];

// Display values

// Accelerometer
Serial.print (accel[0],DEC);
Serial.print (“\t”);
Serial.print (accel[1],DEC);
Serial.print (“\t”);
Serial.print (accel[2],DEC);
Serial.print (“\t”);

// Gyroscope
Serial.print (gyro_int[0],DEC);
Serial.print (“\t”);
Serial.print (gyro_int[1],DEC);
Serial.print (“\t”);
Serial.print (gyro_int[2],DEC);
Serial.println(“\t”);

}


Genel Bakış

1.1-) ESPcopter’in Dahili Özellikleri:

1.2-) ESPcopter Düğme ve Buton

 

1.2-)Pin Çıkışları ve Pervane yönleri

Pervaneler üzerinde bulunan harflere göre takılırken motorlar kablo renklerine göre takılmalıdır.

Motor konumları:

Sağ Ön: A – Siyah, Beyaz – Sol Ön: B – Kırmızı, Mavi

Sağ Arka: B – Kırmızı, Mavi – Sol Arka: A – Siyah, Beyaz

 


Kontrol Listesi

Merhabalar,

Eğer drone ile iligli bir parçanın çalışmadığını düşünüyorsanız. Bu yazıda ki adımları takip ederek sorunu bulabilir ve düzeltilmesi için bizim ile iletişime geçebilirsiniz.

1-) Şarj devresi

İlk olarak ESPcopter’i alt tarafında bulunan düğmeyi kullanarak kapalı konuma getiriniz. Daha sonra USB kablo ile ESPcopter’i bilgisayara bağlayınız. Eğer kırmızı ışık yanmıyor ise batarya şarj olmuyor demektir. Bu sorun büyük bir olasıkla kullandığınız USB kablodan kaynaklanmadır. Bazı kalitesiz USB kablolarda temazsızlık olabilmektedir. Başka USB kablo kullarak tekrardan deneyiniz.

2-) Kod yükleme devresi

İlk olarak eğitimler sayfamızda bulunan  Arduino Nasıl Yüklenir ve Kod Nasıl Yüklenir  yazılarında anlatılan adımları yapmanız gerekmektedir. Bu kurulumları yaptıkran sonra şarjı dolu olduğunu düşündüğünüz ESPcopter açık konuma getirin ve USB kablo ile bilgisayarınıza bağlanıyız. Eğer arduino ile ilgili bir problem yaşarsanız ESPcopter Forum sayfasından destek alabilirsiniz.

Kod yükleme devresini kontrol etmenin bir diğer yolu ise Uçuş kodu yükle yazısında anlatılan yolları izlemektir.

3-)Uçuş testi:

Uçuş kodunu yükledikten sonra ESPcopter’i açınız ve motorlara çok az miktarda güç vererek motorların verdiği tepkiyi izleyiniz eğer drone’nun yer ile olan açısına göre motor hızlarında değişme olmuyorsa. Mail adresimiz üzerinden bizim ile iletişime geçebilirsiniz.

4-) Bütün testler başarılı fakat hala ESPcopter’i uçuramıyorsanız.

  • Motor pervanelerini kontrol ediniz. Düşmeden dolayı bir bozulma veya bükülme varsa titreşim oluşturacağı için drone uçmayacaktır.
  • Motorlar pervaneleri korumalıklara sürtüyor olabilir. Drone kapalı konumda pervaneleri eliniz ile çevirerek kontrol ediniz. Eğer dönmesinde bir farklılık olan bir pervane olan varsa pervane değişikliği yapınız.
  • Motor ile pervane arasına kıl,ip gibi motorların dönüşünü engelleyen meteryaller takılmış olabilir. Yine drone kapalı konumda pervaneleri eliniz ile çevirerek kontrol ediniz. Eğer dönmesinde bir farklılık olan bir pervane olan varsa pervane değişikliği yapınız.


Buy A ESPcopter: 

Buy A ESPcopter:

65$ + 9$ worldwide shipping

 

[wpecpp name=”One unit ESPcopter” price=”74″ align=”left”]

Learn Robotics By Making and Programming Your Own Drones

 

 

Specifications:

  • Small and lightweight, around 35g and about 90mm motor to motor Flight time up to 7 minutes with standard 240mAh Li-Po battery
  • Standard micro-USB connector for charging which takes ~25min for the stock 260mAh Li-Po battery
  •  On-board low-energy [email protected] based on the ESP8266-12E. Powerful 32-bit RISC CPU: Tensilica Xtensa LX106 running at 160 MHz (64kb flash, 96kb RAM) IEEE 802.11 b/g/n Wi-Fi connection
  • MPU9250 9-DOF 3-Axis Accelerometer, 3-Axis Gyro, & 3-Axis Magnetometer
  • Expansion header 2×6 pins 2.54mm pitch including power, GPIO I2C, and UART.

Box Content

  • 1 Piece Drone.
  • 1 Piece 240mAh Li-Po battery.
  • 1 Piece propeller protector.
  • 1 Piece battery  holder shield
  • 1 Piece Solder   shield
  • 4 Piece reserve propeller.
  • 4 Piece rubber grommets
  • 1 Piece propeller disassembly tool.
  • 1 Piece motor assembly tool.
  • 1 Piece installation instructions page.

 


Uçuş Kodu Yükleme

ESPcopter ile programlama eğitimlerinden sonra uçuş kodunu drone’unuza geri yüklemek isterseniz. Bu yazı size yardımcı olacaktır.

İlk olarak uçuş kodunu bilgisayarınıza indiriniz.

Uçuş Kodu:

Daha sonra NodeMCU Flasher Programını bilgisayarınıza indiriniz.

Flasher İndir

İndirilen dosyayı masaüstüne çıkardıktan sonra nodemcu-flasher-master\Win64\Release klosürü içinde ESP8266Flasher.exe uygulamasını çalıştırın.

Begin program

 

 

 

 

 

 

 

 

 

Confing bölümünden daha önce indirdiğiniz .Bin dosyasınının klasör bağlantısını ilk sekmeye yapıştırınız.

Drone bağlantısı yaptıktan sonra drone’u açık hale getirin ve flash(f) düğmesine basın. Kod yüklenmeye başlıyacaktır.

Programming

Yazılım başarı ile yüklendi.

Program success

Kontrol Ekranına Giriş

Yazılımların yüklenmesini yaptıktan sonra drone açık konuma getirin. Telefonunuz wifi sekmesinde drone’nun ismini göreceksiniz.

WIFI_SSID “ESPcopter”
WIFI_PASSWORD “12345678”

Bağlantıyı yaptıktan sonra telefonunuzdan herhangi bir web browser uygulamasını açınız. Arama satırına 192.168.4.1 yazıp aratınız.

İlk tuşu aktif yaptığınızda motorlar çalışmaya başlayacaktır.

İyi uçuşlar.