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

Senin, 06 November 2017

Compass Sensor BNO055

Halo Sobat Arduino Indonesia, berbagi hal yang baru lagi nih, berhubung sensor kompas gy 271 dan 273 yang semakin hari semakin kirang bagus datanya dan kadang-kadang beli juga dapetnya yang palsu a.k.a FAKE. maka memutuskan untuk move on dari kompas yang lama, nah kali ini pilihan jatuh pada produk adafruit BNO055, memang sih harganya 10x lipatnya yang versi hmc5883 atau hmc5983 tapi kita test dulu yanh performanya beberapa hari ini.

Sebenarnya sensor ini gak hanya kompas saja sih, tapi IMU 9DOF, ada acceleronya, gyro, magneto. nah untuk kompas kita pakai yang magnetometer. oke langsung saja sobat Arduino, saya akan berbagi source code bagaimana sensor BNO055 menghasilkan sudutnya.

Nah pertama kita sambung dulu ke arduino, pakai komunikasi i2c ya

 Sensor  ----------- Arduino
Vin                        5V
gnd                        gnd
SDA                      A4
SCL                      A5

Setelah di sambung menggunakan kabel jampur langsung coba program berikut ini


//arduino.web.id


#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>

/* This driver reads raw data from the BNO055

   Connections
   ===========
   Connect SCL to analog 5
   Connect SDA to analog 4
   Connect VDD to 3.3V DC
   Connect GROUND to common ground

   History
   =======
   2015/MAR/03  - First release (KTOWN)
*/

/* Set the delay between fresh samples */
#define BNO055_SAMPLERATE_DELAY_MS (100)

Adafruit_BNO055 bno = Adafruit_BNO055();
float heading;

/**************************************************************************/
/*
    Arduino setup function (automatically called at startup)
*/
/**************************************************************************/
void setup(void)
{
  Serial.begin(9600);
  Serial.println("Test Heading"); Serial.println("");

  /* Initialise the sensor */
  if(!bno.begin())
  {
    /* There was a problem detecting the BNO055 ... check your connections */
    Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
    while(1);
  }

  delay(1000);

  bno.setExtCrystalUse(true);

}

void loop(void)
{
  // Possible vector values can be:
  // - VECTOR_ACCELEROMETER - m/s^2
  // - VECTOR_MAGNETOMETER  - uT
  // - VECTOR_GYROSCOPE     - rad/s
  // - VECTOR_EULER         - degrees
  // - VECTOR_LINEARACCEL   - m/s^2
  // - VECTOR_GRAVITY       - m/s^2
  imu::Vector<3> vector = bno.getVector(Adafruit_BNO055::VECTOR_MAGNETOMETER);

  /* Display the floating point data */
  Serial.print("X: ");
  Serial.print(vector.x());
  Serial.print(" Y: ");
  Serial.print(vector.y());
  Serial.print(" Z: ");
  Serial.print(vector.z());

  heading = atan2(vector.y(), vector.x());

  if(heading < 0)
    heading += 2*PI;
// Convert radians to degrees
   heading = heading * 180/M_PI;

  Serial.print(" head: ");
  Serial.print(heading);
  Serial.println("");

  delay(BNO055_SAMPLERATE_DELAY_MS);
}


nah silahkan di coba di serial monitor Mudah bukan, Salam Arduino Indonesia

Minggu, 08 Oktober 2017

Sensor Kompas Asli dan yang Palsu

Hallo sobat Arduino Indonesia, akhir-akhir ini dapat project robot yang salah satunya menggunakan sensor kompas, karena projectnya Low Cost mau nggak mau beli sensornya juga yang Low Cost, Nah jatuh pilihan pada gy271 ata gy273 Magnetometer. Dulu sih sering menggunakan sensor ini dan tidak ada masalah dalam pembacaan sensornya, palingan juga masalahnya pas data kurang akurat kalau di sekitar banyak benda yang mengandung besi :D.

Nah baru-baru ini beli beberapa sensor di tempat A, kok sensor tersebut gak bisa di pakai, sudah di scan address pake i2cscanner, dapat alamat nya 0X0D,  ketika di masukkan program arduino kompas lah kok x,y,z nya dapat nilai 0 semua.

