Translate

Membuat Alat Penunjuk Arah Mata Angin Dengan Mikrokontroller

Membuat Alat Penunjuk Arah Mata Angin Dengan Mikrokontroller


               Pada kesempatan yang berbahagia ini saya akan menjelaskan mengenai bagaimana cara membuat alat untuk mengetahui arah angin atau arah mata angin, sebenarnya prinsip kerjanya sangatlah sederhana yaitu petunjuk arah mata angin dibagi kedalam 4 buah warna, tiap warna mewakili satu sudut arah mata angin,misal warna hitam menunjukkan arah sudut 220 derajat, begitu pula dengan warna lainnya. sensor yang digunakan adalah sensor warna TCS230 dan sensor HMC5883L untuk magnetometernya. berikut penjelasan lebih lanjutnya.


a. Minimum System 




 b. Sensor TCS230




c. Sensor HMC5883L




d. Motor Stepper 5V + Driver ULN2003




e. Program Bascom AVR

$regfile = "m32def.dat"
$crystal = 12000000
$baud = 9600

$hwstack = 40
$swstack = 16
$framesize = 32

Config Lcdpin = Pin , Rs = Portc.6 , E = Portc.7 , Db4 = Portc.2
Config Lcdpin = Pin , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2

Cls
Cursor Off


' **** inisialisasi penggunaan pin pada sensor warna
Config Portc = Output
Config Portd.6 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.7 = Input
Portd.7 = 1
Outhz Alias Pind.7
S2 Alias Portd.6
S3 Alias Portd.2
S0 Alias Portd.3
S1 Alias Portd.4
Oe Alias Portd.5

Ddrb.0 = 1
Ddrb.1 = 1
Ddrb.2 = 1
Ddrb.3 = 1

Ddra.0 = 0
Ddra.1 = 0
Ddrd.2 = 0

Porta.0 = 1
Porta.1 = 1
Portd.2 = 1

Tmbdown Alias Pina.1
Tmbok Alias Pind.2
Tmbup Alias Pina.0


'*** inisialisasi frequensi
Dim Tanda1detik As Bit
Dim Frequensi As Word
Dim Fmerah As Word
Dim Fhijau As Word
Dim Fbiru As Word
Dim Fputih As Word
Dim Merah As Integer , Hitam As Integer , Hijau As Integer , Orange As Integer
Dim Merahx As Eram Integer , Hitamx As Eram Integer , Hijaux As Eram Integer , Orangex As Eram Integer
Dim Merahs As Integer , Hitams As Integer , Hijaus As Integer , Oranges As Integer
Dim Merahsx As Eram Integer , Hitamsx As Eram Integer , Hijausx As Eram Integer , Orangesx As Eram Integer
Dim K As Integer

K = 5

Main:

Portc = 255
' inisialisasi penggunaan timer 1/4 detik untuk penghitung frekuensi
Config Timer1 = Timer , Prescale = 256
Const Inisial = &HAE80                                      '5740
On Timer1 Timer1_isr                                        ' timer0 overflow interrupt
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Disable Timer1                                              ' aktifkan timer enable Ovf0
Enable Interrupts                                           ' aktifkan semua interup

S0 = 0
S1 = 1

Oe = 0



'=====[ Global Vars & Constants ]========
Dim Hmc_x As Integer
Dim Hmc_xl As Byte At Hmc_x + 0 Overlay
Dim Hmc_xh As Byte At Hmc_x + 1 Overlay

Dim Hmc_y As Integer
Dim Hmc_yl As Byte At Hmc_y + 0 Overlay
Dim Hmc_yh As Byte At Hmc_y + 1 Overlay

Dim Hmc_z As Integer
Dim Hmc_zl As Byte At Hmc_z + 0 Overlay
Dim Hmc_zh As Byte At Hmc_z + 1 Overlay
Dim Hmc_status As Byte

Dim X As Single
Dim Y As Single
Dim Z As Single
Dim Angle As Single

Const Hmc_w = &H3C
Const Hmc_r = &H3D

'-------------------------------------------------------------------------------

'=====[ Misc. config ]==============
Config Scl = Portc.0
Config Sda = Portc.1
Config Twi = 400000
I2cinit

Gosub Hmc_initialize
'-------------------------------------------------------------------------------




Merah = Merahx
Merahs = Merahsx
Hitam = Hitamx
Hitams = Hitamsx
Hijau = Hijaux
Hijaus = Hijausx
Orange = Orangex
Oranges = Orangesx

'Merah = 220
'Merahs = 300
'Hitam = 100
'Hitams = 150
'Hijau = 150
'Hijaus = 220
'Orange = 300
'Oranges = 400

Do

'*** deteksi putih
S2 = 1
S3 = 0
Frequensi = 0
Tanda1detik = 0
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Enable Timer1
Do
Bitwait Outhz , Set
Bitwait Outhz , Reset
Loop Until Tanda1detik = 1
Disable Timer1                                              ' aktifkan timer enable Ovf0

'*** deteksi merah
S2 = 0
S3 = 0
Frequensi = 0
Tanda1detik = 0
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Enable Timer1
Do
Bitwait Outhz , Set
Bitwait Outhz , Reset
Frequensi = Frequensi + 1
Loop Until Tanda1detik = 1
Disable Timer1                                              ' aktifkan timer enable Ovf0
Fmerah = Frequensi

