Selasa, 26 Juli 2016

Belajar Arduino Ethernet Modul

hallo Sobat Arduino Indonesia,

Sekarang lagi musim IOT nih, apa apa serba IOT (Internet Of Things). Sudah banyak diterapkan di kota-kota besar, pernah dengar Smart City kan, lha itu semuanya sudah nyambung ke internet, atau bisa di bilang Internet Of Things. Pada share kali ini tidak membahas tentang Internet of Things nya, tapi tentang koneksi arduino ke Jaringan komputer. Jadi nanti sobat bisa akses Arduino melalui browser dari komputer.

Lets go biar gak lama-lama
Bahan-bahan yang dibutuhkan sebagai berikut

1. Ethernet Module W5100
2. Arduino Uno Clone

  
3. Kabel Jumper dan kabel ethernet 

Ethernet module yang di gunakan adalah type W5100, koneksi yang digunakan oleh ethernet ini dengan arduino adalah spi, jadi kita gunakan mosi, miso, sck, reset.

Berikut konfigurasi pin ethernet module dengan pin arduino


Setelah koneksi semua ke pin arduino dan ethernet module, buka arduino dan pilih example - ethernet - WebServer
atau sobat bisa copy paste dari program belajar arduino ethernet module berikut ini

/*
  Web Server

 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 modified 02 Sept 2015
 by Arturo Guadalupi

 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
    Ethernet.maintain();
  }
}
Langkah selanjutnya sambungkan kabel ethernet antara module ethernet dengan komputer, biar bisa terkonek jangan lupa setting IP di local komputer biar sama sama address nya. Untuk setting local komputer bisa di Control Panel - Network (pilih view Network Status and task) maka akan muncul berikut ini

Pilih Local Area Connection, dan


Pilih Properties - Internet Protocol Version (TCP/IPv4). kemudian isi ip Adress nya

 
 Setelah di isi, setting juga di arduino software yang sebelumnya sudah di tampilkan tadi, ganti

//IPAddress ip(192, 168, 1, 177);

IPAddress ip(192, 168, 0, 101); //ip ini digunakan untuk mengakses data dari arduino


Upload program arduino.

Tips : Jika pada proses uploadnya gagal-gagal terus, kabel jumper yang menuju ke reset di cabut dahulu, kemudian setelah upload berhasil, baru di sambungkan kembali

Ketika proses upload sudah berhasil buka browser dan ketikan di url nya 192.168.0.101 kemudian tekan enter
 
Data yang diatas adalah data yang didapat dari pin analog arduino.
Untuk lebih jelasnya bisa di lihat pada video berikut ini, jangan lupa like, comment dan subscribe ya biar cepet update nya. Salam Arduino Indonesia

 

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