Sabtu, 10 Juni 2017

Cara Mudah Install Magic Lantern di Canon EOS 600D

Apa itu Magic Lantern? Magic Lantern atau ML adalah sebuah software/plugin tambahan untuk kamera DSLR Canon.. Magic Lantern ini di buat oleh sekelompok orang yang menyukai kamera DSLR merek Canon.. Dengan Magic Lantern pengguna kamera Canon EOS versi terntentu bisa membuat foto dan video HDR, timelapse, motion detection, focus assist tools, manual audio control dan masih banyak lagi.... 

Magic Lantern ini bisa di bilang plugin pada firmware bawaan kamera DSLR Canon dan hanya terinstall di kartu memori... Jadi tidak merubah firmware bawaan aslinya... Kamera DSLR Canon yang sudah mendukung tambahan fitur ini adala Canon seri 550D, 60D, 600D, 500D, 50D dan 5D... 

Dengan menginstal Magic Lantern pengguna dapat melakukan upgrade DSLR Canon yang memiliki fitur standar menjadi luar biasa.... Fitur Audio yang dimiliki Canon yang tadinya menggunakan AGC (Auto Gain Level), yang menyebabkan suara noise yang terekam menjadi keras, bisa dihilangkan karena ML (Magic Lantern) memiliki fitur AGC Off... 
  1. Saya akan mencoba menginstall Magic Lantern di CAnon EOS 600D... Pertama download firmware terbaru dari Canon di sitius resminya disini Firmware CanonEOS 
  2. Format Kartu memori yang di gunakan, backup dulu data data photo kedalam smartpone atau komputer... Lakukan Clear Setting dan Format kartu memori dengan Low Level Format di kamera Canon... Kemudian lepaskan kartu memori dan masukan ke PC.. 
  3. Download versi terbaru Magic Lantera sesuai dengan versi Canon EOS yang di gunakan di situs resminya disini Setelah itu ekstrak di kartu memori.. 
  4. Pasang kembali kartu memori yang sudah terinstall Magic Lantern kedalam kamera... Tekan tombol Menu, masuk menu ke 3 dari kanan, pilih paling bawah Firmware Ver. x.x.x 
  5. Tunggu proses installasi sedang berjalan, tunggu sampai selesai kemudian matikan kamera dan hidupkan kembali...
Sekarang kamera Canon EOS sudah terinstall di kamera.. Perlu di ingat Magic Lantern ini hanya terinstall di kartu memori sehingga saat menggunakan kartu memori lain, Magic Lantern tidak akan berfungsi... Untuk mengakses fitur fitur di Magic Lantern ini bisa dengan menekan tombol delete “tong sampah” pada kamera....


Komunikasi Serial Pada Arduino

Komunikasi serial adalah komunikasi yang pengiriman datanya per-bit secara berurutan dan bergantian. Komunikasi ini mempunyai suatu kelebihan yaitu hanya membutuhkan satu jalur dan kabel yang sedikit dibandingkan dengan komunikasi paralel. Pada prinsipnya komunikasi serial merupakan komunikasi dimana pengiriman data dilakukan per bit sehingga lebih lambat dibandingkan komunikasi parallel, atau dengan kata lain komunikasi serial merupakan salah satu metode komunikasi data di mana hanya satu bit data yang dikirimkan melalui seuntai kabel pada suatu waktu tertentu. Pada dasarnya komunikasi serial adalah kasus khusus komunikasi paralel dengan nilai n = 1, atau dengan kata lain adalah suatu bentuk komunikasi paralel dengan jumlah kabel hanya satu dan hanya mengirimkan satu bit data secara simultan.Hal ini dapat disandingkan dengan komunikasi paralel yang sesungguhnya di mana n-bit data dikirimkan bersamaan, dengan nilai umumnya 8 ≤ n ≤ 128.


Komunikasi serial ada dua macam, asynchronous serial dan synchronous serial.Synchronous serial adalah komunikasi dimana hanya ada satu pihak (pengirim atau penerima) yang menghasilkan clock dan mengirimkan clock tersebut bersama-sama dengan data. Contoh pengunaan synchronous serial terdapat pada transmisi data keyboard. Asynchronous serial adalah komunikasi dimana kedua pihak (pengirim dan penerima) masing-masing menghasilkan clock namun hanya data yang ditransmisikan, tanpa clock. Agar data yang dikirim sama dengan data yang diterima, maka kedua frekuensi clock harus sama dan harus terdapat sinkronisasi. Setelah adanya sinkronisasi, pengirim akan mengirimkan datanya sesuai dengan frekuensi clock pengirim dan penerima akan membaca data sesuai dengan frekuensi clock penerima. Contoh penggunaan asynchronous serial adalah pada Universal Asynchronous Receiver Transmitter (UART) yang digunakan pada serial port (COM) komputer.