'*** deteksi biru
S2 = 0
S3 = 1
Frequensi = 0
Tanda1detik = 0
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Enable Timer1
Do
Bitwait Outhz , Set
Bitwait Outhz , Reset
Frequensi = Frequensi + 1
Loop Until Tanda1detik = 1
Disable Timer1                                              ' aktifkan timer enable Ovf0
Fbiru = Frequensi

'*** deteksi hijau
S2 = 1
S3 = 1
Frequensi = 0
Tanda1detik = 0
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Enable Timer1
Do
Bitwait Outhz , Set
Bitwait Outhz , Reset
Frequensi = Frequensi + 1
Loop Until Tanda1detik = 1
Disable Timer1                                              ' aktifkan timer enable Ovf0
Fhijau = Frequensi


'Lcd " R B G W "
Locate 2 , 1
Lcd Fmerah ; " "
Locate 2 , 5
Lcd Fbiru ; " "
Locate 2 , 9
Lcd Fhijau ; " "
Locate 2 , 13
Lcd Fputih ; " "

If Fmerah > Hitam And Fmerah < Hitams Then
Print "220"
Upperline
Lcd "warna hitam "
 If K <> 0 Then
  Cls
  Goto Hitamzone
 End If

Elseif Fmerah > Hijau And Fmerah < Hijaus Then
Print "120"
Upperline
Lcd "warna hijau "
 If K <> 1 Then
  Cls
  Goto Hijauzone
 End If

Elseif Fmerah > Orange And Fmerah < Oranges Then
Print "40"
Upperline
Lcd "warna orange "
 If K <> 2 Then
  Cls
  Goto Orangezone
 End If


Elseif Fmerah > Merah And Fmerah < Merahs Then
Print "300"
Upperline
Lcd "warna merah "
 If K <> 3 Then
  Cls
  Goto Merahzone
 End If


End If




Wait 1

If Tmbup = 0 Then
Goto Setting
End If

Cls

Loop


Timer1_isr:                                                 ' untuk 1 kali interupsi/detik
Tcnt1l = Low(inisial)                                       ' inisialisasi spt ini
Tcnt1h = High(inisial)
Tanda1detik = 1
Toggle Portc.0
Return

End


Setting:

Cls

'setting warna hitam

Do

Locate 1 , 1
Lcd "SET HITAM BWH"
Locate 2 , 1
Lcd "hitam = " ; Hitam

If Tmbup = 0 Then
Incr Hitam
Waitms 100
Cls
End If


If Tmbdown = 0 Then
Decr Hitam
If Hitam < 1 Then
Hitam = 0
End If
Waitms 100
Cls
End If

If Tmbok = 0 Then
Waitms 100
Bitwait Tmbok , Set
Hitamx = Hitam
Hitam = Hitamx
Exit Do
End If
Loop

Cls


Do

Locate 1 , 1
Lcd "SET HITAM ATS"
Locate 2 , 1
Lcd "hitam = " ; Hitams

If Tmbup = 0 Then
Incr Hitams
Waitms 100
Cls
End If


If Tmbdown = 0 Then
Decr Hitams
If Hitams < 1 Then
Hitams = 0
End If
Waitms 100
Cls
End If

If Tmbok = 0 Then
Waitms 100
Bitwait Tmbok , Set
Hitamsx = Hitams
Hitams = Hitamsx
Exit Do
End If
Loop

Cls

'setting warna hijau


Do

Locate 1 , 1
Lcd "SET HIJAU BWH"
Locate 2 , 1
Lcd "hijau = " ; Hijau

If Tmbup = 0 Then
Incr Hijau
Waitms 100
Cls
End If


If Tmbdown = 0 Then
Decr Hijau
If Hijau < 1 Then
Hijau = 0
End If
Waitms 100
Cls
End If

If Tmbok = 0 Then
Waitms 100
Bitwait Tmbok , Set
Hijaux = Hijau
Hijau = Hijaux
Exit Do
End If
Loop

Cls


Do

Locate 1 , 1
Lcd "SET HIJAU ATS"
Locate 2 , 1
Lcd "hijau = " ; Hijaus

If Tmbup = 0 Then
Incr Hijaus
Waitms 100
Cls
End If


If Tmbdown = 0 Then
Decr Hijaus
If Hijaus < 1 Then
Hijaus = 0
End If
Waitms 100
Cls
End If

If Tmbok = 0 Then
Waitms 100
Bitwait Tmbok , Set
Hijausx = Hijaus
Hijaus = Hijausx
Exit Do
End If
Loop


Cls


'setting warna orange

Do

Locate 1 , 1
Lcd "SET ORANGE BWH"
Locate 2 , 1
Lcd "orange = " ; Orange

If Tmbup = 0 Then
Incr Orange
Waitms 100
Cls
End If


If Tmbdown = 0 Then
Decr Orange
If Orange < 1 Then
Orange = 0
End If
Waitms 100
Cls
End If

