Pengenalan Twitter Bootstrap — Guru Tutorial

Berawal dari iseng-iseng mencari informasi tentang bagaimana cara untuk mempermudah dan mempercepat kita dalam mendesain sebuah tampilan website (front-end) dengan tampilan yang simple tapi tetap bisa dikatakan elegan. 207 more words

via Pengenalan Twitter Bootstrap — Guru Tutorial

Cara Mendaftarkan Blog di Search Console — Guru Tutorial

Cara Mendaftarkan Blog di Search Console – Search Console ini dahulu namanya adalah Webmaster Tools, jadi hanya berubah nama saja dan secara tampilan dan fitur di dalamnya tidak ada perubahan. Mendaftarkan blog di search console bertujuan agar blog kita mudah terindeks oleh Google, serta mengetahui kesalahan-kesalahan lain di blog kita mulai dari struktur HTML blog dan…

via Cara Mendaftarkan Blog di Search Console — Guru Tutorial

JATI DIRI BANGSA WAJO — Guru Tutorial

Hampir tak ada negeri yang tidak didatangi orang Wajo. Sampai ke ujung duniapun asalkan ada peluang bisnis dan iklim yang menjamin kebebasan berusaha. Orang Wajo akan datang.Perumpamaan itu tak lain untuk menunjukkan betapa sifat kewiraswastaan (interpreneurship) telah mendarah daging pada setiap pribadi orang Wajo.Sifat ini dituntun pesan leluhur : aja mumaelo natunai sekke, naburuki labo…

via JATI DIRI BANGSA WAJO — Guru Tutorial

Arduino Leonardo ENC28J60 Ethernet Shield

Pada tutorial kali ini akan dibahas mengenai koneksi ethernet ke arduino menggunakan modul ethernet ENC28J60. Perlu dicatat bahwa tutorial ini menggunakan arduino leonardo sehingga koneksi pin antara arduino dan modul ethernet akan berbeda jika menggunakan arduino uno atau yang lainnya.

  • Hubungkan pin pada arduino leonardo dengan shield ENC28J60 seperti pada tabel berikut ini:
Arduino ENC28J60 Shield
3.3v VCC
GND GND
10 CS
MOSI (ICSP) SI
MISO (ICSP) SO
SCK (ICSP) SCK
  • Clone library Ethercard dari github:
# cd /usr/share/arduino/libraries
# git clone https://github.com/jcw/ethercard.git Ethercard
  • Selanjutnya, Anda perlu melakukan patching library ethercard jika Anda menggunakan avr-libc versi 1.8.0. Anda dapat menggunakan sed atau menggunakan file diff seperti ini:
# wget https://gist.github.com/john-117/bfa55e15d2b291a1da21/raw/b8b821aa3cdeea922d9fbce37767d924cd9870fa/ethercard.diff
# patch -p0 < ethercard.diff
  • Untuk mencoba apakah library ethercard, Anda dapat menggunakan salah satu contoh yang disertakan pada library ethercard misalnya RBBB web server. Berikut ini adalah source codenya:
// This is a demo of the RBBB running as webserver with the Ether Card
// 2010-05-28 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php

#include <EtherCard.h>

// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 10,10,10,200 };

byte Ethernet::buffer[500];
BufferFiller bfill;

void setup () {
  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
    Serial.println( "Failed to access Ethernet controller");
  ether.staticSetup(myip);
}

static word homePage() {
  long t = millis() / 1000;
  word h = t / 3600;
  byte m = (t / 60) % 60;
  byte s = t % 60;
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n"
    "\r\n"
    "<meta http-equiv='refresh' content='1'/>"
    "<title>RBBB server</title>"
    "<h1>$D$D:$D$D:$D$D</h1>"),
      h/10, h%10, m/10, m%10, s/10, s%10);
  return bfill.position();
}

void loop () {
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);

  if (pos)  // check if valid tcp data is received
    ether.httpServerReply(homePage()); // send web page data
}
  • Pada contoh di atas, IP yang digunakan adalah 10.10.10.200. Hubungkan komputer ke ethernet shield ENC28J60 dan atur alamat IP komputer Anda, misalnya menggunakan IP 10.10.10.1.
  • Untuk menguji koneksi, Anda dapat melakukan ping seperti ini:
% ping -c 3 10.10.10.200
PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data.
64 bytes from 10.10.10.200: icmp_seq=1 ttl=64 time=1.32 ms
64 bytes from 10.10.10.200: icmp_seq=2 ttl=64 time=1.30 ms
64 bytes from 10.10.10.200: icmp_seq=3 ttl=64 time=1.39 ms

--- 10.10.10.200 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.306/1.339/1.390/0.055 ms
  • Anda juga dapat membuka browser dan memasukkan alamat IP sesuai dengan yang telah diatur pada source code yaitu 10.10.10.200. Tampilannya kurang lebih seperti ini.
  • Sekian tutorial kali ini, semoga bermanfaat.

Arduino I2C LCD Backpack

Pada tutorial kali ini akan dibahas mengenai cara menggunakan I2C LCD backpack dan arduino. Adapun I2C LCD backpack ini bertujuan untuk mengurangi jumlah pin yang digunakan pada koneksi antara arduino (atau microcontroller lainnya) dengan character LCD.

  • Untuk mempermudah, kita akan menggunakan library New LiquidCrystal. Pertama, unduh dan ekstrak library tersebut pada sub direktori dimana library arduino berada.