Contoh Dasar Komunikasi Serial Mengirim Data Teks:


void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print(“Hello World”);
delay(2000);
}

Penjelasan Singkat Koding Program 
Serial.begin(9600); -> Menentukan kecepatan baca data serial (Baud Rate) Serial.print(“Hello World”); -> Untuk mencetak kalimat pada komunikasi 
Serial Delay(2000); ->Memberikan waktu jeda 2 detik

1. Serial.available()


Digunakan untuk menyatakan angka, bytes atau karakter yang sudah siap dibaca dari serial port. Data ini adalah data yang telah diterima dan disimpan dalam serial receive buffer. Serial receive buffer dapat menampung 64 bytes data. Berikut ini contoh penulisan instruksi available.


int dataterkirim = 0;
void setup() { 
Serial.begin(9600);
}
void loop() {   
if (Serial.available() > 0) {   
dataterkirim = Serial.read();   
Serial.print("saya menerima data: ");   
Serial.println(dataterkirim, DEC);  
}
}

2. Serial.begin()


“begin()” digunakan untuk mengatur baudrate / kecepatan transmisi data. Beberapa pilihan kecepatan komunikasi data yang dapat digunakan pada board arduino adalah 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 atau 115200. Pengaturan baudrate dilakukan pada bagian setup(). Berikut ini format penulisan dan contoh program “begin()”

void setup() { 
Serial.begin(9600);
}

3. Serial.end()


Perintah “serial.end()” digunakan untuk menutup komunikasi serial port. Berikut format penulisan dan contoh program. Untuk membuka kembali komunikasi serial port dapat menggunakan perintah “Serial.begin()”.

4. Serial.find()

Perintah “Serial.find() digunakan untuk membaca data dari serial port buffer hingga target yang ditentukan dalam perintah “Serial.find()” terpenuhi. Fungsi akan bernilai benar jika target tercapai dan bernilai salah jika target tidak tercapai. Berikut ini contoh penulisan program “Serial.find()”. 


5. Serial.print() 

Perintah “Serial.print” digunakan untuk menampilkan data ke serial monitor. Data yang ditampilkan dapat berupa karakter, bytes, atau angka. Berikut ini beberapa contoh perintah “serial.print()”.


Serial.print(78) // mencetak "78"
Serial.print(1.23456) // mencetak "1.23"
Serial.print('N') // mencetak "N"
Serial.print("Hello world.") // mencetak "Hello world."
Serial.print(78, BIN) // mencetak "1001110"
Serial.print(78, OCT) // mencetak "116"
Serial.print(78, DEC) // mencetak "78"
Serial.print(78, HEX) // mencetak "4E"
Serial.println(1.23456, 0) // mencetak "1"
Serial.println(1.23456, 2) // mencetak "1.23"
Serial.println(1.23456, 4) // mencetak "1.2346"

Terdapat 2 macam yaitu Serial.print dan Serial.println. perbedaannya adalah jika “Serial.print” akan menampilkan data di serial monitor dalam satu baris, tetapi perintah “Serial.println” akan menampilkan data di serial monitor pada baris baru. 

6. Serial.read() 

Perintah “Serial.read()” digunakan untuk membaca data dari serial port. Berikut contoh penulisan perintah “Serial.read()”


void loop() {   
if (Serial.available() > 0) {   
dataterkirim = Serial.read();   
Serial.print("saya menerima data: ");   
Serial.println(dataterkirim, DEC);  
}
}

7. Serial.write() 

Perintah “Serial.write” digunakan untuk membaca data biner dari serial port. Data ini dikirim dalam bentuk byte atau deretan data byte. Contoh penulisan perintah “Serial.write”


void setup(){   
Serial.begin(9600);
}
void loop(){   
Serial.write(45);    
int bytesSent = Serial.write(Test Serial);
} 


Selain fungsi-fungsi komunikasi yang telah disebutkan diatas terdapat beberapa fungsi lain seperti: 

  • if (Serial) : Untuk mengecek apakah Port sudah siap 
  • Serial.flush(): menunggu data terkirim semua 
  • Serial.parseFloat(): mengambil data float pertama dari data di buffer serial. 
  • serial.parseInt(): mengambil data integer pertama dari data di buffer serial. 
  • Serial.peek(): mengambil data berikutnya di bufer penerima 
  • Serial.setTimeout(): mengeset batas maksimum waktu tunggu(timeout) transmisi data. 
  • Serial.serialEvent(): fungsi ini akan dipanggil jika data datang/diterima.berlaku spt interupsi serial.