If Tmbok = 0 Then
Waitms 100
Bitwait Tmbok , Set
Orangex = Orange
Orange = Orangex
Exit Do
End If
Loop

Cls

Do

Locate 1 , 1
Lcd "SET ORANGE ATS"
Locate 2 , 1
Lcd "orange = " ; Oranges

If Tmbup = 0 Then
Incr Oranges
Waitms 100
Cls
End If


If Tmbdown = 0 Then
Decr Oranges
If Oranges < 1 Then
Oranges = 0
End If
Waitms 100
Cls
End If

If Tmbok = 0 Then
Waitms 100
Bitwait Tmbok , Set
Orangesx = Oranges
Oranges = Orangesx
Exit Do
End If
Loop


'setting warna merah

Do

Locate 1 , 1
Lcd "SET MERAH BWH"
Locate 2 , 1
Lcd "merah = " ; Merah

If Tmbup = 0 Then
Incr Merah
Waitms 100
Cls
End If


If Tmbdown = 0 Then
Decr Merah
If Merah < 1 Then
Merah = 0
End If
Waitms 100
Cls
End If

If Tmbok = 0 Then
Waitms 100
Bitwait Tmbok , Set
Merahx = Merah
Merah = Merahx
Exit Do
End If
Loop

Cls

Do

Locate 1 , 1
Lcd "SET MERAH ATS"
Locate 2 , 1
Lcd "merah = " ; Merahs

If Tmbup = 0 Then
Incr Merahs
Waitms 100
Cls
End If


If Tmbdown = 0 Then
Decr Merahs
If Merahs < 1 Then
Merahs = 0
End If
Waitms 100
Cls
End If

If Tmbok = 0 Then
Waitms 100
Bitwait Tmbok , Set
Merahsx = Merahs
Merahs = Merahsx
Exit Do
End If
Loop
Return



'hitam adc0 < 1000
'merah adc1 > 500
'orange adc2 < 520
'hijau adc3 > 511


Hitamzone:

Do

Portb = &B00000001
Waitms 3
Portb = &B00000010
Waitms 3
Portb = &B00000100
Waitms 3
Portb = &B00001000
Waitms 3

   Gosub Hmc_readdata
   Gosub Hmc_readstatus

   ' convert integer to float
   X = Hmc_x
   Y = Hmc_y
   Z = Hmc_z

   Angle = Atn2(y , X)
   Angle = Angle * 57.29577951
   Angle = Angle + 180

Loop Until Angle > 100 And Angle < 120
K = 0
Goto Main
Return



Hijauzone:
Do

Portb = &B00001000
Waitms 3
Portb = &B00000100
Waitms 3
Portb = &B00000010
Waitms 3
Portb = &B00000001
Waitms 3

   Gosub Hmc_readdata
   Gosub Hmc_readstatus

   ' convert integer to float
   X = Hmc_x
   Y = Hmc_y
   Z = Hmc_z

   Angle = Atn2(y , X)
   Angle = Angle * 57.29577951
   Angle = Angle + 180

Loop Until Angle > 220 And Angle < 240
K = 1
Goto Main
Return


Orangezone:
Do

Portb = &B00000001
Waitms 3
Portb = &B00000010
Waitms 3
Portb = &B00000100
Waitms 3
Portb = &B00001000
Waitms 3

   Gosub Hmc_readdata
   Gosub Hmc_readstatus

   ' convert integer to float
   X = Hmc_x
   Y = Hmc_y
   Z = Hmc_z

   Angle = Atn2(y , X)
   Angle = Angle * 57.29577951
   Angle = Angle + 180

Loop Until Angle > 310 And Angle < 330
K = 2
Goto Main
Return


Merahzone:
Do

Portb = &B00001000
Waitms 3
Portb = &B00000100
Waitms 3
Portb = &B00000010
Waitms 3
Portb = &B00000001
Waitms 3


   Gosub Hmc_readdata
   Gosub Hmc_readstatus

   ' convert integer to float
   X = Hmc_x
   Y = Hmc_y
   Z = Hmc_z

   Angle = Atn2(y , X)
   Angle = Angle * 57.29577951
   Angle = Angle + 180

Loop Until Angle > 60 And Angle < 70
K = 3
Goto Main
Return



'=====[ Initialize HMC Compass ]========
Hmc_initialize:
   I2cstart
    I2cwbyte Hmc_w
    I2cwbyte &H00
    I2cwbyte &B0101_1000
    I2cwbyte &H0010_0000
    I2cwbyte &H0000_0000
   I2cstop
Return
'-------------------------------------------------------------------------------

'=====[ Read HMC Compass ]===========
Hmc_readstatus:
' Read HMC Compass status
   I2cstart
    I2cwbyte Hmc_w
    I2cwbyte &H09
   I2cstart
    I2cwbyte Hmc_r
    I2crbyte Hmc_status , Nack
   I2cstop
Return
'-------------------------------------------------------------------------------

'=====[ Read HMC Compass ]=========
Hmc_readdata:
   I2cstart
    I2cwbyte Hmc_w
    I2cwbyte &H03
   I2cstart
    I2cwbyte Hmc_r
    I2crbyte Hmc_xh , Ack
    I2crbyte Hmc_xl , Ack
    I2crbyte Hmc_zh , Ack
    I2crbyte Hmc_zl , Ack
    I2crbyte Hmc_yh , Ack
    I2crbyte Hmc_yl , Nack
   I2cstop