# cd /usr/share/arduino/libraries/
# mv LiquidCrystal LiquidCrystalOld
# wget https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/LiquidCrystal_V1.2.1.zip
# unzip LiquidCrystal_V1.2.1.zip
# rm -rf __MACOSX
  • Perlu diperhatikan, bahwa pada langkah di atas, kita mengganti nama direktori library LiquidCrystal yang lama agar tidak bentrok dengan library yang baru. Serta kita tidak membutuhkan sub direktori __MACOSX, sehingga kita dapat menghapusnya.
  • Selanjutnya, hubungkan arduino dengan I2C LCD backpack. Pada tutorial ini, digunakan arduino leonardo atau arduino UNO R3, dimana pin I2C berada pada bagian ujung digital pin sehingga mudah dikenali (Pin dengan tulisan SDA dan SCL). Untuk arduino UNO sebelum R3, pin I2C berada pada pin analog A4 (SDA) dan A5 (SCL). Untuk memudahkan, berikut ini adalah tabel koneksi antara I2C LCD backpack:
I2C LCD Backpack Arduino UNO Arduino UNO R3 / Leonardo
GND GND GND
VCC 5v 5v
SDA A4 SDA
SCL A5 SCL
  • Setelah menghubungkan arduino dan I2C LCD backpack, Anda perlu mengetahui alamat I2C LCD backpack. Gunakan sketch I2C scanner berikut ini untuk mengetahui alamat tersebut (sketch ini dapat ditemukan di situs playground arduino):
// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
#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++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the 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("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}
  • Lakukan kompilasi dan upload sketch di atas. Setelah proses upload ke arduino selesai, lanjutkan dengan menjalankan arduino serial monitor. Pada log serial monitor akan nampak output seperti ini:
Scanning...
I2C device found at address 0x27  !
done
  • Dari informasi di atas, diketahui bahwa alamat I2C LCD backpack berada pada 0x27. Dari informasi tersebut, kita dapat melanjutkan dengan menjalankan contoh sketch yang terdapat pada blog sainsmart berikut ini yang akan menampilkan dua baris kalimatHello World pada character LCD yang telah dipasangi I2C LCD backpack:
/**
 * Example Arduino sketch for SainSmart I2C LCD2004 adapter for HD44780 LCD screens
 * Readily found on eBay or http://www.sainsmart.com/
 * The LCD2004 module appears to be identical to one marketed by YwRobot
 *
 * Address pins 0,1 & 2 are all permenantly tied high so the address is fixed at 0x27
 *
 * Written for and tested with Arduino 1.0
 * This example uses F Malpartida's NewLiquidCrystal library. Obtain from:
 * https://bitbucket.org/fmalpartida/new-liquidcrystal
 *
 * Edward Comer
 * LICENSE: GNU General Public License, version 3 (GPL-3.0)
 *
 * NOTE: Tested on Arduino NANO whose I2C pins are A4==SDA, A5==SCL
 */
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>

// definisi untuk I2C LCD Backpack
#define I2C_ADDR       0x27
#define BACKLIGHT_PIN  3
#define BACKLIGHT_POL  POSITIVE
#define EN_PIN         2
#define RW_PIN         1
#define RS_PIN         0
#define D4_PIN         4
#define D5_PIN         5
#define D6_PIN         6
#define D7_PIN         7

LiquidCrystal_I2C lcd(I2C_ADDR, EN_PIN, RW_PIN, RS_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN, BACKLIGHT_PIN, BACKLIGHT_POL);

void setup()
{
  lcd.begin(16,2);      // menggunakan lcd 16 kolom dan 2 baris
  lcd.home();           // set kursor ke awal (baris 0, kolom 0)
  lcd.print("Hello");   // tulis kata "Hello"
  lcd.setCursor(0, 1);  // pindahkan kursor ke baris 1, kolom 0
  lcd.print("World");   // tulis kata "World"
}

void loop()
{
}
  • Selanjutnya, Anda tinggal melakukan upload sketch tersebut ke Arduino dan character LCD akan menampilkan kalimat Hello World.
  • Kelebihan dari penggunaan library New LiquidCrystal adalah sifatnya fleksibel dan memungkinkan Anda untuk menggunakan beberapa fungsi inisialisasi I2C LCD backpack sesuai dengan kebutuhan.
  • Demikian tutorial singkat ini, semoga bermanfaat.
  • Untuk mempermudah, kita akan menggunakan library New LiquidCrystal. Pertama, unduh dan ekstrak library tersebut pada sub direktori dimana library arduino berada.
# cd /usr/share/arduino/libraries/
# mv LiquidCrystal LiquidCrystalOld
# wget https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/LiquidCrystal_V1.2.1.zip
# unzip LiquidCrystal_V1.2.1.zip
# rm -rf __MACOSX
  • Perlu diperhatikan, bahwa pada langkah di atas, kita mengganti nama direktori library LiquidCrystal yang lama agar tidak bentrok dengan library yang baru. Serta kita tidak membutuhkan sub direktori __MACOSX, sehingga kita dapat menghapusnya.
  • Selanjutnya, hubungkan arduino dengan I2C LCD backpack. Pada tutorial ini, digunakan arduino leonardo atau arduino UNO R3, dimana pin I2C berada pada bagian ujung digital pin sehingga mudah dikenali (Pin dengan tulisan SDA dan SCL). Untuk arduino UNO sebelum R3, pin I2C berada pada pin analog A4 (SDA) dan A5 (SCL). Untuk memudahkan, berikut ini adalah tabel koneksi antara I2C LCD backpack:
I2C LCD Backpack Arduino UNO Arduino UNO R3 / Leonardo
GND GND GND
VCC 5v 5v
SDA A4 SDA
SCL A5 SCL
  • Setelah menghubungkan arduino dan I2C LCD backpack, Anda perlu mengetahui alamat I2C LCD backpack. Gunakan sketch I2C scanner berikut ini untuk mengetahui alamat tersebut (sketch ini dapat ditemukan di situs playground arduino):
// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
#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++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the 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("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}
  • Lakukan kompilasi dan upload sketch di atas. Setelah proses upload ke arduino selesai, lanjutkan dengan menjalankan arduino serial monitor. Pada log serial monitor akan nampak output seperti ini:
Scanning...
I2C device found at address 0x27  !
done
  • Dari informasi di atas, diketahui bahwa alamat I2C LCD backpack berada pada 0x27. Dari informasi tersebut, kita dapat melanjutkan dengan menjalankan contoh sketch yang terdapat pada blog sainsmart berikut ini yang akan menampilkan dua baris kalimatHello World pada character LCD yang telah dipasangi I2C LCD backpack:
/**
 * Example Arduino sketch for SainSmart I2C LCD2004 adapter for HD44780 LCD screens
 * Readily found on eBay or http://www.sainsmart.com/
 * The LCD2004 module appears to be identical to one marketed by YwRobot
 *
 * Address pins 0,1 & 2 are all permenantly tied high so the address is fixed at 0x27
 *
 * Written for and tested with Arduino 1.0
 * This example uses F Malpartida's NewLiquidCrystal library. Obtain from:
 * https://bitbucket.org/fmalpartida/new-liquidcrystal
 *
 * Edward Comer
 * LICENSE: GNU General Public License, version 3 (GPL-3.0)
 *
 * NOTE: Tested on Arduino NANO whose I2C pins are A4==SDA, A5==SCL
 */
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>

// definisi untuk I2C LCD Backpack
#define I2C_ADDR       0x27
#define BACKLIGHT_PIN  3
#define BACKLIGHT_POL  POSITIVE
#define EN_PIN         2
#define RW_PIN         1
#define RS_PIN         0
#define D4_PIN         4
#define D5_PIN         5
#define D6_PIN         6
#define D7_PIN         7

LiquidCrystal_I2C lcd(I2C_ADDR, EN_PIN, RW_PIN, RS_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN, BACKLIGHT_PIN, BACKLIGHT_POL);

void setup()
{
  lcd.begin(16,2);      // menggunakan lcd 16 kolom dan 2 baris
  lcd.home();           // set kursor ke awal (baris 0, kolom 0)
  lcd.print("Hello");   // tulis kata "Hello"
  lcd.setCursor(0, 1);  // pindahkan kursor ke baris 1, kolom 0
  lcd.print("World");   // tulis kata "World"
}

void loop()
{
}
  • Selanjutnya, Anda tinggal melakukan upload sketch tersebut ke Arduino dan character LCD akan menampilkan kalimat Hello World.
  • Kelebihan dari penggunaan library New LiquidCrystal adalah sifatnya fleksibel dan memungkinkan Anda untuk menggunakan beberapa fungsi inisialisasi I2C LCD backpack sesuai dengan kebutuhan.
  • Demikian tutorial singkat ini, semoga bermanfaat.

Ino Command Line Toolkit Untuk Arduino

Ino adalah command-line toolkit untuk arduino yang fungsinya hampir sama dengan IDE arduino, namun seperti dengan namanya, Ino dijalankan melaui command-line. Sebagai catatan, IDE arduino sejak versi 1.5.2 sudah mendukung instruksi melalui commandlinedan tutorial ini hanya sebagai pelengkap saja.

  • Gunakan perintah berikut ini untuk melakukan proses instalasi menggunakan python pip:
# pip install ino
  • Jika ingin melakukan instalasi secara manual, gunakan perintah berikut ini:
# git clone git://github.com/amperka/ino.git
# make install
  • Gunakan opsi –help untuk melihat perintah yang dapat digunakan pada Ino seperti ini:
% ino --help
usage: ino [-h] {build,clean,init,list-models,preproc,serial,upload} ...

Ino is a command-line toolkit for working with Arduino hardware.

It is intended to replace Arduino IDE UI for those who prefer to work in
terminal or want to integrate Arduino development in a 3rd party IDE.

Ino can build sketches, libraries, upload firmwares, establish
serial-communication. For this it is split in a bunch of subcommands, like git
or mercurial do. The full list is provided below. You may run any of them with
--help to get further help. E.g.:

    ino build --help

positional arguments:
  {build,clean,init,list-models,preproc,serial,upload}
    build               Build firmware from the current directory project
    clean               Remove intermediate compilation files completely
    init                Setup a new project in the current directory
    list-models         List supported Arduino board models
    preproc             Transform a sketch file into valid C++ source
    serial              Open a serial monitor
    upload              Upload built firmware to the device

optional arguments:
  -h, --help            show this help message and exit
  • Opsi yang lebih spesifik untuk setiap perintah pada Ino dapat dilihat dengan menambahkan kata –help pada perintah yang dimaksud. Contohnya seperti ini:
% ino init --help
usage: ino init [-h] [-t TEMPLATE]

Setup a new project in the current directory.

The directory must be empty.

optional arguments:
  -h, --help            show this help message and exit
  -t TEMPLATE, --template TEMPLATE
                        Project template to use

Available project templates:

       blink: Simple LED blink on pin 13
       empty: [DEFAULT] A project with empty setup() and loop()
  • Untuk melihat jenis target yang didukung oleh Ino, gunakan perintah list-models seperti ini:
% ino list-models
Searching for Board description file (boards.txt) ... /usr/share/arduino/hardware/arduino/boards.txt
         uno: [DEFAULT] Arduino Uno
   atmega328: Arduino Duemilanove w/ ATmega328
   diecimila: Arduino Diecimila or Duemilanove w/ ATmega168
     nano328: Arduino Nano w/ ATmega328
        nano: Arduino Nano w/ ATmega168
    mega2560: Arduino Mega 2560 or Mega ADK
        mega: Arduino Mega (ATmega1280)
    leonardo: Arduino Leonardo
     mini328: Arduino Mini w/ ATmega328
        mini: Arduino Mini w/ ATmega168
    ethernet: Arduino Ethernet
         fio: Arduino Fio
       bt328: Arduino BT w/ ATmega328
          bt: Arduino BT w/ ATmega168
  lilypad328: LilyPad Arduino w/ ATmega328
     lilypad: LilyPad Arduino w/ ATmega168
    pro5v328: Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328
       pro5v: Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168
      pro328: Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328
     bppro5v: Arduino Pro Mini (5V, 16 MHz) w/ ATmega328 (BusPirate)
         pro: Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168
   atmega168: Arduino NG or older w/ ATmega168
     atmega8: Arduino NG or older w/ ATmega8
  • Setelah proses instalasi selesai, Anda dapat langsung melanjutkan dengan membuat project. Untuk membuat project, Anda terlebih dahulu membuat direktori untuk project tersebut dan dilanjutkan dengan inisialisasi menggunakan ino seperti ini:
% mkdir testapp && cd testapp && ino init
Searching for Board description file (boards.txt) ... /usr/share/arduino/hardware/arduino/boards.txt

  • Pada direktori project yang telah dibuat terdapat dua buah subdirektori yaitu lib dan src, dimana sub direktori src adalah tempat sketch berada.
  • Selanjutnya Anda dapat mengedit sketch kosong yang merupakan hasil dari perintah init, misalnya Anda ingin membuat sketch blink sederhana untuk arduino leonardo seperti ini:
% cat src/sketch.ino
#include <avr/io.h>
#include <util/delay.h>

void main()
{
  bitSet(DDRC, 7);

  while(1) {
    bitSet(PINC, 7);
    _delay_ms(1000);
  }
}
  • Langkah berikutnya adalah menjalankan Ino dengan perintah build dengan menyertakan opsi -m diikuti dengan jenis target yang akan digunakan, misalnya untuk leonardo perintahnya adalah sebagai berikut:
% ino build -m leonardo --cxxflags="-ffreestanding"
Searching for Board description file (boards.txt) ... /usr/share/arduino/hardware/arduino/boards.txt
Searching for Arduino lib version file (version.txt) ... /usr/share/arduino/lib/version.txt
Detecting Arduino software version ...  1.0.5 (1.0.5)
Searching for Arduino core library ... /usr/share/arduino/hardware/arduino/cores/arduino
Searching for Arduino standard libraries ... /usr/share/arduino/libraries
Searching for Arduino variants directory ... /usr/share/arduino/hardware/arduino/variants
Searching for make ... /usr/bin/make
Searching for avr-gcc ... /usr/lib64/ccache/avr-gcc
Searching for avr-g++ ... /usr/lib64/ccache/avr-g++
Searching for avr-ar ... /usr/bin/avr-ar
Searching for avr-objcopy ... /usr/bin/avr-objcopy
src/sketch.ino
Searching for Board description file (boards.txt) ... /usr/share/arduino/hardware/arduino/boards.txt
Searching for Arduino lib version file (version.txt) ... /usr/share/arduino/lib/version.txt
Detecting Arduino software version ...  1.0.5 (1.0.5)
Scanning dependencies of src
Scanning dependencies of arduino
src/sketch.cpp
arduino/wiring_analog.c
arduino/avr-libc/malloc.c
arduino/avr-libc/realloc.c
arduino/WInterrupts.c
arduino/wiring_shift.c
arduino/wiring_pulse.c
arduino/wiring.c
arduino/wiring_digital.c
arduino/HID.cpp
arduino/Tone.cpp
arduino/USBCore.cpp
arduino/HardwareSerial.cpp
arduino/Stream.cpp
arduino/CDC.cpp
arduino/Print.cpp
arduino/WString.cpp
arduino/new.cpp
arduino/main.cpp
arduino/WMath.cpp
arduino/IPAddress.cpp
Linking libarduino.a
Linking firmware.elf
Converting to firmware.hex
  • Pada perintah di atas bisa terlihat tambahan opsi –cxxflags=”-ffreestanding”. Opsi tersebut digunakan untuk menghindari terjadinya error akibat fungsi utama (main) pada sketch yang telah dibuat bersifat void atau tidak memiliki nilai kembalian (return value).
  • Setelah proses build berhasil, hasilnya akan berada pada sub direktori .build. Untuk memeriksa hasil akhirnya, Anda dapat menggunakan aplikasi avr-size seperti ini:
% avr-size .build/leonardo/firmware.elf
   text    data     bss     dec     hex filename
    226       0       0     226      e2 .build/leonardo/firmware.elf
  • Bisa terlihat bahwa file yang dihasilkan cukup kecil yaitu 226 byte. Dan selanjutnya adalah melakukan upload ke board arduino (pada tutorial ini menggunakan leonardo). Karena versi Ino yang digunakan pada tutorial ini masih memiliki kekurangan dalam hal upload firmware untuk board leonardo, maka Anda dapat melakukannya secara manual yaitu dengan menekan tombol reset pada board leonardo untuk mengaktifkan bootloader lalu menggunakan avrdude untuk upload dengan perintah seperti ini:
% avrdude -patmega32u4 -cavr109 -P/dev/ttyACM0 -b57600 -D -Uflash:w:.build/leonardo/firmware.hex:i

Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
    Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.

Programmer supports the following devices:
    Device code: 0x44

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9587
avrdude: reading input file ".build/leonardo/firmware.hex"
avrdude: writing flash (226 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 226 bytes of flash written
avrdude: verifying flash memory against .build/leonardo/firmware.hex:
avrdude: load data flash data from input file .build/leonardo/firmware.hex:
avrdude: input file .build/leonardo/firmware.hex contains 226 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 226 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.
  • Sebenarnya Anda dapat mengaktifkan bootloader arduino leonardo tanpa menekan tombol reset, yaitu dengan membuka koneksi serial dengan baudrate 1200 lalu menutupnya.

Referensi

  • Ino tool
  • Ino command line toolkit for working with Arduino har

Arduino Infrared Decoder

Pada tutorial kali ini akan dibahas mengenai cara sederhana untuk men-decode remote infrared menggunakan arduino, serta contoh penggunaannya.

  • Berikut ini adalah daftar perangkat yang digunakan pada tutorial ini:
    • Arduino Leonardo
    • Sensor infrared (TSSOP17xx)
    • Remote infrared TV Toshiba (CT-90336)
    • Servo TowerPro SG-90 (Opsional)
  • Adapun pinout dari sensor infrared yang digunakan adalah sebagai berikut:
 GND -----.___
 Vs  -----|___)
 Out -----'
  • Langkah selanjutnya adalah menghubungkan arduino dengan sensor infrared dengan konfigurasi seperti ini:
Arduino Sensor Infrared
GND GND
5v Vs
Pin 2 Out
  • Selanjutnya kita akan melakukan decode terhadap sinyal infrared yang dikirimkan oleh remote. Untuk mempermudah, kita akan menggunakan sketch yang terdapat pada blog tronixstuff:
// example 32.1 - IR receiver code repeater
// http://tronixstuff.com/tutorials > chapter 32
// based on code by Ken Shirriff - http://arcfn.com

#include <IRremote.h>    // use the library
int receiver = 11;       // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
  Serial.begin(9600);    // for serial monitor output
  irrecv.enableIRIn();   // Start the receiver
}

void loop()
{
  if (irrecv.decode(&results))          // have we received an IR signal?
  {
    Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
    irrecv.resume();                    // receive the next value
  }                                     // Your loop can do other things while waiting for an IR command
}
  • Setelah sketch di atas diupload ke arduino, selanjutnya jalankan serial monitor pada IDE arduino dan tekan tombol pada remote infrared, maka akan terlihat kode yang dikirimkan oleh setiap tombol yang ditekan. Misalnya untuk remote TV Toshiba yang digunakan, tombol panah kiri mengirimkan kode yang nilai hexadesimalnya 0x2FD42BD dan tombol panah kanan mengirimkan kode yang nilai hexadesimalnya 0x2FD02FD.
  • Selanjutnya, kita dapat menggunakan remote infrared tersebut untuk mengendalikan hal lain, misalnya memanfaatkan remote infrared untuk mengendalikan servo.
  • Tutorial ini menggunakan servo TowerPro SG-90 dan berikut ini adalah koneksi yang digunakan ke arduino:
Arduino Servo TowerPro SG-90
GND GND (Kabel Warna Cokelat)
5v 5v (Kabel Warna Merah)
Pin 9 Signal (Kabel Warna Kuning)
  • Setelah menghubungkan servo dengan arduino, selanjutnya upload sketch yang berikut ini ke arduino:
#include <Servo.h>
#include <IRremote.h>

int pos = 0;
int RECV_PIN = 2;
int SERV_PIN = 9;

Servo srv;
IRrecv irx(RECV_PIN);
decode_results results;

void setup()
{
  irx.enableIRIn(); // Start the receiver
  srv.attach(9);    // Attach servo to pin 9
}

void loop() {
  if (irx.decode(&results)) {
    if (results.value == 0x2FD42BD) {
      pos += 10;
      if (pos > 90) { pos = 90; }
      srv.write(pos);
      delay(200);
    }
    else if (results.value == 0x2FD02FD) {
      pos -= 10;
      if (pos < 0) { pos = 0; }
      srv.write(pos);
      delay(200);
    }
    irx.resume(); // Receive the next value
  }
}
  • Setelah sketch tersebut diupload, Anda dapat menggunakan tombol panah kiri dan panah kanan pada remote infrared untuk mengendalikan servo ke arah kiri dan kanan. Perlu diingat, bahwa servo SG-90 ini pergerakannya terbatas yaitu 180 derajat (walaupun sebenarnya Anda dapat melakukan hardware hacking agar servo SG-90 dapat bergerak sejauh 360 derajat).
  • Sekian tutorial singkat kali ini, semoga bermanfaat.

Referensi

Troubleshooting Avrdude Dan Bus Pirate

Tutorial singkat ini akan membahas solusi error yang terjadi jika menggunakan avrdude pada bus pirate sebagai programmer. Pada tutorial ini avrdude yang digunakan adalah versi 6.1 dan bus pirate v4 dengan firmware v6.1 r1676.

Berikut ini adalah pesan error yang muncul ketika menggunakan avrdude dan bus pirate untuk melakukan pemeriksaan development board AVR:

% avrdude -v -c buspirate -p atmega328p -P /dev/ttyACM0

avrdude: Version 6.1, compiled on Jun 14 2014 at 07:40:00
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/etc/avrdude/avrdude.conf"
         User configuration file is "/home/rndc/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyACM0
         Using Programmer              : buspirate
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : BusPirate
         Description     : The Bus Pirate

Attempting to initiate BusPirate binary mode...
BusPirate binmode version: 1
BusPirate SPI version: 1
avrdude: Paged flash write enabled.
AVR Extended Commands version 0
avrdude: initialization failed, rc=-2
         Double check connections and try again, or use -F to override
         this check.

avrdude: warning: did not get a response to PowerDown command.
BusPirate reset failed. You may need to powercycle it.

Bisa terlihat bahwa avrdude gagal melakukan inisialisasi dan menyarankan untuk menggunakan opsi -F. Selanjutnya, kita akan menggunakan opsi -F seperti yang disarankan oleh avrdude, namun pesan error kembali muncul seperti ini:

% avrdude -v -c buspirate -p atmega328p -P /dev/ttyACM0 -F

avrdude: Version 6.1, compiled on Jun 14 2014 at 07:40:00
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/etc/avrdude/avrdude.conf"
         User configuration file is "/home/rndc/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyACM0
         Using Programmer              : buspirate
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : BusPirate
         Description     : The Bus Pirate

Attempting to initiate BusPirate binary mode...
BusPirate binmode version: 1
BusPirate SPI version: 1
avrdude: Paged flash write enabled.
AVR Extended Commands version 0
avrdude: initialization failed, rc=-2
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0xc877db
avrdude: Expected signature for ATmega328P is 1E 95 0F
BusPirate reset failed. You may need to powercycle it.

Solusi

Hal tersebut terjadi karena avrdude berusaha menggunakan mode binary pada bus pirate dan solusi untuk permasalahan tersebut adalah dengan menambahkan beberapa opsi khusus untuk bus pirate berikut ini:

-x ascii -x nopagedread -x nopagedwrite

Berikut ini adalah output dari avrdude setelah menambahkan opsi tersebut:

% avrdude -c buspirate -x ascii -x nopagedread -x nopagedwrite -p atmega328p -P /dev/ttyACM0

Attempting to initiate BusPirate ASCII mode...
**  Bus Pirate v4
**  Firmware v6.1 r1676
**  DEVID:0x1019 REVID:0x0004 (24FJ256GB106 UNK)
**  http://dangerousprototypes.com
**
BusPirate: using ASCII mode
avrdude: warning: did not get a response to PowerUp command.
avrdude: warning: Trying to continue anyway...
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f

avrdude: safemode: Fuses OK (E:05, H:DA, L:FF)
avrdude: warning: did not get a response to PowerDown command.

avrdude done.  Thank you.

Bisa terlihat bahwa setelah menambahkan opsi tersebut, avrdude dapat mengenali target development board. Sekian tutorial singkat kali ini, semoga bermanfaat.

Referensi

Iptables NAT Pada Kontainer OpenVz

Pengaturan Iptables NAT Pada Kontainer OpenVz

  • Matikan daemon OpenVz:
# /etc/init.d/vz stop
  • Edit /etc/vz/vz.conf seperti berikut ini:
IPTABLES="ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_state iptable_nat"
  • Aktifkan modul iptable_nat:
# modprobe ip_tables modprobe ip_conntrack modprobe iptable_filter modprobe ipt_state modprobe iptable_nat
  • Jalankan kembali OpenVz:
# /etc/init.d/vz restart
  • Login sebagai kontainer kemudian jalankan iptables (sesuaikan dengan konfigurasi yang Anda gunakan):
# vzctl enter 102

[root@mx1 /]# /etc/init.d/iptables restart

iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: nat mangle filte[ OK ]
iptables: Unloading modules:

Perbaikan Destination Host Prohibited pada OpenVz

  • Ada permasalahan yg sering terjadi ketika mengaktifkan table nat pada kontainer, yaitu Destination Host Prohibited. Hal tersebut terjadi karena firewall ip host tidak mengizinkan klien melakukan koneksi terhadap OS pada kontainer yang bersifat private sehingga dianggap ilegal:
ip os host: 10.10.7.1
ip os container: 10.10.7.101
ip os client: 10.10.7.100
  • Berikut ini adalah error yang muncul ketika IP kontainer melakukan ping terhadap IP klien, atau sebaliknya:
[root@mx1 /]# ping 10.10.7.100

PING 10.10.7.100 (10.10.7.100) 56(84) bytes of data.
From 10.10.7.1 icmp_seq=1 Destination Host Prohibited
From 10.10.7.1 icmp_seq=2 Destination Host Prohibited
^C
--- 10.10.7.100 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3689ms
  • Langkah penyelesaian yang dilakukan pada OS host, edit berkas /etc/sysconfig/iptables :
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
  • Aktifkan IP forward pada IP host:
net.ipv4.ip_forward = 1
  • Tambahkan rule iptables untuk mengizinkan forwarding pada alamat network container:
# iptables -t nat -A POSTROUTING -j SNAT --to-source 10.10.7.1
# iptables -A FORWARD -s 10.10.7.1/24 -j ACCEPT
# iptables -A FORWARD -d 10.10.7.1/24 -j ACCEPT
# service iptables save

  • Lihat konfigurasi /etc/sysconfig/iptables:
# Generated by iptables-save v1.4.7 on Sat Aug 10 21:30:30 2013
*nat

:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -j SNAT --to-source 10.10.7.1
COMMIT
# Completed on Sat Aug 10 21:30:30 2013
# Generated by iptables-save v1.4.7 on Sat Aug 10 21:30:30 2013
*mangle
:PREROUTING ACCEPT [1012:74184]
:INPUT ACCEPT [729:57326]
:FORWARD ACCEPT [2:168]
:OUTPUT ACCEPT [500:50616]
:POSTROUTING ACCEPT [500:50616]
COMMIT
# Completed on Sat Aug 10 21:30:30 2013
# Generated by iptables-save v1.4.7 on Sat Aug 10 21:30:30 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [29:2980]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited		<===== pindahkan
-A FORWARD -j REJECT --reject-with icmp-host-prohibited		<===== pindahkan
-A FORWARD -s 10.10.7.0/24 -j ACCEPT
-A FORWARD -d 10.10.7.0/24 -j ACCEPT
COMMIT
# Completed on Sat Aug 10 21:30:30 2013
  • Kemudian pindahkan icmp-host-prohibited pada bagian akhir berkas /etc/sysconfig/iptables:
# Generated by iptables-save v1.4.7 on Sat Aug 10 21:30:30 2013
*nat

:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -j SNAT --to-source 10.10.7.1
COMMIT
# Completed on Sat Aug 10 21:30:30 2013
# Generated by iptables-save v1.4.7 on Sat Aug 10 21:30:30 2013
*mangle
:PREROUTING ACCEPT [1012:74184]
:INPUT ACCEPT [729:57326]
:FORWARD ACCEPT [2:168]
:OUTPUT ACCEPT [500:50616]
:POSTROUTING ACCEPT [500:50616]
COMMIT
# Completed on Sat Aug 10 21:30:30 2013
# Generated by iptables-save v1.4.7 on Sat Aug 10 21:30:30 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [29:2980]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A FORWARD -s 10.10.7.0/24 -j ACCEPT
-A FORWARD -d 10.10.7.0/24 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sat Aug 10 21:30:30 2013
  • Sekian tutorials singkat ini, semoga bermanfaat.

Referensi

Arduino – Serial Arduino – SoftwareSerial Library pySerial GoSerial