Mengendalikan Stepper Motor dengan Potensio pada Arduino

Stepper motor merupakan motor yang dapat dikendalikan banyaknya putaran dan derajat perputarannya dengan menggunakan mikrokontroller. dan kali ini kita akan mengendalikan perputaran stepper motor dengan potensiometer pada arduino

Bahan yang diperlukan:

  • Arduino uno
  • 10k Ohm potensiometer
  • Stepper motor
  • ULN2004A
  • Kabel jumper
Gambar rangkaian:


Sourcecode:


/*
 * MotorKnob
 *
 * A stepper motor follows the turns of a potentiometer
 * (or other sensor) on analog input 0.
 *
 * http://www.arduino.cc/en/Reference/Stepper
 * This example code is in the public domain.
 */

#include "stepper.h"

// change this to the number of steps on your motor
#define STEPS 100

// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 8, 9, 10, 11);

// the previous reading from the analog input
int previous = 0;

void setup() {
  // set the speed of the motor to 30 RPMs
  stepper.setSpeed(30);
}

void loop() {
  // get the sensor value
  int val = analogRead(0);

  // move a number of steps equal to the change in the
  // sensor reading
  stepper.step(val - previous);

  // remember the previous value of the sensor
  previous = val;
}

Menambah Pin PWM pada Arduino Dengan TLC5940

PWM merupakan fitur arduino yang sangat populer untuk mengendalikan led, namun arduino hanya memiliki sedikit pin yang dapat memproses PWM. Untuk itu kita dapat menambahnya dengan ic TLC5940 yang merupakan ic 16 channel PWM untuk driver led, motor, ataupun servo.



Fitur TLC5940:



  • VCC = 3 - 5 v
  • 16 channel
  • 12 bit (4096 Steps) PWM Control
  • Driving Capability 
             – 0 mA to 120 mA (VCC > 3.6V)
             – 0 mA to 60 mA (VCC < 3.6V)
  • Serial Data Interface
  • 30 MHz Data Transfer Rate
Rangkaian Arduino dan TLC5940





Library
Download disini


Sourcecode


/*
 * Arduino and TLC5940 Tutorial - Simple Example
 * by Dejan Nedelkovski, www.HowToMechatronics.com
 */
#include "Tlc5940.h" 
void setup() {
  Tlc.init(0); // Initiates the TLC5940 and set all channels off
}
 
void loop() {
  Tlc.set(0,4095); //(Output Pin from 0 to 15,PWM Value from 0 to 4095)
  // Note: The previous function doesn't activates the output right away. The output will be activated when the Tlc.update() function will be executed!
  
  Tlc.update(); // Activates the previously set outputs
  delay(1000);
  // For activating all 16 outputs at the same time we can use a for loop for setting all of them to be set to PWM value of 4095. Then  the Tlc.updata() function will active them all at the same time.
  for (int i = 0; i < 16; i++) {
    Tlc.set(i, 4095);
  }
  Tlc.update();
  delay(1000);
  //The Tlc.clear() function clears all the outputs, or sets the PWM value of all outputs to 0
  Tlc.clear();
  Tlc.update();
  delay(1000);
  // This for loop will active all 16 LEDs one by one
  for (int i = 0; i < 16; i++) {
    Tlc.set(i, 4095);
    Tlc.update();
    delay(200);
    Tlc.clear();
    Tlc.update();
    delay(200);
  }
}

Program LCD i2C 16x2 Menggunakan Arduino

Menggunakan LCD pada Arduino sudah menjadi hal yang biasa untuk prototipe proyek, namun penggunaan lcd pada arduino memakan banyak pin, untuk menghematnya kita bisa menggunakan modul I2C hanya menggunakan 2 pin saja. 

Bahan yang diperlukan:

  • Arduino Uno
  • LCD 16x2
  • I2C
  • Kabel Jumper
Gambar Rangkaian:


Library

Download disini

Sourcecode



#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27 ,2,1,0,4,5,6,7,3, POSITIVE);
//Ubah alamat 0x27 dengan alamat i2C kamu
void setup(){
  lcd.begin (16,2); //LCD untuk ukuran 16x2
  }
void loop(){  
  lcd.setCursor(0, 0); //baris pertama   
  lcd.print("TEST LCD i2C");    
  lcd.setCursor(0, 1); //baris kedua   
  lcd.print("Hello World");
}

Mengenal Komunikasi I2C(Inter Integrated Circuit)

Inter Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya. Piranti yang dihubungkan dengan sistem I2C Bus dapat dioperasikan sebagai Master dan Slave. Master adalah piranti yang memulai transfer data pada I2C Bus dengan membentuk sinyal Start, mengakhiri transfer data dengan membentuk sinyal Stop, dan membangkitkan sinyal clock. Slave adalah piranti yang dialamati master. 