Return
'-------------------------------------------------------------------------------




f. VIDEO HASILNYA









Membuat Kendali Robot Menggunakan Android dan Arduino

Membuat Kendali Robot Menggunakan Android dan Arduino


              Pada kesempatan yang berbahagia ini saya akan menjelaskan mengenai bagaimana cara membuat robot yang dikendalikan menggunakan handphone Android, mikrokontroller yang digunakan adalah Arduino UNO dengan ATMega328. Prinsip kerja Robot yang akan dibuat yaitu Robot akan berjalan maju, mundur belok kanan dan kiri. Komunikasi yang digunakan adalah Bluetooth serial (UART).  untuk lebih jelasnya berikut penjelasan lengkapnya.


a. ARDUINO UNO






b. Motor Driver L293





c. Modul Bluetooth HC-05





d. Program Arduino 

int kiri = 2;
int kiri2 = 3;
int kanan = 4;
int kanan2 = 5;
int accelero;
int speedx;

void setup() {
Serial.begin(9600);
Serial.setTimeout(5);

  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);

 
pinMode(kiri, OUTPUT);
pinMode(kiri2, OUTPUT);
pinMode(kanan, OUTPUT);
pinMode(kanan2, OUTPUT);

speedx = 150;

}

void loop() {
 

if (Serial.available() > 0)
{
  accelero = Serial.parseInt();
  Serial.println(accelero);
 
 if (accelero == 300)
 {
 //maju
 digitalWrite(kiri, HIGH);
 digitalWrite(kiri2, LOW);
 digitalWrite(kanan, HIGH);
 digitalWrite(kanan2, LOW);
 analogWrite(9, speedx);
 analogWrite(10, speedx);
 }

 if (accelero == 400)
{
 //mundur
 digitalWrite(kiri, LOW);
 digitalWrite(kiri2, HIGH);
 digitalWrite(kanan, LOW);
 digitalWrite(kanan2, HIGH);
 analogWrite(9, speedx);
 analogWrite(10, speedx);

}

 if (accelero == 100)
 {
 //kiri
 digitalWrite(kiri, HIGH);
 digitalWrite(kiri2, LOW);
 digitalWrite(kanan, LOW);
 digitalWrite(kanan2, LOW);
 analogWrite(9, speedx);
 analogWrite(10, speedx);

 }

 if (accelero == 200)
 {
 //kanan
 digitalWrite(kiri, LOW);
 digitalWrite(kiri2, LOW);
 digitalWrite(kanan, HIGH);
 digitalWrite(kanan2, LOW);
 analogWrite(9, speedx);
 analogWrite(10, speedx);

 }

  if (accelero == 500)
 {
 //stop
 digitalWrite(kiri, LOW);
 digitalWrite(kiri2, LOW);
 digitalWrite(kanan, LOW);
 digitalWrite(kanan2, LOW);
 analogWrite(9, speedx);
 analogWrite(10, speedx);

 }


}

}




e. Program Android







f. VIDEO HASILNYA









All about charging station and How to measure / monitoring current and voltage using internet

All about charging station and How to measure / monitoring current and voltage using internet

  

              Kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat untuk memonitoring charging station, object yang akan dijadikan analisa adalah arus dan tegangan yang terdapat di charging station, fungsi charging station adalah untuk mengisi aki mobil listrik, seperti halnya SPBU tapi untuk mobil listrik. sehingga dibutuhkan sumber tegangan dan arus yang lumayan besar untuk sebuah charging station, jika tidak di pantau arus dan tegangannya, itu akan sangat berbahaya, pada contoh kali ini bisa dipantau via internet dan data bisa disimpan di database.  



a. POSTER 





b. PROCEDING / MAKALAH






c. TAMPILAN INTERFACE WEB DAN DATABASE







d. Arduino Code

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


unsigned long start_times[300];
unsigned long stop_times[300];
unsigned long values[300];

// Define various ADC prescaler
const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);


void setup() {
 
  Serial.begin(9600);
 
  // set up the ADC
  ADCSRA &= ~PS_128;  // remove bits set by Arduino library

  // you can choose a prescaler from above.
  // PS_16, PS_32, PS_64 or PS_128
  ADCSRA |= PS_128;    // set our own prescaler to 64

}


