Selasa, 19 Juli 2016

Memprogram Arduino Driver Shield L293 Robotale

Hallo Sobat Arduino Indonesia a.k.a AWI'ers,

Pada kesempatan kali ini saya akan share bagaimana cara memprogram shield driver Arduino L293 produk dari Robotale. Shield driver ini berfungsi untuk mengatur/mengendalikan motor DC, jadi sobat Arduino Indonesia bisa mengatur maju/mundur dan memberikan speed/kecepatan sesuai dengan yang di inginkan. Oke Langsung aja ya

Bahan yang dibutuhkan
Arduino Uno
Shield Driver L293 Robotale


Shield Driver Motor L293 Robotale ini menggunakan 4 pin digital dari arduino yaitu
  • pin Direction A  menggunakan pin 4,
  • pin Direction B  menggunakan pin 7,
  • pin Enable/speed A  menggunakan pin 5,
  • pin Enable/speed B  menggunakan pin 6.
Untuk pemrograman arduino driver motor bisa dilihat berikut ini:

/*
DRIVER SHIELD ARDUINO UNO - ROBOTALE
SEKOLAHROBOT.COM
ARDUINO.WEB.ID
*/

int dir_a = 4;
int dir_b = 7;
int pwm_a = 5;
int pwm_b = 6;

void setup()
{
  pinMode(pwm_a, OUTPUT);
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);
}

void loop()
{
  maju();
  delay(1000);
  mundur();
  delay(1000);

}

void maju()
{
  digitalWrite(dir_a,HIGH);
  analogWrite(pwm_a,255);
  digitalWrite(dir_b,HIGH);
  analogWrite(pwm_b,255);
 
}

void mundur()
{
  digitalWrite(dir_a,LOW);
  analogWrite(pwm_a,255);
  digitalWrite(dir_b,LOW);
  analogWrite(pwm_b,255);
 
}
void belokkiri()
{
   digitalWrite(dir_a,HIGH);
  analogWrite(pwm_a,255);
  digitalWrite(dir_b,LOW);
  analogWrite(pwm_b,255);

}

void belokkanan()
{
  digitalWrite(dir_a,LOW);
  analogWrite(pwm_a,255);
  digitalWrite(dir_b,HIGH);
  analogWrite(pwm_b,255);

}

Untuk dicoba di mobile robot, kita tinggal colokkan output shield driver motor ke arduino uno. Seperti pada gambar berikut ini, diperlukan 2 buah moto dc, dan  di colokkan ke shield driver motor

Untuk lebih jelasnya ini ada video bagaimana menggunakan shield driver motor DC

 

Salam Arduino Indonesia

Sabtu, 28 Mei 2016

Program Arduino Bluerobotics Thruster T100 Untuk Robot Underwater

Hallo Sobat Arduino Indonesia,

Udah pada tau thruster kan ? ituloh yang biasanya digunakan pada kapal-kapal. Yup, Thruster itu merupakan alat pendorongnya. Jadi underwater robot yang sudah di buat oleh teman-teman ROVIndonesia dan Sekolah Robot Indonesia penggeraknya menggunakan sistem thruster (motor dengan baling-baling). Kali ini tim ROVIndonesia mencoba menggunakan thruster yang diproduksi oleh Bluerobotic. Beruntung tim dari AWI (Arduino.Web.Id) mendapat kesempatan untuk unboxing sekaligus memprogram sederhana untuk mengendalikannya.

Oke Sobat Arduino Indonesia yuk kita mulai

yang perlu di siapkan
  1. Arduino Uno (kali ini kita pakai versi clone yang murmer)
  2. Bluerobotics Basic ESC
  3. Thruster Bluerobotics T100
  4. 2 kabel jumper
  5. Power switching 12V


untuk konfigurasi kabel pada esc


Sedangkan untuk pemrograman bisa dilihat code berikut :

//Bluerobotic thruster T100

#include <Servo.h>

byte servoPin = 9;
Servo servo;

void setup() {
  servo.attach(servoPin);
  // send "stop" signal to ESC.
  servo.writeMicroseconds(1500);
  delay(1000);
}

void loop() {
  // Set signal value, which should be between 1100 and 1900
  //forward
  servo.writeMicroseconds(1300);
  delay(1000);
  //stop
  servo.writeMicroseconds(1500);
  delay(1000);
  //backward
  servo.writeMicroseconds(1700);
  delay(1000);
  //stop
  servo.writeMicroseconds(1500);
  delay(1000);
 
}