Sinyal Start merupakan sinyal untuk memulai semua perintah, didefinisikan sebagai perubahan tegangan SDA dari “1” menjadi “0” pada saat SCL “1”. Sinyal Stop merupakan sinyal untuk mengakhiri semua perintah, didefinisikan sebagai perubahan tegangan SDA dari “0” menjadi “1” pada saat SCL “1”. Kondisi sinyal Start dan sinyal Stop seperti tampak pada Gambar 1.


Gambar 1. Kondisi sinyal start dan stop


Sinyal dasar yang lain dalam I2C Bus adalah sinyal acknowledge yang disimbolkan dengan ACK Setelah transfer data oleh master berhasil diterima slave, slave akan menjawabnya dengan mengirim sinyal acknowledge, yaitu dengan membuat SDA menjadi “0” selama siklus clock ke 9. Ini menunjukkan bahwa Slave telah menerima 8 bit data dari Master. Kondisi sinyal acknowledge seperti tampak pada Gambar 2.


Gambar 2. Sinyal ACK dan NACK

Dalam melakukan transfer data pada I2C Bus, kita harus mengikuti tata cara yang telah ditetapkan yaitu: 

  • Transfer data hanya dapat dilakukan ketikan Bus tidak dalam keadaan sibuk. 
  • Selama proses transfer data, keadaan data pada SDA harus stabil selama SCL dalam keadan tinggi. Keadaan perubahan “1” atau “0” pada SDA hanya dapat dilakukan selama SCL dalam keadaan rendah. Jika terjadi perubahan keadaan SDA pada saat SCL dalam keadaan tinggi, maka perubahan itu dianggap sebagai sinyal Start atau sinyal Stop.

Gambar 3. Trasfer Bit pada I2C bus

Kontrol Servo Dengan Arduino

Motor servo adalah sebuah motor dengan sistem umpan balik tertutup dimana posisi dari motor akan diinformasikan kembali ke rangkaian kontrol yang ada di dalam motor servo. Motor ini terdiri dari sebuah motor DC, serangkaian gear, potensiometer dan rangkaian kontrol. Potensiometer berfungsi untuk menentukan batas sudut dari putaran servo. Sedangkan sudut dari sumbu motor servo diatur berdasarkan lebar pulsa yang dikirim melalui kaki sinyal dari kabel motor. 

Secara umum terdapat 2 jenis motor servo. Yaitu motor servo standard dan motor servo Continous. Servo motor tipe standar hanya mampu berputar 180 derajat. Motor servo standard sering dipakai pada sistim robotika misalnya untuk membuat " Robot Arm" ( Robot Lengan ). sedangkan Servo motor continuous dapat berputar sebesar 360 derajat. motor servo Continous sering dipakai untuk Mobile Robot. Pada badan servo tertulis tipe servo yang bersangkutan. Motor servo standar yang kali ini dipakai memiliki 3 buah kabel yaitu, power, ground dan signal.


  • Kabel warna merah merupakan kabel power yang berfungsi untuk mengkoneksikan dengan tegangan 5V pada board arduino. 
  • Kabel yang berwarna coklat/hitam merupakan kabel ground yang nantinya akan dihubungkan dengan ground yang ada pada board arduino. 
  • Kabel kuning yang merupakan kabel pin signal servo yang akan dihubungkan dengan pin 9 pada board arduino. 
Alat dan Bahan

  • Arduino Uno
  • Servo
  • Kabel Jumper

Gambar Rangkaian




Sourcecode


/** Workshop Dasar Mikrokontroler
2014 RADE - Robotics AnD Embedded Systems STMIK STIKOM Bali 
**/
#include  
// membuat nama objek servo untuk pengontrolan servo 
Servo myservo;          
// variable untuk menyimpan posisi servo 
int pos = 0;            
void setup() 
{ 
 // objek servo diletakan pada pin 9 
 myservo.attach(9);     
} 
void loop() 
{ 
 // start dari 0 derajar sampai 180 derajat 
 for(pos = 0; pos < 180; pos += 1)  
 {
  // pada posisi 1 derajat
  // memberitahu servo untuk pergi ke posisi  'pos'
  myservo.write(pos);
  // tunggu 15ms untuk pencapaian  posisi servo    
  delay(15);                  
 } 
 // start dari 180 derajat ke 0 derajat 
 for(pos = 180; pos>=1; pos-=1)  
 {
  // memberitahu servo untuk pergi ke posisi  'pos'                                
  myservo.write(pos);                 
  // tunggu 15ms untuk pencapaian  posisi servo    
  delay(15);                        
 }
}