void loop() {

   //tegangan DC =============================
  //set point = 0,25
 
  int spanx = 25;
  int aReadx = 0;
  for (int i = 0; i < spanx; i++) {
    aReadx = aReadx+analogRead(A0);
    delay(1);
  }
  aReadx = aReadx / 25;
  float voltage0x = aReadx * (4.9 / 1023);
  float voltage0= (voltage0x + 0.05 ) / 0.201 ;
 
 
  //tegangan AC =============================
 //set point = 0,1

  unsigned int i;
  unsigned int z;
  z = 0;
   
  // capture the values to memory
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A1);             
 
  if (values[i] >= z) {
  z = values[i]; 
  }
    stop_times[i] = micros();
  }

     float voltage1 = (z - 495.00) / 0.443 ;

  z = 0;
 
  //================================
  // capture the values to memory
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A2);             
 
  if (values[i] >= z) {
  z = values[i]; 
  }
    stop_times[i] = micros();
  }

     float voltage2 = (z - 495.00) / 0.443 ;

 z = 0;

  
  //arus DC =================================
  //SET POINT = 0,1
 
  int span3 = 25;
  int aRead3 = 0;
  for (int i = 0; i < span3; i++) {
    aRead3 = aRead3+analogRead(A3);
    delay(1);
  }
  aRead3 = aRead3 / 25;
  float voltage3x = aRead3 * (4.9 / 1023);
  float voltage3= (voltage3x - 2.51) / 0.05;

 
  //========================
  //SET POINT = 0,1
 
  int span4 = 20;
  int aRead4 = 0;
  for (int i = 0; i < span4; i++) {
    aRead4 = aRead4+analogRead(A4);
    delay(20);
  }
  aRead4 = aRead4 / 20;
  float voltage4x = aRead4 * (4.9 / 1023);
  float voltage4= (voltage4x - 2.51) / 0.05;

 //=========================
 //SET POINT = 0,1

  int span5 = 20;
  int aRead5 = 0;
  for (int i = 0; i < span5; i++) {
    aRead5 = aRead5+analogRead(A5);
    delay(20);
  }
  aRead5 = aRead5 / 20;
  float voltage5x = aRead5 * (4.9 / 1023);
  float voltage5= (voltage5x - 2.5) / 0.05 ;


  //=========================================
 
 
  //arus AC =================================
  // set point B = 0,1
  // set point A = 0,1
 
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A8);             
 
  if (values[i] >= z) {
  z = values[i]; 
  }
    stop_times[i] = micros();
  }
      float voltage8 = (z - 315.50) / 13.02;

   
 z = 0;

 //================================

  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A9);             
 
  if (values[i] >= z) {
  z = values[i]; 
  }
    stop_times[i] = micros();
  }

    float voltage9 = (z - 325.50) / 12.02;
   
 z = 0;


 Serial.println(voltage0);
 Serial.println(voltage1);
 Serial.println(voltage2);
 Serial.println(voltage3);
 Serial.println(voltage4);
 Serial.println(voltage5);
 Serial.println(voltage8);
 Serial.println(voltage9);    
 Serial.println(" ");
 Serial.println(" ");

delay(3000);


}











Membuat Alat untuk Mengendalikan Game Unity 3D

Membuat Alat untuk Mengendalikan Game Unity 3D

             
          Pada pagi hari yang cerah ini saya akan menjelaskan mengenai bagaimana caranya agar mikrokontroller bisa mengendalikan object yang ada di unity 3D, versi Unity 3D pada contoh adalah versi 3.3.0, object yang dikendalikan bisa bermacam-macam, bisa bola, kubus, atau lainnya. Pada contoh kali ini saya menggunakan sebuah bola yang terdapat lintasan berbentuk persegi panjang. Mikrokontroller mengendalikan arah gerak bola tersebut kemanapun ia pergi dengan menggunakan 4 buah tombol yang dipasang di mikrokontroller. Untuk lebih jelasnya berikut gambar dan programnya.



a. Arduino Uno





b. Program Arduino

const int button1 = 6;
const int button2 = 7;
const int button3 = 5;
const int button4 = 4;

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

pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);

digitalWrite(button1, HIGH);
digitalWrite(button2, HIGH);
digitalWrite(button3, HIGH);
digitalWrite(button4, HIGH);

}


void loop()
{

  if(digitalRead(button1)== LOW)
    {
      Serial.println("1");
   //   Serial.flush();
      delay(200);
    }
   
  if(digitalRead(button2)== LOW)
    {
      Serial.println("2");
     // Serial.flush();
      delay(200);
    }
     if(digitalRead(button3)== LOW)
    {
      Serial.println("3");
   //   Serial.flush();
      delay(200);
    }
   
  if(digitalRead(button4)== LOW)
    {
      Serial.println("4");
     // Serial.flush();
      delay(200);
    }
}





c. Program C# Unity 3D

using UnityEngine;
using System.Collections;
using System.IO.Ports;

 public class kendali : MonoBehaviour
 {
     SerialPort stream = new SerialPort("COM3", 9600);
     public float speed = 1.5f;
     string receivedData = "EMPTY";
          
     void Update ()
     {
           stream.Open();
           receivedData = stream.ReadLine();
           stream.Close();
       
       
switch(receivedData )
  {
      case "1" :
           transform.position += Vector3.left * speed * Time.deltaTime;
      break;

      case "2" :
           transform.position += Vector3.right * speed * Time.deltaTime;
      break;
     
    case "3" :
           transform.position += Vector3.forward * speed * Time.deltaTime;
      break;

      case "4" :
           transform.position -= Vector3.forward * speed * Time.deltaTime;
      break;

  }

     }
 }




d. Cara mengaktifkan Fitur Serial dan Program kendali adalah seperti berikut.

