Selasa, 27 Desember 2016

menyiapkan Pixy cam buat Arduino

hallo sobat Arduino,

sebenarnya ini adalah postingan yang sudah lama direncanakan tapi lupa di tulis :).
sekitar bulan januari an lah saya sudah unboxing pixy cam. sudah di buat videonya pula, tapi lupa nulis di website belajar arduino ini. Rencana nya sih waktu itu mau di pake buat simple simple an sensor kamera :) buat line follower.

oke langsung saja ya,
Pixy cam itu dulu awalnya dari  kick starter yang di create oleh "Charmed Labs and Carnegie Mellon". dengan campaign di kickstarter mereka berhasil mendapatkan $274,352. trus sampai sekarang jadi produk yang laris.

Jadi sobat kalau membutuhkan sensor kamera, pixy ini recomended banget lo, tinggal atur object dan mudah di gunakan.

berikut ini video unboxing dan nyobain pixy cam

 

 

Sabtu, 15 Oktober 2016

Program Multiple Ultrasonic Sensor dengan Arduino

Hallo Sobat Arduino Indonesia,

sudah pernah memprogram arduino sensor ultrasonic kan, pada kesempatan ini sedikit share bagaimana kalau cara program arduino dengan menggunakan banyak sensor ultrasonic, Nah kalau sudah bisa memprogram satu sensor ultrasonic pasti juga bisa memprogram untuk banyak sensor.

Kenapa harus banyak sensor ultrasonic?
nah Sobat bisa memanfaatkan banyak sensor misal untuk membuat robot wall follower, membuat robot sumo automatic/ otomatis, atau untuk membuat robot pemadam api.

Oke yang pertama di lakukan adalah inisialisasi pin pin yang akan di gunakan untuk sensor ultrasonic, berhubung kali ini kita ada modul yang memang di desain untuk banyak sensor ultrasonic jadinya tinggal colok colok kabel jumper saja.

Komponen yang dibutuhkan pada percobaan kali ini adalah
  1. Arduino nano clone
  2. sensor ultrasonic hcsr04
  3. shield nano (bikin sendiri) atau ada yang sudah produk jadi shiled nano

untuk pemrograman arduin multi ultrasonic sensor bisa langsung di lihat berikut ini




//ultrasonic 1
int echoPin1 =8;
int initPin1 =9;
int distance1 =0;

//ultrasonic 2
int echoPin2 =6;
int initPin2 =7;
int distance2 =0;

//ultrasonic 3
int echoPin3 =4;
int initPin3 =5;
int distance3 =0;


