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

Drive Stepper multi axis 5 phase steper motor MD5-HD14-2X

Halo sobat AWI'ers, berhubung lagi ada project bikin adonan untuk pabrik kue, dengan spesifikasi steper yang lumayan besar. Maka di pilihlah stepper A41K-M599 (5 phase Stepping Motor) pabrikan Autonics dari korea. Serta di pilih driver stepper multi axis dari Autonics juga type MD5-HD14-2X.

Ditahap awal ini cara yang paling mudah adalah menggunakan kontroller Arduino, paling nggak bisa menggerakkan stepper sumbuh X dan Y.

Oke yang perlu disiapkan pada percobaan kali ini adalah
  1. Arduino UNO
  2. Driver Stepper MD5-HD14-2X
  3. Motor Stepper  A41K-M599
  4. Power Switching 24V
  5. Kabel Jumper dan Breadboard
Untuk spesifikasi Driver Stepper  MD5-HD14-2X dan Motor Stepper A41K-M599 Sobat bisa langsung ngulik ke website resminya, sobat bisa buka di https://www.autonics.com/

Oke langkah pertama, sambung stepper motor dengan driver dengan susunan sebagai berikut


Kedua pastikan bahwa driver stepper  MD5-HD14-2X yang sobat gunakan bisa bekerja dengan normal, sobat bisa gunakan tombol function select switch yang seperti gambar berikut :


Posisikan switch 1 ke atas (ke ON) maka stepper motor akan berputar untuk membalik arah putaran arahkan switch 2 ke atas (ke ON). Setelah berhasil berarti driver stepper dan stepper yang sobat gunakan berfungsi dengan baik.

Untuk mengaktifkan driver MD5-HD14-2X dan Motor Stepper A41K-M599, bisa di lakukan dengan 2 cara sesuai dengan datasheet dari Driver ini, yaitu sebagai berikut :


Pada metode input 1 pulsa, untuk menggerakkan stepper arah jarum jam maka pin CCW  harus di kasih nilai HIGH dan pin CW di kasih pulsa HIGH LOW, begitu juga sebaliknya. Oke langsung saja ke pemrogramannya di Arduino, sebelumnya sobat bisa wiring seperti berikut ini


  • nomor 1 disambungkan ke pin arduino digital 5, 
  • nomor 3 disambungkan ke pin arduino digital 6
  • nomor 2,4,6 disambungkan ke Ground power dan ground arduino
  • karena sobat menggunakan metode input 1 pulsa maka tombol switch hitam no 2 di on kan.

Untuk arduino programnya sebagai berikut :

#define STEP_PIN 5 // Connect the driver's step pin to pin 5
#define DIRECTION_PIN 6 // Connect the driver's direction pin pin 6


void setup()
{
pinMode(STEP_PIN,OUTPUT);
pinMode(DIRECTION_PIN,OUTPUT);
}


void loop()
{
MoveSteps(-5, 700);
}
 

void MoveSteps(int steps, unsigned int microsecondStepDelay)
{

if (steps < 0)
{
digitalWrite(DIRECTION_PIN, LOW); // Set counter-clockwise direction
}
else
{
digitalWrite(DIRECTION_PIN, HIGH); // Set clockwise direction
}
// Moves desired number of steps
// Motor rotates one step when STEP_PIN changes from HIGH to LOW
for(int i = 0; i < abs(steps); i++)
{
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(microsecondStepDelay/2);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(microsecondStepDelay/2);
}
}

Jumat, 25 Desember 2015

Menyimpan data dengan Arduino Data Logger

Data logger merupakan data penyimpanan ke external memory atau ke SD Card, penggunaan data logger ini biasanya untuk menganalisa/mendapatkan data dari suatu kondisi di tempat tertentu. Misal untuk perubahan suhu per satuan waktu di tempat tertentu.

Pada percobaan kali ini modul yang di gunakan adalah modul dari deek-robot

 

Selain data logger, Modul ini juga langsung ada RTC (Real Time Clock) untuk pencatat waktu.
Mancoba data logger,

Konfigurasi data logger dengan arduino menggunakan koneksi SPI, maka untuk pin di arduino UNO bisa menggunakan pin sebagai berikut :
MOSI - pin 11
MISO - pin 12
CLK - pin 13
CS - pin 10





#include <SPI.h>
#include <SD.h>

const int chipSelect = 10;

void setup() {
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  // inisialisasi card
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
}

void loop() {
  String dataString="okelah";
  // membuka file, hanya satu file yang dibuka pada penggunaan data logger

  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // menulis data:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // print ke serial port:
    Serial.println(dataString);
  }
  else {
    Serial.println("error opening datalog.txt");
  }
}