Search

Wednesday, October 12, 2016

[MICROCONTROLLER][ARDUINO][TUTORIAL] Jumlah LED maksimal yang dapat dikontrol oleh ARDUINO (UNO) - Bonus KnightRider LED

Tutorial ini menunjukkan jumlah maksimal LED yang dapat dikontrol secara langsung menggunakan pin digital Arduino (UNO). Dan apakah semua LED dapat menyala bersamaan?

KEBUTUHAN PERANGKAT
  • Arduino (uno)
  • LED (12 buah)
  • Resistor 220 ohm maks 1 kilo-ohm (12 buah)
  • kabel jumper (warna-warni)
SIRKUIT
  • Untuk menghubungkan 1 buah LED ke arduino, silakan lihat tutorial Blinking LED. Silakan duplikat rangkaian LED tsb hingga berjumlah 12 buah rangkaian. Masing2 kaki positif-nya dihubungkan ke pin digital D2 hingga D13. Pin D0 dan D1 tidak dapat digunakan sebagai output dikarenakan sudah memiliki fungsi khusus sebagai RX dan TX.

SKEMATIK

Lihat rangkaian skematik di Blinking LED.

KODE

Setelah membuat rangkaian sirkuitnya:
  • sambungkan Arduino ke komputer
  • jalankan Arduino Software (IDE). Jika belum terinstal, silakan didownload disini.
  • masukkan kode berikut:
//#define _CDEBUG_ // uncomment for DEBUGGING
#define LED_NUM 12
int aLedPin[LED_NUM] = {13,12,11,10,9,8,7,6,5,4,3,2}; // PIN D0 & D1 can not be set as OUTPUT because of dedicated function as RX & TX
int i = 0, iPos = 0;
int iDir = 1;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  for (i=0; i<LED_NUM; i++) {
    pinMode(aLedPin[i], OUTPUT);
    digitalWrite(aLedPin[i], LOW);
  }
}

void loop() {
  // test all LEDs are blinking simulatenously?
  //LEDAllBlinks(); // uncomment to display blinking 12-LEDs
  
  // knight rider led
  LEDKnightRider(); // uncomment to display Knight Rider LED (using 12 LEDs)
}

void LEDKnightRider() {
#ifdef _CDEBUG_
  Serial.println(iPos);
#endif
  digitalWrite(aLedPin[iPos], HIGH);
  delay(50);
  digitalWrite(aLedPin[iPos], LOW);
  iPos = iPos + iDir;
  if ((iPos == LED_NUM - 1) || (iPos == 0)) {
    iDir = iDir * -1;
  }
}

void LEDAllBlinks() {
  for (i=0; i<LED_NUM; i++) {
    digitalWrite(aLedPin[i], HIGH);
  }
  delay(1000);
  for (i=0; i<LED_NUM; i++) {
    digitalWrite(aLedPin[i], LOW);
  }
  delay(1000);
}

VIDEO

Berikut adalah video hasil tutorial diatas:

12-LEDs are blinking simultaneously

Knight Rider LED (12-LEDs)

SUMBER
https://www.arduino.cc/en/Tutorial/Blink

Selamat mencoba!

Wednesday, October 5, 2016

[MICROCONTROLLER][ARDUINO][TUTORIAL] Kontrol Arduino menggunakan BLYNK (via USB serial)

Mengontrol arduino via handphone (android /iOS) sepertinya sih keren ya. Tapi susah gak sih? Mesti develop aplikasi di android/iOS secara khusus? Cara komunikasinya pake apa? Lama dong?
Pertanyaan-pertanyaan seperti itu pasti terlintas. Tak jarang, keraguan yang akhirnya juga dapat menjadi motif urungnya melanjutkan niatan diatas.
Dengan menggunakan BLYNK yang menyediakan dashboard berisi bermacam-macam widget, hal itu tidak lagi jadi masalah, bahkan tidak sampe 1 menit (seperti iklan video-nya), kita sudah dapat mengontrol Arduino via handphone (android/iOS).

Untuk kali ini, saya akan mencoba mengontrol arduino saya dengan rangkaian yang saya buat di artikel saya sebelumnya.

KEBUTUHAN PERANGKAT
  • Lihat kebutuhan perangkat di artikel ini
  • handphone (android/iOS). Saya menggunakan handphone android (Nexus 5).
  • koneksi internet dari laptop/komputer akan kita pakai
SIRKUIT
Menggunakan sirkuit yang ada di artikel ini.

LANGKAH-LANGKAH
  • Install BLYNK di handphone. Download BLYNK (android/iOS). Buat account di BLYNK atau login dengan account facebook.
  • Setelah berhasil login, buat proyek baru di BLYNK dan tambahkan widget Button dan Value. Silakan tambahkan widget lainnya sesuai kebutuhan. Yang perlu diingat adalah BLYNK free-version menyediakan sejumlah saldo nilai energi, dimana 1 widget seharga nilai energi tertentu. Klo saldo nilai energi ini, habis atau tidak mencukupi, maka kita tidak akan bisa menambahkan widget ke proyek. Jangan lupa mengirimkan AUTH TOKEN (yg ada di kotak merah) ke e-mail anda. AUTH TOKEN ini nantinya diperlukan untuk dimasukkan ke kode program ARDUINO-nya sebagai pengenal proyek ini.
BLYNK: Project Settings
BLYNK: Project Settings

BLYNK: Project view

BLYNK: Widgets

BLYNK: Widget Button Settings

BLYNK: Widget Value Display Settings