Tutorial ini akan membahas cara menggunakan modul komunikasi RF 315MHz atau 433MHz. Pada prinsipnya kedua jenis modul tersebut bentuknya sama secara fisik, namun berbeda pada frekuensi kerjanya. Modul ini harganya cukup terjangkau sehingga cocok untuk digunakan untuk komunikasi menggunakan frekuensi radio (RF). Hal yang perlu diperhatikan jika menggunakan modul ini adalah kerentanannya terhadap noise yang dapat mengganggu komunikasi. Untuk tegangan, modul ini cukup fleksibel dan dapat bekerja pada rentang tegangan 3-12V sehingga dapat dengan mudah digunakan pada tegangan 5V sesuai dengan yang digunakan oleh arduino pada umumnya. Anda dapat menggunakan tegangan yang lebih tinggi jika ingin meningkatkan jangkauan modul ini, tentunya dengan tambahan beberapa komponen diskrit agar tidak merusak arduino yang Anda gunakan.

Modul RF315/433MHz yang umumnya beredar tidak dilengkapi dengan antenna sehingga jangkauannya hanya beberapa cm. Agar jangkauannya bisa jauh hingga ratusan meter, maka Anda perlu menyolder antenna ke modul tersebut. Anda dapat menggunakan kawat tembaga sebagai antenna. Adapun ukuran kawat yang digunakan untuk modul 315MHz adalah sekitar 23cm dan untuk modul 433MHz dapat menggunakan kawat dengan ukuran sekitar 17cm. Perlu diingat bahwa tutorial ini menggunakan 2 buah arduino, masing-masing untuk transmitter dan receiver. Jika Anda tidak memerlukan sesuatu yang kompleks, maka Anda dapat mengganti arduino dengan ATtiny85 atau yang lainnya. Sebelum melanjutkan ke proses implementasi, Anda terlebih dahulu harus mengenalipinout pada modul RF315/433MHz. Berikut ini adalah pinout pada modul transmitter dan receiver:

Arduino-rf433-pinout.jpg

Sedangkan tabel berikut ini merupakan tabel koneksi antara arduino dan modul RF315/433MHz (koneksi ini sama untuk modul transmitter dan receiver):

Arduino RF315/433MHz
GND GND
5v Vcc
Pin 10 Data

Contoh 1: Menggunakan Pustaka Manchester

Untuk implementasi pertama, akan digunakan pustaka manchester untuk mempermudah penggunaan modul RF315/433MHz. Pustaka manchester ini seperti namanya menggunakan manchester encoding untuk proses pengiriman data dan untuk menerjemahkan data yang diterima pada sisi receiver. Berikut ini adalah langkah-langkah untuk menggunakan pustaka ini:

  • Pindah ke sub direktori libraries pada direktori instalasi arduino dan lakukan kloning pustaka tersebut:
% git clone https://github.com/mchr3k/arduino-libs-manchester.git
  • Jalankan arduino IDE dan gunakan sketch berikut ini untuk arduino dan modul RF315/433 yang berfungsi sebagai transmitter (potongan kode ini merupakan modifikasi dari contoh yang terdapat pada pustaka manchester):
/**
 * Ini adalah sketch untuk transmitter. Hubungkan pin data pada
 * transmitter RF315/433 ke pin 2 pada arduino. Data yang akan
 * dikirim adalah string "hello world"
 */

#include <Manchester.h>                   // file header Manchester.h

#define TX_PIN    10                      // hubungkan pin 2 arduino ke pin data modul RF315/433
#define LED_PIN   13                      // LED pada board arduino berada pada pin 13
#define MSG_LEN   11                      // ukuran pesan yang akan dikirim

uint8_t stat = 1;                         // variabel untuk menyimpan status pengiriman data
uint8_t data[MSG_LEN] = {'h','e','l','l','o',' ','w','o','r','l','d'};   // variabel berisi data yang akan dikirim

void setup() {
  pinMode(LED_PIN, OUTPUT);               // atur pin 13 (LED pin) sebagai output
  man.setupTransmit(TX_PIN, MAN_1200);    // pengaturan pin arduino yang terhubung dengan modul RF315/433
}                                         // dan konstanta kecepatan pengiriman data

void loop() {
  man.transmitArray(MSG_LEN, data);       // lakukan pengiriman data dengan parameter berupa ukuran data
                                          // dan variabel yang berisi data yang akan dikirimkan.
  stat = ++stat % 2;                      // status pengiriman data akan digunakan untuk menyalakan atau
                                          // memadamkan LED pada arduino.
  digitalWrite(LED_PIN, stat);            // nyalakan atau padamkan LED pada arduino berdasarkan status
                                          // pengiriman data.
}
  • Selanjutnya, gunakan sketch berikut ini untuk sisi receiver:
/**
 * Ini adalah sketch untuk receiver. Hubungkan salah satu pin data pada
 * receiverRF315/433 ke pin 2 pada arduino. Data yang diterima akan
 * diteruskan ke serial monitor pada arduino.
 */

#include <Manchester.h>                     // file header Manchester.h

#define RX_PIN    10                        // hubungkan pin 2 arduino ke salah satu pin data modul RF315/433
#define LED_PIN   13                        // LED pada board arduino berada pada pin 13
#define BUF_LEN   11                        // ukuran variabel yang akan menerima pesan

uint8_t stat = 0;                           // variabel untuk menyimpan status penerimaan data
uint8_t data[BUF_LEN];                      // variabel yang akan menerima data yang dikirim

void setup() {
  pinMode(LED_PIN, OUTPUT);                 // atur pin 13 (LED pin) sebagai output
  digitalWrite(LED_PIN, stat);              // aktifkan pin LED sesuai dengan status pada variabel "stat"
  man.setupReceive(RX_PIN, MAN_1200);       // pengaturan pin arduino yang terhubung dengan modul RF315/433
                                            // dan konstanta kecepatan transmisi (penerimaan) data.
  man.beginReceiveArray(BUF_LEN, data);     // mulai lakukan penerimaan data dan simpan data yang diterima
                                            // pada variabel data sesuai dengan ukuran yang didefinisikan
                                            // pada BUF_LEN, yaitu 11 byte.
}