Setelah melihat sensor kompas yang lama dapat alamat 0x1E, apakah gara-gara ini sensor kompas tidak bisa di gunakan, akhirnya setelah baca-baca artikel banyak juga yang bilang kalau sensor kompas yang saya gunakan adalah fake alias palsu. Sempat gak percaya masa iya sih.

Akhirnya nyoba beli lagi beberapa di Toko B, alamatnya juga sama 0X0D, was was pasti gak bisa juga, eh ternyata di coba bisa. dan beberapa kali test gak bisa lagi. di simpen sebentar, di coba bisa, terus gak bisa lagi.

nah usut punya usut setelah saya amati IC magnetometernya sama semua ya itu ada tulisannya DA

sedangkan yang tipe lain yang punya alamat 0x1E tulisannya ic nya L883

ada yang bilang sih di forum
different on the modules is the marking on the chip, L883 on the good one, 5883 on the bad one.
so sudah dapat di simpulkan ternyata  Kompas yang saya beli dengan tipe IC DA5883 dan beralamatkan 0x0D ternyata di simpulkan fake kompas. udah terlanjur beli banyak banget di beberapa toko yang berbeda dan semuanya gak bisa. #edisicurhatsensorkompas



Senin, 25 September 2017

Menambahkan board atmega16 di Arduino IDE

Halo sobat arduino Indonesia, di postingan sebelumnya tentang memprogram ATMEGA16 dengan arduino, kami menambah board atmega16 dengan cara menambah di boardmanager menggunakan gelatino,  tetapi setelah kami mencoba komunikasi i2c dengn ATMEGA 16 dengan library wire.h, terjadi error



Nah setelah nyari solusi sana sini, kami menjumpai artikel yang layak di share, sobat bisa lihat versi aslinya di sini http://openhardware.ro/using-atmega16-with-arduino-ide/ , dan kami akan share dengan versi bahasa Indonesia.

Pada intinya tutorial tersebut menjelaskan bahwa akan menambahkan board baru atmega16 di arduino tanpa lewat boardmanager, adapun langkahnya sebagai berikut :

  • Buka file 'boards.txt' , lokasi file boards.txt ini adalah di  arduino folder …[arduino folder]\hardware\arduino\avr\boards.txt.
  • Tambahkan pada baris paling akhir tulisan seperti di bawah ini

##############################################################
ATmega16-8.name=ATmega16-External 8Mhz
ATmega16-8.upload.tool=avrdude
ATmega16-8.build.mcu=atmega16
ATmega16-8.build.f_cpu=8000000L
ATmega16-8.build.core=arduino:arduino
ATmega16-8.build.variant=ATmega16
ATmega16-8.upload.maximum_size=16000
##############################################################
ATmega16-16.name=ATmega16-External 16Mhz
ATmega16-16.upload.tool=avrdude
ATmega16-16.build.mcu=atmega16
ATmega16-16.build.f_cpu=16000000L
ATmega16-16.build.core=arduino:arduino
ATmega16-16.build.variant=ATmega16
ATmega16-16.upload.maximum_size=16000
##############################################################

  • Setelah  itu, buat folder Atmega16 di dalam folder [arduino folder]\hardware\arduino\avr\variants
  • download file pins_arduino.h
  • copy file pins_arduino.h  yang sudah di download ke dalam folder tersebut.
  • Sekarang cek hasilnya di tools - board 
 
  • Setelah semuanya terdeteksi, terakhir rubah di file HardwareSerial.cpp atau bisa di lihat di folder [arduino folder]\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp
  • cari coding seperti di bawah ini
#if defined(__AVR_ATmega8__)
  config |= 0x80; // select UCSRC register (shared with UBRRH)
#endif
 
  • Rubah dengan koding di bawah ini dan simpan

#if defined(__AVR_ATmega8__) || defined(__AVR_ATmega32__) || defined(__AVR_ATmega16__)
  config |= 0x80; // select UCSRC register (shared with UBRRH)
#endif

Install Boatloader Arduino di ATMEGA 16