- Pertama dan yang sangat penting, untuk mengaktifkan fitur serial lakukanlah langkah berikut
- Pilih FILE -> BUILD SETTINGS
- Pilih windows -> Player setting -> Rubah Api Compatibility Level jadi .NET 2.0


-Kemudian Letakkan program c# di sub object bola



- Supaya Camera mengikuti arah gerak bola tambahkan program character controller yang sudah tersedia di standart asset, hanya perlu cari dan letakkan di sub object bola

- Jika berhasil maka saat tombol ditekan, object bola akan bergerak




e. VIDEO HASILNYA










Monitoring Tegangan Menggunakan Unity 3D

Monitoring Tegangan Menggunakan Unity 3D

                Pada pembahasan kali ini saya akan menjelaskan mengenai bagaimana cara agar data tegangan yang diambil oleh mikrokontroller bisa ditampilkan di layar Unity 3D ver 3.3.0, caranya cukup mudah, hanya perlu membuat sebuah program saja kemudian dimasukkan ke sub main camera, memang kali ini hanya mencontohkan hal yang sederhana, namun ini bisa dikembangkan lagi, misalnya untuk monitoring tegangan suatu benda, selain ada bentuk / gambar benda 3D terdapat juga nilai tegangan dari mikrokontroller, seperti itu juga bisa, untuk lebih jelasnya berikut program dan caranya. 


a. Arduino Uno





 b. Program Arduino

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

void loop() {
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);
  Serial.println(voltage);
  delay(1000);
}





c. Program C# Unity 3D

using UnityEngine;
using System.Collections;
using System.IO.Ports;

public class arduinoSerialreceive : MonoBehaviour {

      SerialPort stream = new SerialPort("COM3", 9600); 
      string receivedData = "EMPTY";

      void Update () {

            stream.Open();
     
           receivedData = stream.ReadLine();
           
            stream.Close();
          }

      void OnGUI()
      {
            GUI.Label (new Rect (10, 10, 100, 20), "TEGANGAN = ");
            GUI.Label(new Rect(100,10,300,100), receivedData); 
            GUI.Label (new Rect (140, 10, 100, 20), " VOLT");
      }
}




d. Cara Mengaktifkan Serial di Unity ikuti langkah berikut

- Pertama dan yang sangat penting, untuk mengaktifkan fitur serial lakukanlah langkah berikut
- Pilih FILE -> BUILD SETTINGS
- Pilih windows -> Player setting -> Rubah Api Compatibility Level jadi .NET 2.0


 e. Masukkan Program C# ke Main Camera



 f. VIDEO HASILNYA










Membuat Kendali LED / ROBOT dengan UNITY 3D

Membuat Kendali LED / ROBOT dengan UNITY 3D


                 Selamat pagi, kali ini saya akan menjelaskan mengenai cara membuat aplikasi dan juga alat yang digunakan untuk mengendalikan robot atau LED, pada contoh kali ini hanya menggunakan 2 buah LED, yaitu LED hijau dan LED merah, jika mau mengganti dengan robot juga bisa dan sangat bisa sekali, biasanya untuk aplikasi augmented reality. Unity 3D yang digunakan pada contoh saya ini adalah Unity 3D versi 3.3.0 memang agak jadul tapi tetap power full hehehe....., untuk lebih jelasnya berikut adalah program dan skematiknya.



a. Minimum System 




b. Rangkaian RS232





c. Program C# Unity 3D

using UnityEngine;
using System.Collections;
using System.IO.Ports;

public class ObjectArduino : MonoBehaviour
{

      SerialPort stream = new SerialPort("COM3", 9600);
  
public bool isQuit = false;
public bool led1on = false;
public bool led1off = false;
public bool led2on = false;
public bool led2off = false;
   
   
void OnMouseEnter()                                                  //mengaktifkan saat mouse on selection
{
renderer.material.color = Color.red;
 //mengubah warna 3D text menjadi merah saat dipilih oleh mouse
}
void OnMouseExit()                                                   //mengaktifkan saat mouse off selection
{
renderer.material.color = Color.white;
 //mengubah warna 3D text menjadi merah saat dipilih oleh mouse
}
void OnMouseDown()                                                    
{

if(isQuit)                                                                                          
{
Application.Quit();                                                                                        
}

if(led1on)                                                                                           
{
stream.Open();
stream.Write("1");
stream.Close();
}

if(led1off)                                                                                           
{
stream.Open();
stream.Write("2");
stream.Close();
}

if(led2on)                   
{
stream.Open();
stream.Write("3");
stream.Close();   
}

if(led2off)                                                                                          
{
stream.Open();
stream.Write("4");  
stream.Close();   
}

}
}





d. Program Bascom AVR

$regfile = "m16def.dat"
$crystal = 12000000
$baud = 9600

Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2
Config Lcdpin = Pin , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2

Cls
Cursor Off

Upperline
Lcd "UNITY 3D"
Wait 3

Cls

Ddrd.2 = 1
Ddrd.3 = 1

Dim A As String * 1


Do

A = Waitkey()
Lowerline
Lcd A

Select Case A

 Case "1" :
     Portd.2 = 1

 Case "2" :
     Portd.2 = 0

 Case "3" :
     Portd.3 = 1

 Case "4" :
     Portd.3 = 0

 End Select