video



Bagaimana Sobat Arduino Indonesia, mudah bukan? kalau ada yang perlu ditanyakan komen disini ya, atau bisa langsung kirim email ke kontak yang tersedia

SALAM ARDUINO INDONESIA

Jumat, 22 April 2016

Memprogram Arduino RTC DS3231 AT24C32

Hallo sobat AWI'ers atau sobat arduino, sudah tau apa itu RTC, fungsi dan kegunaan RTC. Sebelum kita melakukan program Arduino RTC DS3231 AT24C32, alangkah baikknya saya ulas sedikit tentang RTC.

RTC atau kepanjangan dari Real Time Clock adalah merupakan suatu chip yang bisa menyimpan waktu dan tanggal. Pernah mematikan komputer/leptop (pasti pernah). Tapi kok waktu/tanggalnya tetap bisa menghitung ya..... Nah dari kasus tersebut komputer/leptop ada RTC nya di dalamnya. jadi ketika leptop/komputer dalam kondisi mati, RTC masih menyimpan data waktu/tanggal.

Oke sekarang RTC yang akan saya gunakan disini adalah jenis RTC DS3231 AT24C32, atau bisa di lihat gambar dibawah ini



Karena type RTC modul ini menggunakan Koneksi I2C maka yang perlu kita sambungkan adalah sebagai berikut

RTC ------------ ARDUINO
GND       ->        GND
VCC       ->        VCC
SDA       ->         A4
SCL       ->         A5

dan sebelum kita mengakses I2C kita harus tahu alamat address nya I2C RTC Tersebut
caranya sebagai berikut, setelah di koneksi ke arduino ketik programm I2C Scanner dibawah ini


#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}
 
void loop()
{
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }   
  }
  if (nDevices == 0)
    Serial.println("Not found\n");
  else
    Serial.println("done\n");

  delay(5000);
}

upload ke Arduino dan dapatkan address seperti berikut ini pada serial monitor


Sedangkan program untuk I2C RTC adalah sebagai berikut

#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  // set the initial time here:
  // DS3231 seconds, minutes, hours, day, date, month, year
   setDS3231time(30,35,21,1,27,12,15);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
{
  // sets time and date data to DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set next input to start at the seconds register
  Wire.write(decToBcd(second)); // set seconds
  Wire.write(decToBcd(minute)); // set minutes
  Wire.write(decToBcd(hour)); // set hours
  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
  Wire.write(decToBcd(month)); // set month
  Wire.write(decToBcd(year)); // set year (0 to 99)
  Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}
void displayTime()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
  // send it to the serial monitor
  Serial.print(hour, DEC);
  // convert the byte variable to a decimal number when displayed
  Serial.print(":");
  if (minute<10)
  {
    Serial.print("0");
  }
  Serial.print(minute, DEC);
  Serial.print(":");
  if (second<10)
  {
    Serial.print("0");
  }
  Serial.print(second, DEC);
  Serial.print(" ");
  Serial.print(dayOfMonth, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(year, DEC);
  Serial.print(" Day of week: ");
  switch(dayOfWeek){
  case 1:
    Serial.println("Sunday");
    break;
  case 2:
    Serial.println("Monday");
    break;
  case 3:
    Serial.println("Tuesday");
    break;
  case 4:
    Serial.println("Wednesday");
    break;
  case 5:
    Serial.println("Thursday");
    break;
  case 6:
    Serial.println("Friday");
    break;
  case 7:
    Serial.println("Saturday");
    break;
  }
}
void loop()
{
  displayTime(); // display the real-time clock data on the Serial Monitor,
  delay(1000); // every second
}

langkah pertama untuk setting RTC agar sama dengan jam kita adalah dengan setting RTC itu sendiri, caranya dengan memasukkan waktu yang akan kita set. seperti  dalam void setup ada setDS3231time(30,35,21,1,27,12,15);

setelah kita sesuaikan jam upload yang didalam void setup ada setDS3231time(30,35,21,1,27,12,15); selanjutnya upload ulang program tersebut. tapi pada setDS3231time(30,35,21,1,27,12,15); kasih tanda komen

//setDS3231time(30,35,21,1,27,12,15);

biar data rtc tidak baca setting lagi, jadi selanjutnya tingga Read data saja

 Selamat mencoba, Salam Arduino Indonesia