BLYNK juga sudah menyediakan in-app purchase untuk tambahan sejumlah nilai energi tertentu dengan harga tertentu.


  • Download BLYNK library. Saya menggunakan library yang ini.
  • Ekstrak file .zip dan copy-paste-kan semua folder ke folder {instalasi arduino}/libraries.
  • Masukkan AUTH TOKEN ke kode arduino (lihat di bagian kode di bawah)
  • Upload kode ke Arduino
  • Buka console windows, dan pindah ke folder {instalasi arduino}/libraries/Blynk/scripts
  • edit file blynk-ser.bat. Ubah nilai serial COM. Sesuaikan dengan nomor port serial Arduino Anda. Untuk kasus saya, COM8 adalah port serial Arduino saya.
  • Jalankan file blynk-ser.bat
  • Dan kini, Andapun sudah dapat mengontrol LED di Arduino dan menampilkan jarak yang dideteksi ULTRASONIC SENSOR secara online-realtime.
KODE
Berikut kode yang saya pakai:
#include <SoftwareSerial.h>
SoftwareSerial DebugSerial(2, 3); // RX, TX

#define BLYNK_PRINT DebugSerial
#include <BlynkSimpleStream.h>
#include <SimpleTimer.h>
#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

int distance = 0;
SimpleTimer timer;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "AUTH_TOKEN_PROYEK_ANDA";

void myTimerEvent()
{
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  distance = sonar.ping_cm();
  Blynk.virtualWrite(V1, distance);
  Blynk.virtualWrite(V2, distance);
  Blynk.virtualWrite(V3, distance);
}

void setup()
{
  // Debug console
  DebugSerial.begin(9600);

  // Blynk will work through Serial
  Serial.begin(9600);
  Blynk.begin(auth, Serial);
  
  // Setup a function to be called every second
  timer.setInterval(1000L, myTimerEvent);
}

void loop()
{
  Blynk.run();
  timer.run(); // Initiates SimpleTimer
}

TIPS: masukkan AUTH TOKEN proyek Anda menggantikan teks AUTH_TOKEN_PROYEK_ANDA.
VIDEO
Berikut video hasil tutorial ini.


REFERENSI

Selamat mencoba!

Tuesday, October 4, 2016

[MICROCONTROLLER][ARDUINO][TUTORIAL] Ultrasonic Sensor

Jika Anda pecinta mokit/gunpla maupun figure statue yang memiliki LED, mungkin proyek ini cocok bagi Anda yang menghendaki LED menyala secara otomatis jika ada orang yang mendekati mokit/gunpla maupun figure statue Anda, dan secara otomatis pula LED akan mati untuk periode waktu tertentu (dan tentunya LED akan tetap menyala jika orang tersebut tetap terdeteksi berada di sekitar objek tersebut). Nah, jika Anda menghendaki mekanisme deteksi yang akan digunakan adalah jarak orang dengan objek, maka kita dapat menggunakan sensor jarak berbasis ULTRASONIC.

KEBUTUHAN PERANGKAT
  • Arduino (uno)
  • sensor ultrasonic (HC-SR04)
  • kabel jumper (warna-warni)
  • mokit/gunpla/figure statue. Dalam tutorial ini, penulis menggunakan figure statue bust ironman yang memiliki LED di MATA dan ARC REACTOR-nya. Figure statue yang digunakan ini sudah memiliki rangkaian internal yang menggunakan tenaga batere yang secara terus-menerus akan menyala jika sudah di-ON-kan. Tapi kalo hanya seperti itu, kurang menarik kan? Selain itu juga tidak hemat energi.
SIRKUIT
  • TIPS: Untuk menghubungkan titik satu ke titik lainnya yang berjauhan, silakan gunakan kabel jumper dengan warna kesukaanmu. Akan tetapi, sebaiknya gunakan warna tertentu untuk membedakan arus positif dan negatif. 


SKEMATIK


KODE

Setelah membuat rangkaian sirkuitnya:
  • sambungkan Arduino ke komputer
  • jalankan Arduino Software (IDE). Jika belum terinstal, silakan didownload disini.
  • masukkan kode berikut:
// ---------------------------------------------------------------------------
// LED-ON using Sonar
// ---------------------------------------------------------------------------

#include <NewPing.h>

#define LED_PIN 13 // Arduino pin tied to trigger pin on LED.
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
#define REQUIRE_DISTANCE 20 // // cm - maximal required distance to triger LED
#define MAX_INTERVAL_ON 5000 // ms - change this value for LED interval

bool bON = false;
int distance = 0;
unsigned long ulFirstCT = 0;
unsigned long ulCT = 0;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  while (!Serial) delay(1);
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
  DoLED(LOW);
}

void loop() {
  // sonar
  distance = sonar.ping_cm();
  //Serial.println("d = " + String(distance)); // uncomment for DEBUGGING
  if (distance > 0 && distance <= REQUIRE_DISTANCE) {
    if (!bON) {
      // light-UP
      DoLED(HIGH);
      ulFirstCT = millis();
    }
    bON = true;
  }
  else { // not in range
    bON = false;
  }

  // check ON-timer
  if (!bON) {
    ulCT = millis();
    if (ulCT - ulFirstCT >= MAX_INTERVAL_ON) {
      DoLED(LOW);
      bON = false;
    }
  }

  // breathe
  delay(5);
}

void DoLED(int state) {
  digitalWrite(LED_PIN, state);
}


  • TIPS: untuk NewPing library dapat didownload disini.


VIDEO

Video hasil tutorial ini dapat dilihat YouTube:




Selamat mencoba!