Hai sobat arduino Indonesia, kemarin kami mencoba untuk menjadikan atmega 16 biar bisa di program menggunakan Arduino IDE, kenapa kami memprogram dengan arduino, ya karena sudah familier dengan arduino, jadinya akan lebih muda kalau atmega 16 yang kami punya di jadikan arduino.

Oke langkah pertama adalah menambahkan board gelatino di arduino IDE, caranya bagaimana. tenang sobat, berikut cara-caranya

  • sobat masuk ke preferences (File - Preferences), akan muncul seperti gambar berikut ini :
 
  • Klik Install

  • jika sudah selesai, coba cek di tools - board, maka akan muncul seperti dibawah ini
 
Langkah ke dua
Siapkan atmega 16 bisa yang DIP atau SMD, untuk kali ini kami pake yang DIP. dengan susunan sebagai berikut
  • Arduino Pin 13 ke ATMega16 Pin 8 (or SCK of another microcontroller) 
  • Arduino Pin 12 ke ATMega16 Pin 7 (or MISO of another microcontroller) 
  • Arduino Pin 11 ke ATMega16 Pin 6 (or MOSI of another microcontroller) 
  • Arduino Pin 10 ke ATMega16 Pin 9 (or RESET of another microcontroller) 
  • Arduino 5+ to ATMega16 Pin 10 (or Vcc of another microcontroller) 
  • Arduino Gnd to ATMega 16 Pin 11 (or Gnd of another microcontroller)
Kalau yang sudah punya rangkaian minimum system bisa langsung di sambungkan antara  minimum system ATMEGA dengan arduino, kalau belum bisa di buat dulu minimum system menggunakan projectboard. Kebetulan kami ada minimum system jadi langsung di sambungkan.

Langkah ke tiga
  • Upload skecth arduino ISP, bisa di buka di example arduino.
  • setelah berhasil upload di arduino, sekarang setting di tools - pilih programmer (programmer as ISP)
  • pilih board arduino gelatino w/ atmega 16
  • terakhir burn boatloader. tunggu sampai tulisan done boatloader
Langkah ke 4
  •  cek apakah bisa kita masukkan program arduino, buka blink, klik sketch - upload using programmer

Selasa, 12 September 2017

Belajar IOT Smarthome dengan Arduino

Smart Home atau Rumah pintar merupakan jaman sekarang untuk melakukan / mengendalikan segala elektroni yang dari rumah dari manapun.

Pada kesempatan kali ini Sobat Arduino bisa mengikuti pelatihan, workshop singkat selama dua hari (8 jam) untuk membuat aplikasi IOT Smart Home.

Nah sebelum memuai pelatihan berikut QnA yang sering ditanyakan  oleh calon peserta

1. Saya belum bisa programming sama sekali apakah bisa?
Ok, dulunya saya dulunya juga sangat awam dalam programming, tetapi sekarang bisa, hanya butuh kemauan untuk belajar dan mendapat bimbingan yang tepat untuk memulainya.





2. Apakah saya sudah mendapat peralatan untuk workshop / pelatihan?
Ya, dalam 1 paket anda akan mendapatkan peralatan / modul yang siap pakai dan boleh dibawah pulang.



3. Apa persyaratan dan apa yang harus saya bawa?
- untuk persyaratan tidak ada persyaratan yang khusus, hanya niat dan kemauan untuk belajar.
- Membawa Laptop / Notebook
- Handphone Android

4. Untuk peserta luar kota bagaimana,
Di dekat tempat pelatihan ada apartemen yang bisa di sewa harian, nanti kami bantu untuk mencarikan tempat tinggal, atau jika mau bisa tidur seadanya di basecamp kami tempat workshop

5. Kapan pelatihan di mulai?
Pelatihan di mulai minimal ada 2 orang. Hari bisa milih mulai senin - minggu

6. Dimana lokasi pelatihan ?
lokasi di workshop Sekolah Robot Indonesia di Marina Emas Timur V no 45 Surabaya

7. Ok saya tertarik ikut
Baiklah, email langsung ke sekolahrobot@gmail.com atau WA di 0811301088 kami akan mengirimkan langsung modul untuk dipelajari, agar nanti ketika pertemuan tatap muka lebih banyak untuk praktikumnya