Selasa, 05 April 2016

Cara Menampilkan Suhu dengan Arduino DS18S20 sensor

Hallo sobat AWI'ers, Sobat Arduino Indonesia :). Kebetulan lagi ada sensor suhu waterproof DS18S20 yang bakal di pakai sama tim ROV Indonesia untuk ikut kompetisi MATE 2016 di Hong Kong 2016 bulan ini,

yuk kita ulik sedikit bagaimana cara menamilkan data sensor suhu waterproof tersebut pada serial monitor arduino.

Yang belum tau sensor suhu waterprrof, bentuk nya seperti dibawah ini

ada 3 kabel pada sensor tersebut
  • hitam (ground)
  • merah (vcc 5V)
  • kuning/putih (data)
pada konfigurasi sesnsor ke arduino antara kabel kuning dan merah menggunakan resistor 4K7 ohm

susunan sebagai berikut :

untuk pemrograman, siapkan library oneWire.h yang bisa di searching terlebih dahulu

dan berikut pemrogramannya

#include <OneWire.h>

int DS18S20_Pin = A1; //DS18S20 Signal pin on digital 2

//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2

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

void loop(void) {
 float temperature = getTemp();
 Serial.println(temperature);

 delay(100); //just here to slow down the output so it is easier to read

}


float getTemp(){
 //returns the temperature from one DS18S20 in DEG Celsius

 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) {
   //no more sensors on chain, reset search
   ds.reset_search();
   return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
   Serial.println("CRC is not valid!");
   return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) {
   Serial.print("Device is not recognized");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1); // start conversion, with parasite power on at the end

 byte present = ds.reset();
 ds.select(addr); 
 ds.write(0xBE); // Read Scratchpad


 for (int i = 0; i < 9; i++) { // we need 9 bytes
  data[i] = ds.read();
 }

 ds.reset_search();

 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB); //using two's compliment
 float TemperatureSum = tempRead / 16;

 return TemperatureSum;

}
untuk hasil output bisa diihat di serial monitor





Selamat Mencoba

Salam Arduino Indonesia

Arduino Driver motor BTS7960 atau BTN7970

Hallo sobat AWI'ers,
hari ini saya akan share tentang bagaimana menjalankan driver high current tipe BTS7960 / BTN7970. bentuk Drivernya seperti dibawah ini

ada 8 pin di dalam driver bts7960/btn7970
1 = RPWM (Forward Level atau Sinyal PWM Input, aktif HIGH)
2 = LPWM (Inversion Level atau Sinyal PWM Input, aktif HIGH)
3 = R_EN (Forward Drive Enable input, Aktif HIGH)
4 = L_EN (Reverse Drive Enable input, Aktif HIGH)
5 = R_IS (Forward Drive, - side current alarm output)
6 = L_IS (Reverse Drive, - side current alarm output)
7 = VCC (+5v, connect ke arduino)
8 = GND (Ground)

ada dua cara penggunaan driver BTS/BTN ini
yang pertama :
  1. Sambung vcc (+5V) dan gnd ke arduino
  2. Sambungkan R_EN dan L_EN ke +5V, atau ke pin digital arduino dan kasih logic HIGH
  3. Beri pwm pada L_PWM untuk mengaktifkan putaran motor, dan R_PWM di low kan
  4. Beri pwm pada R_PWM untuk membalikan putaran motor, dan L_PWM di low kan
Arduino program driver BTS7960 atau BTN7970
/*
ARDUINO BTN/BTS7970 driver
Sekolah Robot Indonesia
sekolahrobot.con
Driver High Curent
arduino.web.id
*/
int RPWM=11;
int LPWM=3;
int L_EN=2;
int R_EN=12;

void setup() {
  // put your setup code here, to run once:
  pinMode(RPWM,OUTPUT);
  pinMode(LPWM,OUTPUT);
  pinMode(R_EN,OUTPUT);
  pinMode(L_EN,OUTPUT);

  digitalWrite(R_EN,HIGH);
  digitalWrite(L_EN,HIGH);
}



void loop() {
//forward
  analogWrite(LPWM,255);
  analogWrite(RPWM,0);
  delay(1000);
//stop
  analogWrite(LPWM,0);
  analogWrite(RPWM,0);
  delay(1000);
//reverse
  analogWrite(LPWM,0);
  analogWrite(RPWM,255);
  delay(1000);
//stop
  analogWrite(LPWM,0);
  analogWrite(RPWM,0);
  delay(1000);
}

