Rabu, 12 September 2018

Cara membedakan FTDI Asli dengan FTDI Palsu

hallo sobat arduino, post kali ini tidak ada hubungannya sama arduino, tapi sering kali dijumpai masalah seperti ini. Kadang kalau kita menggunakan windows original arduino kita tidak bisa di download, gara-gara ftdi nya bermasalah. nah to the point aja, permasalahannya adalah ftdi yang kalian gunakan adalah fake alias palsu.

oke berikut cara paling muda untuk membedakan fake atau asli lewat software,

langkah langkahnya
  • colokin kabel usb ke ftdi downloader atau arduino built  ftdi sebagai bootloader
  • buka device manager 

  • nampak pada gambar tersebut USB Serial port pada com 6
  • Masuk Device Manager > Ports > USB Serial Port (COMx) > (Right Click) >  Properties > Details > Device Instance Path , Serial Number FTDI setelah tanda “+”  PID . contoh screenshoot di bawah ini adalah 00000000A

  • FTDI diatas adalah fake karena FTDI mempunyai alamat yang unix (berbeda2).
  • Sekarang saya coba ke FTDI lainnya

  • FTDI yang kedua beralamatkan A9M9DV3R, setelah saya browsing tidak menemukan adanya fake pada FTDI ini, berarti FTDI yang saya gunakan ke 2 adalah asli
Semoga bermanfaat, selamat belajar arduino

Minggu, 19 Agustus 2018

Membuat enkripsi sederhana dengan data Arduino

Hallo sobat Arduino Indonesia, tujuan dari posting kali ini adalah membuat data yang kita simpan di arduino menjadi data yang aneh (ternkripsi). sederhana sih, tinggal merubah misal A menjadi M dan sebaliknya. oke langsung saja kita coba


int inByte = 0;           
void setup() {
  Serial.begin(9600);
  while (!Serial) {
         ;  // wait for serial port to connect
         }
  establishContact();  // wait for incoming data
  } /* setup */


void loop() {
  // Contoh:   ABC -> NOP -> ABC
  if (Serial.available() > 0)        // if you have data input
         {
         inByte = Serial.read();        // read one byte of input
         // A to M get converted to N to Z

         if (inByte >= 'A' && inByte <= 'M')
            {
            inByte += 13;
            } /* if upper case A-M */

         // N to Z get converted to A to M
         else if (inByte >= 'N' && inByte <= 'Z')
            {
            inByte -= 13;
            } /* if upper case N-Z */
         // Lower case a to m get converted to n to z
         else if (inByte >= 'a' && inByte <= 'm')
            {
            inByte += 13;
            } /* if lower case a-m */
         // Lower case n to z get converted to a to m
         else if (inByte >= 'n' && inByte <= 'z')
            {
            inByte -= 13;
            } /* if lower case n-z */
         Serial.write(inByte);   // write the encrypted character back
         }

}


void establishContact()
   {

   // write 'A' repeatedly until you receive data from the host

   while (Serial.available() <= 0)
          {
          Serial.print('W');   // write 'A' to the host
          delay(1000);           // this delay is optional
          } // while Serial.available() <= 0

   Serial.println();
   } // establishContact()

cek di serial monitor dan coba tuliskan sesuatu disana dan klik enter

Salam Arduino Indonesia

Selasa, 29 Mei 2018

Update ESC Firmware dengan menggunakan arduino

Hai sobat Arduino Indonesia, pada kesempatan kali ini saya akan berbagi bagaimana memnfaatkan arduino untuk update firmare ESC. Pada kali ini saya menggunakan ESC yang programable, yaitu Emax BLHeli 30A.

Oke langsung saja yang perlu disiapin

  1. ESC Emax BLHEli 30A
  2. Arduino nano + shield
  3. Batere 3sel
Langkah selanjutnya,
  • buka pembungkus esc dan solder bagian dalam seperti ini 

  • Ada 3 kabel yaitu orange, merrah dan coklat. sambungkan kabel orange ke pin nomor 12 Arduino, kabel merah ke nomor 11 arduino dan kabel coklat ke GND Arduino
  • Pasang Arduino ke PC dan jalankan aplikasi BLHELISUITE yang sudah di download sebelumnya. 
  • Masuk ke tab Make Interfaces dan ikuti seuai urutan yang ada di sebelah kanan
  • Setelah klik Arduino 4way - interface, akan muncul dialog klik saja OK dan pilih seperti gambar di bawah ini. kemudian klik open, tunggu sampai proses selesai.

  • Pada menu atas pilih nomor 2 (SILABS C2 4way-if)
  •  dan pilih com nya pada bagian bawah sesuai com device manager yang ada di laptop masing masing. kemudian klik connect.

  •  Setelah itu pilih framework yang akan di instal dan klik OK

  • Apabila ingin merubah settingannya silahkan di oprek2 sendiri di bagian berikut ini, jangan lupa ketik write setup untuk merubah hasilnya
  • Selamat mencoba sobat Arduino Indonesia. Salam Arduino