void loop() {
  if (man.receiveComplete())                // periksa apakah data telah selesai diterima
  {
      uint8_t receivedSize = 0;             //

      Serial.println((char *) data);        // tampilkan data yang diterima melalui serial yang dapat dilihat
                                            // pada serial monitor IDE arduino
      man.beginReceiveArray(BUF_LEN, data); // kembali menerima data selanjutnya.
      stat = ++stat % 2;                    // status penerimaan data akan digunakan untuk mengatur LED pada arduino
      digitalWrite(LED_PIN, stat);          // nyalakan atau padamkan LED pada arduino berdasarkan status penerimaan data
  }
}
  • Setelah mengunggah kedua sketch di atas ke arduino, letakkan arduino yang berfungsi sebagai transmitter pada lokasi yang agak jauh dan gunakan adapter atau baterai sebagai sumber tegangan. Sementara itu arduino yang berfungsi sebagai receiver Anda hubungkan ke komputer. Jalankan serial monitor pada IDE arduino untuk menerima pesan dari transmitter. Serial monitor akan menampilkan pesan hello world yang dikirimkan oleh transmitter seperti pada gambar di bawah ini:
Arduino-rf433-serial monitor.png

Contoh 2: Menggunakan Pustaka RadioHead

Pada contoh kedua ini, akan digunakan pustaka RadioHead yang merupakan pengembangan dari pustaka VirtualWire. Berikut ini adalah langkah-langkah untuk menggunakan pustaka ini:

  • Unduh terlebih dahulu pustaka RadioHead (ketika tutorial ini ditulis, versi terbaru adalah v1.53):
% wget -q http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.53.zip
  • Ekstrak arsip tersebut ke dalam sub direktori libraries pada direktori instalasi arduino (misalnya pada sub direktori ~/Arduino/libraries):
% unzip RadioHead-1.53.zip -d ~/Arduino/libraries
  • Jika menggunakan pustaka RadioHead, maka koneksi antara pin data pada modul transmitter dihubungkan dengan pin 12 pada arduino. Sedangkan pin data pada modul receiver dihubungkan dengan pin 11 pada arduino.
  • Berikut ini adalah contoh sketch untuk transmitter yang sama dengan contoh pertama di atas (sketch ini merupakan modifikasi dari contoh pada pustaka RadioHead):
#include <RH_ASK.h>                             // Header RadioHead menggunakan ASK (Amplitude Shift Keying)
#include <SPI.h>                                // Header SPI.h disertakan karena dibutuhkan oleh proses kompilasi

#define LED 13                                  // Definisi untuk pin LED pada arduino

RH_ASK driver;                                  // Inisialisasi driver pustaka RadioHead

void setup()
{
    pinMode(LED, OUTPUT);                       // Atur pin 13 (LED) pada arduino sebagai output
    Serial.begin(9600);                         // Untuk proses debugging
    if (!driver.init())                         // Jika proses inisialisasi gagal
         Serial.println("Inisialisasi gagal");  // Maka tampilkan pesan pada serial monitor
}

void loop()
{
    const char *msg = "hello world";            // Data/pesan yang akan dikirim

    digitalWrite(LED, HIGH);                    // Nyalakan LED sebagai tanda bahwa data akan dikirim
    driver.send((uint8_t *) msg, strlen(msg));  // Kirim data sesuai dengan ukurannya
    driver.waitPacketSent();                    // Tunggu hingga seluruh data terkirim
    digitalWrite(LED, LOW);                     // Padamkan LED sebagai tanda bahwa data telah terkirim
    delay(200);                                 // Tunggu selama 200 milidetik
}
  • Sedangkan sketch berikut ini adalah untuk receiver:
#include <RH_ASK.h>                           // Header RadioHead menggunakan ASK (Amplitude Shift Keying)
#include <SPI.h>                              // Header SPI.h disertakan karena dibutuhkan oleh proses kompilasi

#define LED 13                                // Definisi untuk pin LED pada arduino

RH_ASK driver;                                // Inisialisasi driver pustaka RadioHead

void setup()
{
  pinMode(LED, OUTPUT);                       // Atur pin 13 (LED) pada arduino sebagai output
  Serial.begin(9600);                         // Untuk proses debugging
  if (!driver.init())                         // Jika proses inisialisasi gagal
    Serial.println("Inisialisasi gagal");     // Maka tampilkan pesan pada serial monitor
}

void loop()
{
  uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];        // Variabel yang berfungsi untuk menyimpan data yang diterima
  uint8_t buflen = sizeof(buf);               // Variabel yang berfungsi untuk menyimpan ukuran data yang diterima

  if (driver.recv(buf, &buflen))              // Jika ada data yang diterima
  {
    digitalWrite(LED, HIGH);                  // Nyalakan LED sebagai indikasi data diterima
    driver.printBuffer("Data:", buf, buflen); // Maka tampilkan data yang diterima ke serial monitor dalam format heksadesimal
    digitalWrite(LED, LOW);                   // Padamkan LED setelah data dikirim ke serial monitor
  }
}
  • Berikut ini adalah data yang diterima pada sisi receiver dan ditampilkan pada serial monitor IDE arduino:
Arduino-rf433-radiohead ask.png

Kedua contoh di atas hanya sebagai pengantar penggunaan modul RF315/433MHz. Selanjutnya, Anda dapat mengembangkan tutorial ini misalnya dengan mengirimkan data dari sensor menggunakan modul RF315/433MHz.

Sekian tutorial kali ini, semoga bermanfaat. Selanjutnya, Anda dapat mengembangkan tutorial ini untuk sesuai dengan ide dan kreatifitas yang Anda miliki. Terima kasih kepada Tuhan Yang Esa, Maxindo, N3 dan Anda yang telah membaca tutorial ini.

Referensi