Loop




d. Cara Pasang Program di Unity 3D

- Pertama dan yang sangat penting, untuk mengaktifkan fitur serial lakukanlah langkah berikut
- Pilih FILE -> BUILD SETTINGS
- Pilih windows -> Player setting -> Rubah Api Compatibility Level jadi .NET 2.0


- Setelah itu Masukkan program C# yang dibuat diatas ke Object Cube
- Lalu check list bagian yang akan dieksekusi (misal saat ditekan Led 1 off)


- Lakukan hal serupa kepada 3 buah button lainnya
- Program siap digunakan, Lakukanlah RUN maka lihat hasilnya




 e. VIDEO HASILNYA








Membuat Robot dengan Kendali Remote TV SONY (BASCOM AVR)

Membuat Robot dengan Kendali Remote TV SONY (BASCOM AVR)

              Malam ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat atau tepatnya sebuah robot dengan menggunakan kendali remote TV, project ini sangatlah bagus sekali bagi para pecinta mikrokontroller, disamping kecanggihannya, juga fungsi wirelessnya yang bisa mengendalikan benda hingga jarak 5 meter kurang lebih. Banyak sekali aplikasi yang bisa dibuat dari project ini, misal kendali lampu rumah atau kipas angin, kendali buka tutup pintu dan lainnya. untuk lebih jelasnya berikut penjelasannya.




a. Minimum System




b. Remote Sony





c. Sensor TSOP




d. Motor Driver L293




e. Program Bascom AVR

$regfile = "m32def.dat"
$crystal = 12000000
'--------------------------

Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2
Config Lcdpin = Pin , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2

Config Timer0 = Timer , Prescale = 256
Stop Timer0
Config Pind.3 = Input
Set Portd.3
Pin_ir Alias Pind.3
Config Int1 = Falling
On Int1 Isr_int1
$baud = 9600

Ddrb = &B11111111

Dim Data_ir As Word
Dim Cnt_ir As Byte
Dim Flag_ir_start As Bit
Dim Flag_ir_ok As Bit
Dim Suhu_ref As Word
Dim Suhu As Word
Cls
Cursor Off
Locate 1 , 3
Lcd "SONY DECODER"
Wait 1
Enable Interrupts
Enable Int1
Do
If Flag_ir_ok = 1 Then
   Reset Flag_ir_ok
   Disable Int1
   Gosub Isr_int1
   Print "Data= " ; Data_ir
   Cls
   Cursor Off
   Locate 1 , 3
   Lcd "Data= " ; Data_ir
If Data_ir = 128 Then
   Portb.0 = 1
   Else
   Portb.0 = 0
End If
If Data_ir = 129 Then
   Portb.3 = 1
   Else
   Portb.3 = 0
End If
If Data_ir = 130 Then
   Portb.5 = 1
   Else
   Portb.5 = 0
End If
If Data_ir = 131 Then
   Portb.6 = 1
   Else
   Portb.6 = 0
End If
If Data_ir = 132 Then
   Portb.7 = 1
   Else
   Portb.7 = 0
End If
If Data_ir = 244 Then
   Cls
Lcd "MOTOR MAJU"
   Portb.1 = 1
   Portb.2 = 1
   End If
   If Data_ir = 179 Then
   Cls
Lcd "MOTOR KIRI"
   Portb.1 = 0
   Portb.2 = 1
   End If
    If Data_ir = 180 Then
    Cls
Lcd "MOTOR KANAN"
   Portb.1 = 1
   Portb.2 = 0
   End If
    If Data_ir = 149 Then
    Cls
Lcd "STOP"
   Portb.1 = 0
   Portb.2 = 0
End If
If Data_ir = 229 Then
    Cls
Lcd "STOP"
   Portb.1 = 0
   Portb.2 = 0
End If

   Reset Flag_ir_ok
   Enable Int1
 End If
 Wait 1
Loop
Isr_int1:
 Timer0 = 0
 Start Timer0
 Bitwait Pin_ir , Set
 Stop Timer0
 If Cnt_ir = 0 Then
 If Timer0 > 110 And Timer0 < 120 Then
 Set Flag_ir_start
 Incr Cnt_ir
 End If
 End If
 If Flag_ir_start = 1 And Cnt_ir > 0 Then
 Decr Cnt_ir
 If Timer0 < 32 Then
 Data_ir.cnt_ir = 0
 Else
 Data_ir.cnt_ir = 1
 End If
 Cnt_ir = Cnt_ir + 2
 If Cnt_ir > 11 Then
 Shift Data_ir , Right , 1
 Reset Flag_ir_start
 Set Flag_ir_ok
 Cnt_ir = 0
 End If
 End If
Return





f. VIDEO HASILNYA











Cara Membuat Alat untuk Mengendalikan File Power Point (PPT)

Cara Membuat Alat untuk Mengendalikan File Power Point (PPT)


               Selamat sore, bertemu lagi dengan saya Yanuar, kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang bisa digunakan untuk mngendalikan file PPT(power point), sebenarnya bukan hanya file power point saja yang bisa dikendalikan oleh alat ini, file lain pun bisa misal game flash yang menggunakan kendali arrow left dan right,  E-book, dan lainnya. Pada contoh ini saya hanya mencontohkan file power point saja karena gampang dan biasa di jumpai di masyarakat, Prinsip kerja alat ini sangatlah mudah yaitu ada dua buah tombol yang menggantikan fungsi dari arrow left dan arrow right melalui program visual basic 6.0. untuk lebih jelasnya berikut penjelasannya.