Kamis, 01 Maret 2018

Program sensor ultrasonic Ping Arduino

Hallo Sobat Arduino, karena di  meja penulis ada beberapa sensor jarak ping maka apa salahnya kalau berbagi dengan sobat bagaimana cara memprogram sensor jarak / ultrasonic ping.

oke to the point aja ya, yang diperlukan adalah

1 buah sensor ultrasonic ping
1 buah arduino
1 buah project board
3 buah kabel jumper male to male


Setelah bahan tersedia sekarang tinggal di rangkai seperti berikut

Sensor Ping -  Arduino
gnd              -  GND
5V               -  5V
Sig              -  Pin 7

Tulis code sebagai berikut :

/* Ping))) Sensor

   This sketch reads a PING))) ultrasonic rangefinder and returns the
   distance to the closest object in range. To do this, it sends a pulse
   to the sensor to initiate a reading, then listens for a pulse
   to return.  The length of the returning pulse is proportional to
   the distance of the object from the sensor.

   The circuit:
    * +V connection of the PING))) attached to +5V
    * GND connection of the PING))) attached to ground
    * SIG connection of the PING))) attached to digital pin 7

   http://www.arduino.cc/en/Tutorial/Ping

   created 3 Nov 2008
   by David A. Mellis
   modified 30 Aug 2011
   by Tom Igoe

   This example code is in the public domain.

 */

// this constant won't change.  It's the pin number
// of the sensor's output:
const int pingPin = 7;

void setup() {
  // initialize serial communication:
  Serial.begin(9600);
}

void loop() {
  // establish variables for duration of the ping,
  // and the distance result in inches and centimeters:
  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);

  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();

  delay(100);
}

long microsecondsToInches(long microseconds) {
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds) {
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}
atau sobat bisa buka di example - sensor - ping


Setelah upload ke board arduino, sobat buka serial monitor untuk melihat hasilnya

Selamat mencoba,

SALAM ARDUINO INDONESIA

Kamis, 22 Februari 2018

Sensor Kompas DJI Phantom (Edisi Memanfaatkan Bekas Repair DJI Phantom)

Hallo Sobat Arduino Indonesia, Bagaimana kabarnya.. Long time no see ( iya  yang nulis lagi banyak kegiatan jadi jarang banget bikin tutorial)

Oke iseng-iseng liat tumpukan banyak bangkai DJI Phantom bekas repairan Klinik Drone, rasanya harus ada yang bisa di manfaatin. Nah  di mulai dari bagian paling bawah sendiri alias landing gear nya.



Setelah di urut-urut ada kabel di landing gear tersebut, otomatis pasti ada sesuatu. Nah sekarang kita coba untuk di bongkar, ada apa gerangan di landing gear nya


Ketemulah benda mungil seperti di bawah ini, tak lain adalah sensor kompas dari dji Phantom

oke, karena ada 4 kabel, ada 2 kemungkinannya si DJI ini mengakses sensor kompas tersebut dengan komunikasi Serial atau I2C. Tapi so far biasanya sih kalau akses sensor-sensor paling enak dengan menggunakan I2C. Nah sambil diurut2, ketemulah tulisan SDA, SCL, 5V, GND.Oke Fix berarti sensor ini menggunakan komunikasi I2C.

Sip, tugasnya sekarang adalah  mencari alamat dari I2C tersebut, oke disambungkanlah dengan bantuan Arduino

Sensor DJI Kompas Arduino
Dari kabel warna Hitam (SDA) A4
5V 5V
GNDGND
SCLA5



Untuk program arduino cari alamat I2C, bisa di lihat disini codingnya I2C Scanner
Dan hasilnya didapatlah alamat 1E

ALamat 1E ini familier banget dengan modul-modul kompas yang ada di pasaran, yakni modul gy 271 atau gy 273 dengan ic HMC5883. Nah kemungkinan modul kompas DJI ini pake IC Tersebut, okelah kita coba dengan coding kompas HMC5883, yangseperti di bawah ini

#include <Wire.h>
#include <math.h>

// updates to cope with Arduino V1.0( and newer?) and older versions (22 & lower)
#define I2C_TX write
#define I2C_RX read

//#define SCALE               //use this to scale each axis if the test data does not give a circular (spherical 3D) plot
                            // done as #def for max performance of code not using the scale factors!

// use to switch the serial output data to a CSV format of raw x,y,z data values to help calibrate your compass
#define RAW_DATA_CSV
// ALSO use this #def to format output to easly paste into a data array - eg to display data in Processing. See usabledevices.com for example.
#define RAW_DATA_ARRAY


// Shift the device's documented slave address (0x3C) for write operation
// 1 bit right.This compensates for how the TWI library only wants the
// 7 most significant bits (with the high bit padded with 0)