void setup() {
 
  pinMode(initPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(initPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(initPin3, OUTPUT);
  pinMode(echoPin3, INPUT);

  Serial.begin(9600);
 
}

void loop() {
 
  distance1 = getDistance(initPin1, echoPin1);
  printDistance(1, distance1);
  delay(150);
 
  distance2 = getDistance(initPin2, echoPin2);
  printDistance(2, distance2);
  delay(150);
 
  distance3 = getDistance(initPin3, echoPin3);
  printDistance(3, distance3);
  delay(150);
  Serial.println("");
  delay(500);
 
}

int getDistance (int initPin, int echoPin){

 digitalWrite(initPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(initPin, LOW);
 unsigned long pulseTime = pulseIn(echoPin, HIGH);
 int distance = pulseTime/58;
 return distance;

}

 void printDistance(int id, int dist){
 
     Serial.print(id);
     Serial.print("------>");  
    Serial.print(dist, DEC);
    Serial.println(" cm");
   
 }

video memprogram arduino multi ultrasonic

Salam Arduino Indonesia

Minggu, 09 Oktober 2016

Belajar Arduino Driver Monster Moto shield

Hallo Sobat Arduino Indonesia,

yuk belajar arduino lagi :). oke langsung saja ini karena di W/S Sekolah Robot Indonesia ada shield Driver Monster Moto. yuk kita program untuk menggerakkan motor DC.

oh ya kalau yang beli baru kadang-kadang ada yang harus nyolder dulu, gampang kok sobat. bisa cek di video dibawah ini ya.

Yang dibutuhkan pada percobaan kali ini,
 

Driver Shield Monster Moto ini mempunyai pin yang digunakan adalah pin 7,4,8,9,5,6,2,3.

untuk konfigurasi pin bisa dilihat pada coding program berikut ini


  

/*  MonsterMoto Shield Example Sketch
  date: 5/24/11
  code by: Jim Lindblom
  hardware by: Nate Bernstein
  SparkFun Electronics

 License: CC-SA 3.0, feel free to use this code however you'd like.
 Please improve upon it! Let me know how you've made it better.

 This is really simple example code to get you some basic
 functionality with the MonsterMoto Shield. The MonsterMote uses
 two VNH2SP30 high-current full-bridge motor drivers.

 Use the motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
 function to get motors going in either CW, CCW, BRAKEVCC, or
 BRAKEGND. Use motorOff(int motor) to turn a specific motor off.

 The motor variable in each function should be either a 0 or a 1.
 pwm in the motorGo function should be a value between 0 and 255.
 */
#define BRAKEVCC 0
#define CW   1
#define CCW  2
#define BRAKEGND 3
#define CS_THRESHOLD 100

/*  VNH2SP30 pin definitions
 xxx[0] controls '1' outputs
 xxx[1] controls '2' outputs */
int inApin[2] = {7, 4};  // INA: Clockwise input
int inBpin[2] = {8, 9}; // INB: Counter-clockwise input
int pwmpin[2] = {5, 6}; // PWM input
int cspin[2] = {2, 3}; // CS: Current sense ANALOG input
int enpin[2] = {0, 1}; // EN: Status of switches output (Analog pin)

int statpin = 13;

void setup()
{
  Serial.begin(9600);
 
  pinMode(statpin, OUTPUT);

  // Initialize digital pins as outputs
  for (int i=0; i<2; i++)
  {
    pinMode(inApin[i], OUTPUT);
    pinMode(inBpin[i], OUTPUT);
    pinMode(pwmpin[i], OUTPUT);
  }
  // Initialize braked
  for (int i=0; i<2; i++)
  {
    digitalWrite(inApin[i], LOW);
    digitalWrite(inBpin[i], LOW);
  }
  // motorGo(0, CW, 1023);
  // motorGo(1, CCW, 1023);
}

void loop()
{
  motorGo(0, CW, 1023);
  motorGo(1, CCW, 1023);
  delay(500);

  motorGo(0, CCW, 1023);
  motorGo(1, CW, 1023);
  delay(500);
 
  if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
    digitalWrite(statpin, HIGH);
}

void motorOff(int motor)
{
  // Initialize braked
  for (int i=0; i<2; i++)
  {
    digitalWrite(inApin[i], LOW);
    digitalWrite(inBpin[i], LOW);
  }
  analogWrite(pwmpin[motor], 0);
}

/* motorGo() will set a motor going in a specific direction
 the motor will continue going in that direction, at that speed
 until told to do otherwise.

 motor: this should be either 0 or 1, will selet which of the two
 motors to be controlled

 direct: Should be between 0 and 3, with the following result
 0: Brake to VCC
 1: Clockwise
 2: CounterClockwise
 3: Brake to GND

 pwm: should be a value between ? and 1023, higher the number, the faster
 it'll go
 */
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
{
  if (motor <= 1)
  {
    if (direct <=4)
    {
      // Set inA[motor]
      if (direct <=1)
        digitalWrite(inApin[motor], HIGH);
      else
        digitalWrite(inApin[motor], LOW);

      // Set inB[motor]
      if ((direct==0)||(direct==2))
        digitalWrite(inBpin[motor], HIGH);
      else
        digitalWrite(inBpin[motor], LOW);

      analogWrite(pwmpin[motor], pwm);
    }
  }
}
Upload ke arduino dan silahkan dicoba Salam Arduino Indonesia

video tutorial Belajar Arduino Driver Monster Moto Shield

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 = 2; //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

untuk pembelian arduino uno clone murah ini sobat bisa liat di toko 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);
}
}