a. Minimum System 




b. Rangkaian RS232 





c. Program Bascom AVR

$regfile = "m16def.dat"
$crystal = 12000000
$baud = 9600

Ddrb.0 = 0
Ddrb.1 = 0
Ddrb.2 = 0

Portb.0 = 1
Portb.1 = 1
Portb.2 = 1

Dim A As Integer
Dim B As Integer
Dim C As Integer

A = 100
B = 200
C = 300


Do

If Pinb.0 = 0 Then

Do

Print A
Wait 1
Loop Until Pinb.0 = 1

End If

If Pinb.1 = 0 Then

Do

Print B
Wait 1
Loop Until Pinb.1 = 1

End If


If Pinb.2 = 0 Then

Do

Print C
Wait 1
Loop Until Pinb.2 = 1

End If

Loop





d. Program Visual Basic 6.0
            

                                                                   DOWNLOAD


Option Explicit
Dim arrdata()
Dim TotalBaca As Integer
Dim BMI As Single
Dim Keterangan As String
Const MAKSBACA = 10
Dim sHari As String
Dim aHari



Private Sub berhenti_Click()
  start.Enabled = True
    berhenti.Enabled = False
    TimerBaca.Enabled = False
End Sub



Private Sub Command1_Click()
Open "C:\Users\yanuar\Desktop" & "\project.txt" For Append As #1
Print #1, "======================"
Print #1, " Data dalam satu menit "
Print #1, "======================"
Print #1, "Tanggal = "; lbltanggal.Caption
Print #1, "  Jam   = "; lbljam.Caption
Print #1, " NIlai  = "; Label1.Caption
Print #1,
Close #1
End Sub

Private Sub Command2_Click()
Unload Me
End Sub


Private Sub Command3_Click()
Text1.Text = " "
Label1.Caption = " "

End Sub

Private Sub Form_Load()
Dim i As Byte
For i = 1 To 16
    ComboCOM.AddItem (i)
Next i

 aHari = Array("Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu")

End Sub



Private Sub start_Click()
Dim u As Integer

    On Error GoTo ada_eror
  
    MSComm2.CommPort = ComboCOM.Text
    MSComm2.Settings = "9600,N,8,1"
    MSComm2.RThreshold = 15
    MSComm2.InputLen = 15
    MSComm2.InputMode = comInputModeText
    MSComm2.PortOpen = True ' buka port
  
    ReDim arrdata(1 To MAKSBACA + 1)
    For u = 1 To MAKSBACA
        arrdata(u) = 0
    Next
    TotalBaca = 0
    start.Enabled = False
    berhenti.Enabled = True
    TimerBaca.Enabled = True
ada_eror:
 If ComboCOM.ListIndex < 1 Then
    MsgBox "COM berada di Nomor : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "ERROR"
    start.Enabled = True
    berhenti.Enabled = True
    ComboCOM.Text = "Pilih COM"
End If
End Sub

Private Sub Timer1_Timer()
 sHari = aHari(Abs(Weekday(Date) - 1))
 lbltanggal.Caption = "" & sHari & "," & Format(Date, "dd mmmm yyyy")
 lbljam.Caption = Format(Time, "hh:mm:ss")
End Sub

Private Sub TimerBaca_Timer()
Dim strInput As String
Dim strPotong As String
Dim singleInput As Single
Dim u As Integer
Dim keycode As Integer
Dim strKeyPressed As String 'inputted character
Dim strAscii As String 'Ascii number

    strInput = MSComm2.Input
        strPotong = strInput
        Text1.Text = Text1.Text + strPotong + vbCrLf
        singleInput = Val(strPotong)
        Label1.Caption = singleInput
        If TotalBaca >= MAKSBACA Then
            TimerBaca.Enabled = False
            If MSComm2.PortOpen = True Then MSComm2.PortOpen = False
            Call berhenti_Click
        End If
 
     If Label1.Caption = "100" Then
        Label2.Caption = "KANAN"
        SendKeys "{LEFT}", True
      
     ElseIf Label1.Caption = "200" Then
        Label2.Caption = "KIRI"
        SendKeys "{RIGHT}", True
      
     ElseIf Label1.Caption = "300" Then
        Label2.Caption = "SPACE"
        SendKeys "{UP}", True
      
     Else
        Label2.Caption = "OK"
     End If
      
   
   
End Sub




 e. Cara agar saat Compile VB 6 "SendKeys" tidak error

- Pertama buat dulu file seperti diatas
- Setelah selesai pilih File -> Make namafile.exe (enter)
- Simpan disuatu tempat misal di drive D:
- Click kanan file.exe tersebut lalu pilih propertis


- Rubah Compatibility dengan men-check list pada Compatibility Mode lalu pilih Windows XP SP 2


 - Program siap dijalankan




f. VIDEO HASILNYA