#define HMC5883_WriteAddress 0x1E //  i.e 0x3C >> 1
#define HMC5883_ModeRegisterAddress 0x02
#define HMC5883_ContinuousModeCommand (uint8_t)0x00     // cast to uint8_t added to get code to compile under Arduino v1.0
#define HMC5883_DataOutputXMSBAddress 0x03

int regb=0x01;
int regbdata=0x40;
int outputData[6];

// calibrate YOUR compass, so compass raw x,y (,z) data is centered around 0,0,0 axis!
// To do this read do an XY scatter plot for 2D xy data, and just "read"
//   work out or guess the offset to center the data (you need to rotate the compass to get lots of data pairs)
//   for my compass the values where x=-100, y=-100 (did not work out z axis!)
const int x_offset = 0;
const int y_offset = 0;
const int z_offset = 0;

#ifdef SCALE
const int x_scale = 1;
const int y_scale = 1;
const int z_scale = 1;
#endif

void setup()
{
  Serial.begin(9600);
  Wire.begin();       //Initiate the Wire library and join the I2C bus as a master
}

void loop() {
  int i,x,y,z;
  double angle;

  Wire.beginTransmission(HMC5883_WriteAddress);
  Wire.I2C_TX(regb);
  Wire.I2C_TX(regbdata);
  Wire.endTransmission();

  delay(1000);
  Wire.beginTransmission(HMC5883_WriteAddress); //Initiate a transmission with HMC5883 (Write address).
  Wire.I2C_TX(HMC5883_ModeRegisterAddress);     //Place the Mode Register Address in send-buffer.
  Wire.I2C_TX(HMC5883_ContinuousModeCommand);   //Place the command for Continuous operation Mode in send-buffer.
  Wire.endTransmission();                       //Send the send-buffer to HMC5883 and end the I2C transmission.
  delay(100);

  Wire.beginTransmission(HMC5883_WriteAddress);  //Initiate a transmission with HMC5883 (Write address).
  Wire.requestFrom(HMC5883_WriteAddress,6);      //Request 6 bytes of data from the address specified.

  delay(500);

  //Read the value of magnetic components X,Y and Z

  if(6 <= Wire.available()) // If the number of bytes available for reading be <=6.
  {
    for(i=0;i<6;i++)
    {
      outputData[i]=Wire.I2C_RX();  //Store the data in outputData buffer
    }
  }

  x=outputData[0] << 8 | outputData[1]; //Combine MSB and LSB of X Data output register
  z=outputData[2] << 8 | outputData[3]; //Combine MSB and LSB of Z Data output register
  y=outputData[4] << 8 | outputData[5]; //Combine MSB and LSB of Y Data output register

#ifdef SCALE
   angle= atan2((double)y * y_scale - y_offset,(double)x * x_scale - x_offset)* (180 / 3.14159265) +180; // angle in degrees
#else
   angle= atan2((double)y - y_offset,(double)x - x_offset)* (180 / 3.14159265) +180; // angle in degrees
#endif
  /*
   Refer the following application note for heading calculation.
   http://www.ssec.honeywell.com/magnetic/datasheets/lowcost.pdf
   ----------------------------------------------------------------------------------------
   atan2(y, x) is the angle in radians between the positive x-axis of a plane and the point
   given by the coordinates (x, y) on it.
   ----------------------------------------------------------------------------------------
   This sketch does not utilize the magnetic component Z as tilt compensation can not be done without an Accelerometer
    --------------->y
   |
   \/
   x

   N
   NW  |  NE
   |
   W----------E
   |
   SW  |  SE
   S

   */
// only print the detail if NOT doing either sending either calibration data set to serial
// #ifndef RAW_DATA_CSV
// #ifndef RAW_DATA_ARRAY
  //Print the approximate direction
  Serial.print("You are heading ");
  if((angle < 22.5) || (angle > 337.5 ))
    Serial.print("South");
  if((angle > 22.5) && (angle < 67.5 ))
    Serial.print("South-West");
  if((angle > 67.5) && (angle < 112.5 ))
    Serial.print("West");
  if((angle > 112.5) && (angle < 157.5 ))
    Serial.print("North-West");
  if((angle > 157.5) && (angle < 202.5 ))
    Serial.print("North");
  if((angle > 202.5) && (angle < 247.5 ))
    Serial.print("NorthEast");
  if((angle > 247.5) && (angle < 292.5 ))
    Serial.print("East");
  if((angle > 292.5) && (angle < 337.5 ))
    Serial.print("SouthEast");

  Serial.print(": Angle between X-axis and the South direction ");
  if((0 < angle) && (angle < 180) )
  {
    angle=angle;
  }
  else
  {
    angle=360-angle;
  }
  Serial.print(angle,2);
  Serial.println(" Deg");
//#endif
//#endif


  delay(100);
}

Eng Ing Eng


Ketemulah seperti diatas, berarti dugaan nya terbukti semua. So kalau sobat punya DJI sensor kompasnya tidak bekerja, bisa pake modul gy271 - gy273 (itu kalau sobat pengen terlihat DJI Phantomnya terlihat gak standart) :)

Selamat Mencoba