cara yang kedua
  1. sambung vcc (+5V) dan gnd ke arduino
  2. Sambungkan R_EN dan L_EN ke pin PWM arduino
  3. Digital pin HIGH pada L_PWM untuk mengaktifkan putaran motor , dan R_PWM di low kan
  4. Digital pin HIGH pada R_PWM untuk membalikan putaran motor, dan L_PWM di low kan
 Selamat mencoba
Salam Arduino Indonesia

Senin, 15 Februari 2016

Arduino Uno Murah [clone]

Just info buat sobat-sobat AWI'ers, sekarang clone dari uno gila gilaan harganya, yang terbaru saya beli ada yang Jual Arduino Murah banget seharga di bawah 80 rb, udah dapat kabel downloader juga.

Bentuknya seperti gambar di bawah ini,
Oh ya untuk bisa pakai board uno ini, sobat harus install Arduino Uno Clone CH340 / CH341 chipset usb drivers.
sobat bisa downlad CH340 / CH341 chipset usb drivers di sini , jangan upa diextract dulu file zip nya, trus klik file setup.exe


Klik install, dan jika sudah selesai, sobat bisa lihat di device manager
terihat com69 pada USB-SERIAL CH430, menandakan berarti sobat sudah berhasil install driver untuk board arduino UNO clone ini
















Rabu, 10 Februari 2016

Akses Sensor Kelembapan ( fc-28 soil moisture sensor )

Hallo Sobat AWI’ers dan sobat Arduino… Pada Kesempatan kali ini kita akan sedikit membahas tentang sensor-sensor yang berhubungan dengan air. Beberapa sensor yang akan kita bahas pada tutorial kali ini antara lain:
1.       Sensor kelembapan tanah
2.       Sensor Air
3.       Sensor Suhu
Gambar.1 : (Dari kiri) Sensor Kelembapan, Sensor Air, Sensor Suhu.

1.     SENSOR KELEMBAPAN TANAH

Jenis sensor kelembapan tanah  yang kita gunakan adalah fc-28 soil moisture sensor. Dimana fc-28 soil moisture sensor sudah dilengkapi dengan komparator LM393 dan potensio meter, sehingga kita bias melakukan kalibrasi tingkat kepekaan saat menggunakan digital output.
Gambar.2 : fc-28 soil moisture sensor

Pada rangkaian komparator terdapat 6 pin. 2 pin diantaranya dihubungkan pada pin yang berapa pada sensor. Dan 4 pin yang lain dihubungkan pada board mikrokontroler dalah hal ini menggunakan board Arduino UNO.
Gambar.3 : Rangkaian komparator LM393

Keempat pin yang terdapat pada rangkaian komparator LM393 terdiri dari:
a.     Pin AO (Analog Output)
b.    Pin DO (Digital Output)
c.     Pin GND (-)
d.    Pin VCC (+)
Pin analog output di gunakan jika kita menginginkan data yang keluar dari sensor berupa data analog data mulai 0 sampai 1023. Sedangkan digital output digunakan bila kita menginginkan data yang keluar berupa data digital yaitu 0 dan 1.

Gambar.5 : Konfigurasi FC-28 to Arduino UNO

Ini source codenya :

/*
Arduino.web.id
Sekolah Robot Indonesia
www.sekolahrobot.com
by: Muchammad Sob'run Ibnu Atfal
atfalsobrun@gmail.com
*/

int LED = 13;
int nilaiSensor=0;
int pinSensor=A0;

void setup()
{
  pinMode(13,OUTPUT);
  pinMode(4,OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  nilaiSensor = analogRead(pinSensor);
  //Serial.println(nilaiSensor);

  if (nilaiSensor <= 341)
  {
   Serial.println("Sangat Lembab");
   digitalWrite(LED,HIGH);
  }

  else if (nilaiSensor >= 342 && nilaiSensor <= 500)
  {
   Serial.println("Lembab");
   digitalWrite(LED,LOW);
  }

    else if (nilaiSensor >=700)
  {
   Serial.println("Tidak Lembab");
   digitalWrite(LED,HIGH);
  }
}

Untuk pembahasan tentang sensor air dan sensor suhu akan dibahas pada tutorial selanjutnya.. :) terimakasih.

Salam Arduino Lovers :D