Translate

Membuat Rangkaian Alat Buck Converter dan Boost Converter

Membuat Rangkaian Alat Buck Converter dan Boost Converter


          Kali ini saya akan membahas mengenai bagaimana cara membuat rangkaian buck dan boost converter, sebelumnya apa buck converter itu ? yaitu sebuah rangkaian yang digunakan untuk menurunkan tegangan dengan efisiensi daya yang bagus dari pada mengunakan IC regulator misal IC regulator step down 7805 atau lm317, kemudian sebaliknya, boost converter adalah sebuah rangkaian yang digunakan untuk menaikkan tegangan dari tegangan sumber, misal dari tegangan 5 volt menjadi tegangan 12 volt atau 20 volt tergantung dari duty cycle yang dipakai, untuk lebih jelasnya berikut adalah penjelasan program dan skemanya.

Mosfet IRF540
Dioda MUR1560
Optocopler TLP250



a. Minimum System ATMega8





 b. Rangkaian Buck Converter







c. Rangkaian Boost Converter







d. Dioda MUR1560





e. Program Arduino IDE

#include <PWM.h>

//use pin 11 on the Mega instead, otherwise there is a frequency cap at 40 KHz
int led = 9;                // the pin that the PWM is attached to
int brightness = 0;         // duty cycle
int fadeAmount = 125;    
int32_t frequency = 40000; //frequency (in Hz)

void setup()
{
 
  //initialize all timers except for 0, to save time keeping functions
  InitTimersSafe();
  Serial.begin(9600);
  //sets the frequency for the specified pin
  bool success = SetPinFrequencySafe(led, frequency);
 
  //if the pin frequency was set successfully, turn pin 13 on
  if(success) {
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH);   
  }
}

void loop()
{
  int sensorValue = analogRead(A0);
 
  if (sensorValue > 255)
 {
  sensorValue = 255;
 }

 //float teg = sensorValue * (4.7 / 1023.0);

  //use this functions instead of analogWrite on 'initialized' pins
  pwmWrite(led, brightness);
 
  //merubah duty cycle sesuai nilai ADC
  brightness = sensorValue;
       
}




f. Program Bascom AVR

'====================
'PWM dengan Frequency 40 Khz
'====================

$regfile = "m8535.dat"
$crystal = 16000000

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


Config Adc = Free , Prescaler = 64 , Reference = Avcc

Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Up , Prescale = 1
Const Inisial = &HFFB0

Cls
Cursor Off

Dim Dataadc As Word
Dim Adcpotensio As Word
Dim Adcarusinput As Word
Dim Adcarusoutput As Word

Dim V1 As Single
Dim V2 As Single
Dim A1 As Single
Dim A2 As Single
Dim X As Integer
X = 2

Ddrc.2 = 1
Portc.2 = 0


On Timer1 Timer1_isr

Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)

Enable Timer1
Enable Interrupts

Start Adc

Do

Loop





Timer1_isr:

   Tcnt1l = Low(inisial)
   Tcnt1h = High(inisial)

Dataadc = Getadc(x)

If X = 2 Then
Adcpotensio = Dataadc
End If

If X = 3 Then
Adcarusinput = Dataadc
End If

If X = 4 Then
Adcarusoutput = Dataadc
End If


V1 = Adcarusinput * 5
V1 = V1 / 1023

A1 = V1 - 2.5
A1 = A1 / 0.1


V2 = Adcarusoutput * 5
V2 = V2 / 1023

A2 = V2 - 2.5
A2 = A2 / 0.1

Upperline
Lcd "Du= " ; Adcpotensio
Lowerline
Lcd "Ai=" ; Fusing(a1 , "#.##") ; " " ; "Ao=" ; Fusing(a2 , "#.##")
'Lcd Adcarusinput ; "  " ; Adcarusoutput

 'output di PORTD.4 = OC1B
Pwm1b = Adcpotensio

Incr X

If X > 4 Then
X = 2
End If

Return





g. Program Code Vision AVR

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 7/20/2016
Author  : tyery08
Company : embeeminded.blogspot.com
Comments:


Chip type               : ATmega8535
Program type            : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 128
*****************************************************/

#include <mega16.h>
#include <stdlib.h>
#include <delay.h>
#include <math.h>
// Standard Input/Output functions
#include <stdio.h>

// Alphanumeric LCD functions
#include <alcd.h>

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here
// Declare your global variables here
unsigned char buffer[32];
unsigned int inADC17, inADC24, outADC, arusout;
unsigned int dutyc;
float ainx, aoutx, voutx, vin, ain, arusin, aout, vin1, dayain, dayain1, slope;
float dc17, dc24, ft17, ft24, ftOut, deltavin, deltadaya;  

float dayain;
 
char temp[10];
char temp1[10];
char temp2[10];
char temp3[10];
char temp4[10];



void main(void)
{

// Declare your local variables here
unsigned char i;
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x30;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Inverted
// OC1B output: Inverted
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA2;
TCCR1B=0x19;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x01;
ICR1L=0x90;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 7
// RD - PORTC Bit 6
// EN - PORTC Bit 5
// D4 - PORTC Bit 3
// D5 - PORTC Bit 2
// D6 - PORTC Bit 1
// D7 - PORTC Bit 0
// Characters/line: 16
lcd_init(16);

while (1)
      {
  
      // (optional) 400 adalah nilai maksimal pwm==100%
     
//    OCR1A=in17;
      OCR1B=inADC17;
//    OCR1B=dutyc;         
      delay_ms(200);
      OCR1A=0;
      OCR1B=0;
      delay_ms(1);     
    
    
      inADC17=read_adc(7);
      vin = (inADC17 * 5.0)/1023.0; 
                   
      ftoa(vin,1,temp);    
      lcd_gotoxy (0,0);
      lcd_putsf("V= ");
      lcd_puts(temp);

      arusin=read_adc(4);
     
      ain = (arusin * 5.0)/1023.0;
      ainx = (ain - 2.5)/0.1;
     
      ftoa(ainx,1,temp1);    
      lcd_gotoxy (0,1);
      lcd_putsf("Ai=");
      lcd_puts(temp1);

      arusout=read_adc(6);
     
      aout = (arusout * 5.0)/1023.0;
      aoutx = (aout -2.5)/0.1;
 
//      ftoa(aoutx,1,temp2);    
//      lcd_gotoxy (8,1);
//      lcd_putsf("A0=");
//      lcd_puts(temp2);
     
      ftoa(dayain,1,temp3);    
      lcd_gotoxy (8,1);
      lcd_putsf("P=");
      lcd_puts(temp3);
 
      ftoa(slope,1,temp4);    
      lcd_gotoxy (8,0);
      lcd_putsf("S=");
      lcd_puts(temp4);
 
      dayain = ainx * vin;
     
      deltadaya = dayain - dayain1;
     
      if(deltadaya >0){
     
      deltavin = vin - vin1;
     
      if(deltavin > 0){
      //dutyc = dutyc + 5;     
      }

      if(deltavin < 0){
      //dutyc = dutyc - 5;     
      }
     
      }


      if(deltadaya <0){
     
      deltavin = vin - vin1;
     
      if(deltavin < 0){
      //dutyc = dutyc + 5;     
      }

      if(deltavin > 0){
      //dutyc = dutyc - 5;     
      }
     
      }

    
      //slope = (dayain - dayain1) / (vin - vin1);
     
//      if (slope > 0) {
       //dutyc = dutyc + 5;
//      }
//      if (slope < 0) {
       //dutyc = dutyc - 5;
//      }
     
      dayain1 = dayain;
      vin1 = vin;

    
      }
}




h. Gambar Hasilnya






i. VIDEO HASILNYA












Membuat Alat Penunjuk Arah Suara Menggunakan Sensor Suara dan Motor Stepper

Membuat Alat Penunjuk Arah Suara Menggunakan Sensor Suara dan Motor Stepper


            Kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang bisa menunjukan arah suara berasal menggunakan sensor suara module, jadi terdapat 3 buah sensor suara yang mana sensor tersebut akan mewakili tiap2 posisi, jika salah satu sensor mendapatkan adanya suara maka motor stepper akan bergerak menunjukkan arah sumber suara berasal, untuk aplikasi dari alat ini yaitu bisa digunakan sebagai penunjuk sumber suara, atau bisa juga sebagai kendali device menggunakan suara, dan masih banyak lagi aplikasinya. yang perlu diperhatikan yaitu supply 12 volt untuk stepper berikan resistor 1 Kiloohm agar stepper tidak terlalu panas. untuk lebih jelasnya berikut skema dan programnya.



a. Minimum System





b. Motor Stepper






c. Driver Motor L298






d. Sound Sensor






e. Program Bascom AVR

$regfile = "m16def.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 Adc = Single , Prescaler = Auto , Reference = Avcc

Dim Dataadc0 As Word
Dim Dataadc1 As Word
Dim Dataadc2 As Word

'full 360 = 100 step

Cls
Cursor Off

Start Adc

Main:

Dim A As Integer
A = 0

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

Do

Dataadc0 = Getadc(0)
Dataadc1 = Getadc(1)
Dataadc2 = Getadc(2)

Upperline
Lcd Dataadc0 ; " " ; Dataadc1 ; " " ; Dataadc2

If Dataadc0 >= 520 And Dataadc1 < 520 And Dataadc2 < 520 Then
Goto Sensor1
Cls
Elseif Dataadc0 < 520 And Dataadc1 >= 520 And Dataadc2 < 520 Then
Goto Sensor2
Cls
Elseif Dataadc0 < 520 And Dataadc1 < 520 And Dataadc2 >= 520 Then
Goto Sensor3
Cls
End If

Loop


Sensor1:
Do

Portb = &B0000001
Waitms 3

Portb = &B0000010
Waitms 3

Portb = &B0000100
Waitms 3

Portb = &B0001000
Waitms 3

Incr A

Lowerline
Lcd A

Loop Until A = 25

A = 0

Wait 3

Do

Portb = &B00001000
Waitms 3

Portb = &B00000100
Waitms 3

Portb = &B00000010
Waitms 3

Portb = &B00000001
Waitms 3

Incr A

Lowerline
Lcd A

Loop Until A = 25

A = 0
Goto Main
Return


Sensor2:
Do

Portb = &B0000001
Waitms 3

Portb = &B0000010
Waitms 3

Portb = &B0000100
Waitms 3

Portb = &B0001000
Waitms 3

Incr A

Lowerline
Lcd A

Loop Until A = 50

A = 0

Wait 3

Do

Portb = &B00001000
Waitms 3

Portb = &B00000100
Waitms 3

Portb = &B00000010
Waitms 3

Portb = &B00000001
Waitms 3

Incr A

Lowerline
Lcd A

Loop Until A = 50

A = 0
Goto Main
Return


Sensor3:
Do

Portb = &B0000001
Waitms 3

Portb = &B0000010
Waitms 3

Portb = &B0000100
Waitms 3

Portb = &B0001000
Waitms 3

Incr A

Lowerline
Lcd A

Loop Until A = 75

A = 0

Wait 3

Do

Portb = &B00001000
Waitms 3

Portb = &B00000100
Waitms 3

Portb = &B00000010
Waitms 3

Portb = &B00000001
Waitms 3

Incr A

Lowerline
Lcd A

Loop Until A = 75

A = 0
Goto Main
Return




f. VIDEO HASILNYA










Cara Mengambil Data ADC Menggunakan Android Dari Arduino Melalui WIFI / ETHERNET

Cara Mengambil Data ADC Menggunakan Android Dari Arduino Melalui WIFI / ETHERNET


              Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengambil data ADC dari Arduino ke HP Android menggunakan media WIFI atau Ethertnet, Jadi Arduino akan mengirimkan data ke server yaitu di address 198.168.1.88 kemudian HP Android akan mengambil data tersebut untuk ditampilkan di dalam aplikasinya, pada contoh kali ini syarat data yang dikirimkan di server adalah 3 digit dengan diawali dua karakter "##", jika ingin data yang panjang hanya perlu mengubah parameter yang ada di program Androidnya. untuk lebih jelasnya berikut adalah skema dan programnya. 



a. Arduino + Ethernet





b. Program Android






c. Program Arduino IDE

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

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,88);

EthernetServer server(80);

const int ledpin7 = 7;
const int ledpin8 = 8;
const int ledpin9 = 9;
const int ledpin2 = 2;
String readString;
void setup() {

   pinMode(ledpin7, OUTPUT);
   pinMode(ledpin8, OUTPUT);
   pinMode(ledpin9, OUTPUT);
   pinMode(ledpin2, OUTPUT);
  
  Serial.begin(9600);
   while (!Serial) {
  }

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  int sumbux = analogRead(0);
  int sumbuy = analogRead(1);
  int sumbuz = analogRead(2);

  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
     if (readString.length() < 100) {

          //store characters to string
          readString += c;
          //Serial.print(c);
        }
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 1");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println(" ");
          client.println("<title> Monitor Kemiringan </title> ");     
          client.println("<body bgcolor = #000000>");     
          client.println("<center>");
            client.println("<font color = yellow><center><h1>MONITOR KEMIRINGAN DATARAN<br>BY YANUAR MUKHAMMAD</h1></center><br></font>");
            client.println("<font color = #FFFFFF>");
            client.println("<h2>");
            client.println("Sumbu X = ##");
            client.print(sumbux);
            client.println("<br />");
            client.println("</h2>");      
          client.println("</font>");
           client.println("<a href = \"/?lighton\"\"><input type = 'button' value = 'ON' ></a>");
          client.println("<a href = \"/?lightoff\"\"><input type = 'button' value = 'OFF' ></a> ");
          client.println("</center>");
          client.println("</body>");
          client.println("</html>");
            
          break;       
        }    
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }
          if(readString.indexOf("?lighton") >0)
          {
 
            digitalWrite(ledpin7, HIGH);    
          }
          else{
          if(readString.indexOf("?lightoff") >0)
          {

                digitalWrite(ledpin7, LOW); 
          }
          }
         readString="";
 if (sumbux > 400){
 digitalWrite(ledpin8, HIGH);
 digitalWrite(ledpin9, LOW);
 digitalWrite(ledpin2, LOW);
 } else if (sumbux < 300){
 digitalWrite(ledpin8, LOW);
 digitalWrite(ledpin9, HIGH);
 digitalWrite(ledpin2, LOW);
 }else {
 digitalWrite(ledpin8, LOW);
 digitalWrite(ledpin9, LOW);
 digitalWrite(ledpin2, HIGH);
}
}




d. VIDEO HASILNYA







Membuat Alat Kendali Menggunakan Android dan WIfi / Ethernet

Membuat Alat Kendali Menggunakan Android dan WIfi / Ethernet


            Malam ini saya akan menjelaskan mengenai bagaimana cara membuat alat dengan menggunakan Arduino Ethernet dan Android, jika biasanya kendali device seperti lampu, motor dc, kipas dll menggunakan bluetooth, sekarang diganti menggunakan wifi local bukan online, jadi sistemnya masih sama dengan bluetooth yaitu wireless namun jarak jangkaunya yang berbeda, kalau bluetooth biasanya hanya 1 meter, tapi kalau wifi bisa sampai 10 meter lebih tergantung tipe dan jenis router yang digunakan, prinsip kerjanya alat yang dibuat ini yaitu mengendalikan 4 buah led menggunakan HP Android dan media yang dipakai adalah wifi / jaringan ethernet, untuk lebih jelasnya berikut skema dan programnya.



a. Arduino + Ethernet Shield





b. Program Android







c. Program Arduino IDE

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

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,88);

EthernetServer server(80);

const int ledpin7 = 7;
const int ledpin8 = 8;
const int ledpin9 = 9;
const int ledpin2 = 2;
String readString;
void setup() {

   pinMode(ledpin7, OUTPUT);
   pinMode(ledpin8, OUTPUT);
   pinMode(ledpin9, OUTPUT);
   pinMode(ledpin2, OUTPUT);
  
  Serial.begin(9600);
   while (!Serial) {
  }

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  int sumbux = analogRead(0);
  int sumbuy = analogRead(1);
  int sumbuz = analogRead(2);

  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
     if (readString.length() < 100) {

          //store characters to string
          readString += c;
          //Serial.print(c);
        }
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 1");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println(" ");
          client.println("<title> Monitor Kemiringan </title> ");     
          client.println("<body bgcolor = #000000>");     
          client.println("<center>");
            client.println("<font color = yellow><center><h1>KENDALI LAMPU VIA ETHERNET ANDROID<br>BY YANUAR MUKHAMMAD</h1></center><br></font>");
           client.println("<a href = \"/?lighton1\"\"><input type = 'button' value = 'ON 1' ></a>");
          client.println("<a href = \"/?lightoff1\"\"><input type = 'button' value = 'OFF 1' ></a> ");
           client.println("<a href = \"/?lighton2\"\"><input type = 'button' value = 'ON 2' ></a>");
          client.println("<a href = \"/?lightoff2\"\"><input type = 'button' value = 'OFF 2' ></a> ");
           client.println("<a href = \"/?lighton3\"\"><input type = 'button' value = 'ON 3' ></a>");
          client.println("<a href = \"/?lightoff3\"\"><input type = 'button' value = 'OFF 3' ></a> ");
           client.println("<a href = \"/?lighton4\"\"><input type = 'button' value = 'ON 4' ></a>");
          client.println("<a href = \"/?lightoff4\"\"><input type = 'button' value = 'OFF 4' ></a> ");
         
          client.println("</center>");
          client.println("</body>");
          client.println("</html>");
            
          break;       
        }    
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }
          if(readString.indexOf("?lighton1") >0)
          {
 
            digitalWrite(ledpin7, HIGH);    
          }
          else{           
          if(readString.indexOf("?lightoff1") >0)
          {

             digitalWrite(ledpin7, LOW); 
          }
          }
         
             if(readString.indexOf("?lighton2") >0)
          {
 
            digitalWrite(ledpin8, HIGH);    
          }
          else{           
          if(readString.indexOf("?lightoff2") >0)
          {

                digitalWrite(ledpin8, LOW); 
          }
          }
          if(readString.indexOf("?lighton3") >0)
          {
 
            digitalWrite(ledpin9, HIGH);    
          }
          else{           
          if(readString.indexOf("?lightoff3") >0)
          {

                digitalWrite(ledpin9, LOW); 
          }
          }
          if(readString.indexOf("?lighton4") >0)
          {
 
            digitalWrite(ledpin2, HIGH);    
          }
          else{           
          if(readString.indexOf("?lightoff4") >0)
          {

              digitalWrite(ledpin2, LOW); 
          }
          }
         
         readString="";
}





d. VIDEO HASILNYA












Cara Mengakses Power Line Carrier Menggunakan Microcontroller

Cara Mengakses Power Line Carrier Menggunakan Microcontroller


         Finally, my ambition project telah usai seiring project ini berakhir, kali ini saya akan menjelaskan mengenai bagaimana cara mengakses modul power line carrier KQ330 menggunakan mikrokontroller dan bahasa bascom avr. Sebelumnya apa itu power line carrier ??, PLC adalah sebuah sistem dimana kita bisa mengirimkan data dari master ke slave dalam satu line menggunakan tegangan 220VAC 50 Hz. jadi ini adalah inovasi terbaru dalam bidang elektronika, jika biasanya menggunakan kabel panjang dalam pengiriman data, sekarang bisa dengan mudah mengirimkan data melalui tegangan AC 220v 50 Hz. Aplikasi dari PLC ini yaitu misal dalam sebuah kantor terdapat lampu yang harus dikontrol melalui kontrol room, maka tidak perlu menggunakan kabel khusus yang terhubung ke kontroller, sambungkan saja kontroller ke PLC lalu PLC ke listrik 220V AC, di TKP terdapat kontroller penerima yang akan mematikan lampu sesuai perintah dari master / transmitter, itu hanya salah satu contoh saja, masih banyak lainnya. Untuk lebih jelasnya berikut skema dan programnya menggunakan bascom AVR.



a. Minimum System






b. Modul Power Line Carrier KQ330 / KQ 132K







c. Mikrokontroller Master - Slave 1 - Slave 2






d.  Program Bascom AVR

'======================
' Program Master / Transmitter
'======================
$regfile = "m8def.dat"
$crystal = 12000000
$baud = 9600

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

Ddrb.0 = 0
Ddrb.1 = 0
Ddrb.2 = 0
Ddrd.7 = 0

Set Portb.0
Set Portb.1
Set Portb.2
Set Portd.7

Cls
Cursor Off

Do

Upperline
Lcd "Transmitter"
Lowerline
Lcd " 1 " ; " 2 " ; " 3 " ; " 4 "

If Pinb.0 = 0 Then
Cls
Do
Print "1"
Lowerline
Lcd "kirim data 1"
Loop Until Pind.7 = 0

Elseif Pinb.1 = 0 Then
Cls
Do
Print "2"
Lowerline
Lcd "kirim data 2"
Loop Until Pind.7 = 0

Elseif Pinb.2 = 0 Then
Do
Print "3"
Lowerline
Lcd "kirim data 3"
Loop Until Pind.7 = 0

Else
Lowerline
Print "0"
End If

Loop


'=========================
' Program Slave / Receiver 1 dan 2
'=========================
$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

Ddrd.7 = 1
Ddrd.6 = 1
Ddrd.5 = 1
Ddrd.4 = 1

Dim Perintah As String * 1

Cls
Cursor Off
Upperline
Lcd "Receiver 1/2"

Do

Perintah = Waitkey()

Upperline
Lcd "Receiver 1/2"
Lowerline
Lcd "Data = " ; Perintah

Wait 1

Select Case Perintah
Case "0" :
  Portd.7 = 0
  Portd.6 = 0
  Portd.5 = 0
  Portd.4 = 0

Case "1" :
  Portd.7 = 1
  Portd.6 = 0
  Portd.5 = 0
  Portd.4 = 0

Case "2" :
  Portd.7 = 0
  Portd.6 = 1
  Portd.5 = 0
  Portd.4 = 0

Case "3" :
  Portd.7 = 0
  Portd.6 = 0
  Portd.5 = 1
  Portd.4 = 0

Case "0" :
  Portd.7 = 0
  Portd.6 = 0
  Portd.5 = 0
  Portd.4 = 1

End Select
Loop




e. VIDEO HASILNYA








   
 

Cara mengakses Robot ARM (Robot Lengan) Menggunakan Mikrokontroller dan Driver Servo XISC-32

Cara Mengakses Robot ARM ( Robot Lengan ) Menggunakan Mikrokontroller dan Driver Servo XISC-32 / SSC-32


               This is my last ambition project, Selamat malam kawan semua, kali ini saya akan menjelaskan mengenai bagaimana cara mengakses robot lengan atau ARM robot yang mana biasanya robot ini berada di industri seperti halnya robot pemindah barang atau robot pengangkat beban, robot ini memiliki 4 buah servo dengan variasi rotasi yang bagus. Robot ini menggunakan mikrokontroller ATMega32 dan driver servo XISC-32. Yang perlu diperhatikan disini yaitu tegangan dan arus supply, gunakanlah supply 12v 2A atau lebih, supaya servo bisa bergerak lancar, untuk lebih jelasnya berikut skema dan programnya.



 a. Minimum System





 b. Driver Servo XISC-32





 c. Mini Servo





d. UBEC ( Voltage Regulator )






e. Program Bascom AVR

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

' #0 artinya port driver ke 0
' P2000 artinya posisi servo ada di 200 - tambahkan satu 0 dibelakngnya 
' T1000 artinya kecepatan untuk ke posisi tersebut lamanya 1 detik

Do
'kiri
Print " #0 P2000 T1000 "
Wait 1

'angkat
Print " #2 P1450 T300 "
Wait 1

'buka
Print " #3 P500 T1000 "
Wait 1

'maju
Print " #2 P2400 T1000 "
Wait 1

 'bawah
'Print " #1 P1900 T500 "
'Wait 1

'atas
'Print " #1 P2000 T500 "
'Wait 1

'japit
Print " #3 P900 T1000 "
Wait 3

'angkat
Print " #2 P1450 T300 "
Wait 1

'===============================

'kanan
Print " #0 P1000 T1000 "
Wait 1

'maju
Print " #2 P2400 T1000 "
Wait 1

 'bawah
'Print " #1 P1900 T500 "
'Wait 1

'atas
'Print " #1 P2000 T500 "
'Wait 1

'buka
Print " #3 P500 T1000 "
Wait 3

'angkat
Print " #2 P1450 T300 "
Wait 1

'japit
Print " #3 P900 T1000 "
Wait 1

Loop




f. VIDEO HASILNYA









Membuat Frequency Counter ( Pencacah Frekuensi ) 0.01 Hz - 100 Hz

Membuat Frequency Counter ( Pencacah Frekuensi ) 0.01 Hz - 100 Hz


                 Kali ini saya akan menjelasksn mengenai bagaimana cara membuat alat untuk menghitung frekuensi yang masuk atau bahasa lainnya yaitu frekuensi counter, frekuensi counter biasanya digunakan untuk mendeteksi frekuensi misalnya sinyal tegangan AC PLN 50 Hz dan sinyal frekuensi rendah lainnya, alat ini dibuat untuk mendeteksi sinyal antara frekuensi 0.01 Hz sampai 100 Hz dan cocok dipakai untuk detektor kerusakan aliran listrik 220v AC 50 Hz, jadi jika yang terdeteksi tidak 50 Hz berarti ada kerusakan yang terjadi, dan bisa dengan otomatis mematikan listrik melalui relay, itu merupakan contoh aplikasi dari alat ini.



a. Minimum System





b. Program Bascom AVR

$regfile = "m32def.dat"
$crystal = 8000000
$baud = 115200

$hwstack = 64
$swstack = 64
$framesize = 64

Config Timer2 = Timer , Prescale = 1
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

Dim Cycle_status As Byte
Dim Countvar1 As Long                                       'CONTINUING COUNT
Dim Countvar2 As Long                                       'VALUE FOR CALC. DISPLAY
Dim Divi As Long
Divi = 40750                                                'USE TO CALCULATE FREQUENCY
Dim Frequ As Single
Dim Tim1_count As Word

Cycle_status = 1

Config Portd.2 = Input                                      'FREQUENCY INPUT
Portd.2 = 1                                                 'PULL UP RESISTOR ON
Config Int0 = Falling                                       'RISING EDGE OF PULSE

On Timer2 Lcount_isr                                        'LOOP COUNTER
On Int0 Status_update_isr                                   'STATUS OF CYCLE

Enable Timer2                                               'USE AS COUNTER
Enable Int0

Enable Interrupts

Cls

Timer1 = 0

Do

Frequ = Divi \ Countvar2
Locate 1 , 1
Lcd Fusing(frequ , "#.##") ; " Hz "

Loop
End

'******* ISR ROUTINES ********
Lcount_isr:
                                                             'TIMER2 OVERFLOW INT
If Cycle_status = 0 Then Incr Countvar1
Timer2 = 155
Return
'***
Status_update_isr:                                          'INT0 FROM FREQUENCY INPUT
If Cycle_status = 0 Then
   Countvar2 = Countvar1
   Countvar1 = 0
   Cycle_status = 1
Else
   Cycle_status = 0
   Countvar1 = 0
End If

Return





c. VIDEO HASILNYA










Membuat Alat Kendali Motor DC Dengan Fuzzy Logic Controller & mikrokontroller

Membuat Alat Kendali Motor DC Dengan Fuzzy Logic Controller Using Bascom AVR


              Kali ini, di kesempatan yang berbahagia ini saya akan menjelaskan mengenai bagaimana cara mengendalikan putaran motor dc menggunakan kontrol logika fuzzy, sebenarnya kontroller ini jika harus dibuat di mikrokontroller akan memakan memori yang besar, apalagi jika rule base nya banyak, lebih baik menggunakan mikrokontroller bermemori besar jika ingin menggunakan logika fuzzy ini seperti ATMega2560 atau ATMega128. Prinsip kerjanya sistem ini sangat sederhana sekali yaitu ada sebuah motor dc yang akan berputar dengan kecepatan tergantung oleh suhu dan kelembapan, misal jika suhu panas dan kelembapan juga tinggi maka motor akan berputar kencang, sebaliknya jika dingin dan kering maka motor akan berputar lambat, sensor yang dipakai yaitu sensor suhu dan kelembapan DHT11. untuk lebih jelasnya berikut penjelasan skema dan programnya.



a. Minimum System





b. Sensor DHT11

           Hubungkan pin OUT ke PORTB.2 MCU





c. Motor DC 1000 Rpm + Driver L293

              Menggunakan PWM1a (PortB.5) dan arah putaran (PortB.0 dan PortB.1)
 






d. Fuzzy Logic Controller



Rumus yang dipakai yaitu





Rumus COG =




e. Program Bascom AVR

 '====================================================
'Programmer: Yanuar Mukhammad
'E-mail    : Yanuarm@hotmail.com
'Title     : Fuzzy Logic Controller
'=====================================================

$regfile = "m16def.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 Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Down

Cursor Off
Cls

Declare Sub Get_th(t As Byte , H As Byte)
Config Serialin = Buffered , Size = 128
Config Serialout = Buffered , Size = 128

Dht_put Alias Portb.2
Dht_get Alias Pinb.2
Dht_io_set Alias Ddrb.2

Dim T As Byte
Dim H As Byte
Dim Crc As Byte
Dim Mybyte As Byte
Dim Sensor_data As String * 40
Dim Tmp_str8 As String * 8
Dim Count As Byte
Dim Y As Single


Dim Dingin As Single , Hangat As Single , Panas As Single
Dim Kering As Single , Sedang As Single , Lembab As Single
Dim Lb As Single , Sd As Single , Ke As Single
Dim Hasillb As Single , Hasilsd As Single , Hasilke As Single
Dim Coglb As Single , Cogsd As Single , Cogke As Single
Dim Cogxlb As Single , Cogxsd As Single , Cogxke As Single
Dim Komlb As Single , Komsd As Single , Komke As Single
Dim Penlb As Single , Pensd As Single , Penke As Single
Dim Totalkom As Single , Totalpen As Single
Dim Cog As Single
Dim Strcog As String * 5
Dim Lb1 As Single , Lb2 As Single , Lb3 As Single
Dim Sd1 As Single , Sd2 As Single , Sd3 As Single
Dim Ke1 As Single , Ke2 As Single , Ke3 As Single
Dim Strhasillb As String * 5 , Strhasilsd As String * 5 , Strhasilke As String * 5

Ddrb.0 = 1
Ddrb.1 = 1

Enable Interrupts

Set Dht_io_set
Set Dht_put

Portb.0 = 0
Portb.1 = 1

Cog = 0

Do


'Fuzzifikasi

If T <= 25 Then
Dingin = 1
Elseif T >= 35 Then
Panas = 1
Elseif T = 30 Then
Hangat = 1
Elseif T > 25 And T < 30 Then
Hangat = T - 25
Hangat = Hangat / 5

Dingin = T - 25
Dingin = Dingin / 5
Dingin = 1 - Dingin
Elseif T > 30 And T < 35 Then
Panas = T - 30
Panas = Panas / 5

Hangat = T - 30
Hangat = Hangat / 5
Hangat = 1 - Hangat
End If


If H <= 40 Then
Kering = 1
Elseif H >= 80 Then
Lembab = 1
Elseif H = 60 Then
Sedang = 1
Elseif H > 40 And H < 60 Then
Sedang = H - 40
Sedang = Sedang / 20

Kering = H - 40
Kering = Kering / 20
Kering = 1 - Kering
Elseif T > 60 And T < 80 Then
Lembab = H - 60
Lembab = Lembab / 20

Sedang = H - 60
Sedang = Sedang / 20
Sedang = 1 - Sedang

End If




'Fuzzy Rule

If T <= 25 And H <= 40 Then
   If Dingin < Kering Then
   Lb = Dingin
   Elseif Dingin > Kering Then
   Lb = Kering
   Elseif Dingin = Kering Then
   Lb = Kering
   End If

   Hasillb = Lb
   Hasilsd = 0
   Hasilke = 0

Elseif T <= 25 And H > 40 And H < 60 Then
   If Dingin < Kering Then
   Lb1 = Dingin
   Elseif Dingin > Kering Then
   Lb1 = Kering
   Elseif Dingin = Kering Then
   Lb1 = Kering
   End If

   If Dingin < Sedang Then
   Lb2 = Dingin
   Elseif Dingin > Sedang Then
   Lb2 = Sedang
   Elseif Dingin = Sedang Then
   Lb2 = Sedang
   End If

   If Lb1 < Lb2 Then
   Hasillb = Lb2
   Elseif Lb1 > Lb2 Then
   Hasillb = Lb1
   Elseif Lb1 = Lb2 Then
   Hasillb = Lb1
   End If

   Hasilsd = 0
   Hasilke = 0

Elseif T <= 25 And H > 60 And H < 80 Then
   If Dingin < Sedang Then
   Lb = Dingin
   Elseif Dingin > Sedang Then
   Lb = Sedang
   Elseif Dingin = Sedang Then
   Lb = Sedang
   End If

   If Dingin < Lembab Then
   Sd = Dingin
   Elseif Dingin > Lembab Then
   Sd = Lembab
   Elseif Dingin = Lembab Then
   Sd = Lembab
   End If

   Hasillb = Lb
   Hasilsd = Sd
   Hasilke = 0

Elseif T <= 25 And H > 80 Then
   If Dingin < Lembab Then
   Sd = Dingin
   Elseif Dingin > Lembab Then
   Sd = Lembab
   Elseif Dingin = Lembab Then
   Sd = Lembab
   End If

   Hasilsd = Sd
   Hasillb = 0
   Hasilke = 0

Elseif T > 25 And T < 30 And H <= 40 Then
   If Dingin < Kering Then
   Lb1 = Dingin
   Elseif Dingin > Kering Then
   Lb1 = Kering
   Elseif Dingin = Kering Then
   Lb1 = Kering
   End If

   If Hangat > Kering Then
   Lb2 = Kering
   Elseif Hangat < Kering Then
   Lb2 = Hangat
   Elseif Hangat = Kering Then
   Lb2 = Hangat
   End If

   If Lb1 < Lb2 Then
   Hasillb = Lb2
   Elseif Lb1 > Lb2 Then
   Hasillb = Lb1
   Elseif Lb1 = Lb2 Then
   Hasillb = Lb1
   End If

   Hasilsd = 0
   Hasilke = 0

Elseif T > 25 And T < 30 And H > 40 And H < 60 Then
   If Dingin < Kering Then
   Lb1 = Dingin
   Elseif Dingin > Kering Then
   Lb1 = Kering
   Elseif Dingin = Kering Then
   Lb1 = Kering
   End If

   If Dingin < Sedang Then
   Lb2 = Dingin
   Elseif Dingin > Sedang Then
   Lb2 = Sedang
   Elseif Dingin = Sedang Then
   Lb2 = Sedang
   End If

   If Hangat < Kering Then
   Lb3 = Dingin
   Elseif Hangat > Kering Then
   Lb3 = Kering
   Elseif Hangat = Kering Then
   Lb3 = Kering
   End If

   If Hangat < Sedang Then
   Sd = Hangat
   Elseif Hangat > Sedang Then
   Sd = Sedang
   Elseif Hangat = Sedang Then
   Sd = Sedang
   End If

   If Lb1 > Lb2 And Lb1 > Lb3 Then                          'pedoman
   Hasillb = Lb1
   Elseif Lb1 > Lb2 And Lb1 = Lb3 Then
   Hasillb = Lb1
   Elseif Lb1 = Lb2 And Lb1 > Lb3 Then
   Hasillb = Lb1
   Elseif Lb1 = Lb2 And Lb1 = Lb3 Then
   Hasillb = Lb1

   Elseif Lb2 > Lb1 And Lb2 > Lb3 Then
   Hasillb = Lb2
   Elseif Lb2 > Lb1 And Lb2 = Lb3 Then
   Hasillb = Lb2
   Elseif Lb2 = Lb1 And Lb2 > Lb3 Then
   Hasillb = Lb2
   Elseif Lb2 = Lb1 And Lb2 = Lb3 Then
   Hasillb = Lb2

   Elseif Lb3 > Lb1 And Lb3 > Lb2 Then
   Hasillb = Lb3
   Elseif Lb3 > Lb1 And Lb3 = Lb2 Then
   Hasillb = Lb3
   Elseif Lb3 = Lb1 And Lb3 > Lb2 Then
   Hasillb = Lb3
   Elseif Lb3 = Lb1 And Lb3 = Lb2 Then
   Hasillb = Lb3


   End If

   Hasilsd = Sd
   Hasilke = 0

Elseif T > 25 And T < 30 And H > 60 And H < 80 Then
   If Dingin < Sedang Then
   Lb = Dingin
   Elseif Dingin > Sedang Then
   Lb = Sedang
   Elseif Dingin = Sedang Then
   Lb = Sedang
   End If

   If Dingin < Lembab Then
   Sd1 = Dingin
   Elseif Dingin > Lembab Then
   Sd1 = Lembab
   Elseif Dingin = Lembab Then
   Sd1 = Lembab
   End If

   If Hangat < Sedang Then
   Sd2 = Hangat
   Elseif Hangat > Sedang Then
   Sd2 = Sedang
   Elseif Hangat = Sedang Then
   Sd2 = Sedang
   End If

   If Hangat < Lembab Then
   Ke = Hangat
   Elseif Hangat > Lembab Then
   Ke = Lembab
   Elseif Hangat = Lembab Then
   Ke = Lembab
   End If

   If Sd1 > Sd2 Then
   Hasilsd = Sd1
   Elseif Sd2 > Sd1 Then
   Hasilsd = Sd2
   Elseif Sd2 = Sd1 Then
   Hasilsd = Sd2
   End If

   Hasillb = Lb
   Hasilke = Ke



Elseif T > 25 And T < 30 And H > 80 Then
   If Dingin < Lembab Then
   Sd = Dingin
   Elseif Dingin > Lembab Then
   Sd = Lembab
   Elseif Dingin = Lembab Then
   Sd = Lembab
   End If

   If Hangat > Lembab Then
   Ke = Lembab
   Elseif Hangat < Lembab Then
   Ke = Hangat
   Elseif Hangat = Lembab Then
   Ke = Hangat
   End If

   Hasilsd = Sd
   Hasilke = Ke
   Hasillb = 0


Elseif T = 30 And H <= 40 Then
   If Hangat > Kering Then
   Lb = Kering
   Elseif Hangat < Kering Then
   Lb = Hangat
   Elseif Hangat = Kering Then
   Lb = Hangat
   End If

   Hasillb = Lb
   Hasilsd = 0
   Hasilke = 0

Elseif T = 30 And H > 40 And H < 60 Then
   If Hangat < Kering Then
   Lb = Hangat
   Elseif Hangat > Kering Then
   Lb = Kering
   Elseif Hangat = Kering Then
   Lb = Kering
   End If

   If Hangat < Sedang Then
   Sd = Hangat
   Elseif Hangat > Kering Then
   Sd = Kering
   Elseif Hangat = Kering Then
   Sd = Kering
   End If

   Hasillb = Lb
   Hasilsd = Sd
   Hasilke = 0


Elseif T = 30 And H > 60 And H < 80 Then
   If Hangat < Sedang Then
   Sd = Hangat
   Elseif Hangat > Sedang Then
   Sd = Sedang
   Elseif Hangat = Sedang Then
   Sd = Sedang
   End If

   If Hangat < Lembab Then
   Ke = Hangat
   Elseif Hangat > Lembab Then
   Ke = Lembab
   Elseif Hangat = Lembab Then
   Ke = Lembab
   End If

   Hasilsd = Sd
   Hasilke = Ke
   Hasillb = 0


Elseif T = 30 And H > 80 Then
   If Hangat < Lembab Then
   Ke = Hangat
   Elseif Hangat > Lembab Then
   Ke = Lembab
   Elseif Hangat = Lembab Then
   Ke = Lembab
   End If

   Hasilke = Ke
   Hasilsd = 0
   Hasillb = 0


Elseif T > 30 And T < 35 And H <= 40 Then
   If Hangat < Kering Then
   Lb = Hangat
   Elseif Hangat > Kering Then
   Lb = Kering
   Elseif Hangat = Kering Then
   Lb = Kering
   End If

   If Panas < Kering Then
   Sd = Panas
   Elseif Panas > Kering Then
   Sd = Kering
   Elseif Panas = Kering Then
   Sd = Kering
   End If

   Hasillb = Lb
   Hasilsd = Sd
   Hasilke = 0


Elseif T > 30 And T < 35 And H > 40 And H < 60 Then
   If Hangat < Kering Then
   Lb = Hangat
   Elseif Hangat > Kering Then
   Lb = Kering
   Elseif Hangat = Kering Then
   Lb = Kering
   End If

   If Hangat < Sedang Then
   Sd1 = Hangat
   Elseif Hangat > Sedang Then
   Sd1 = Sedang
   Elseif Hangat = Sedang Then
   Sd1 = Sedang
   End If

   If Panas < Kering Then
   Sd2 = Panas
   Elseif Panas > Kering Then
   Sd2 = Kering
   Elseif Panas = Kering Then
   Sd2 = Kering
   End If

   If Panas < Sedang Then
   Ke = Panas
   Elseif Panas > Sedang Then
   Ke = Sedang
   Elseif Panas = Sedang Then
   Ke = Sedang
   End If

   If Sd1 < Sd2 Then
   Hasilsd = Sd2
   Elseif Sd1 > Sd2 Then
   Hasilsd = Sd1
   Elseif Sd1 = Sd2 Then
   Hasilsd = Sd1
   End If

   Hasilke = Ke
   Hasillb = Lb


Elseif T > 30 And T < 35 And H > 60 And H < 80 Then
   If Hangat < Sedang Then
   Sd = Hangat
   Elseif Hangat > Sedang Then
   Sd = Sedang
   Elseif Hangat = Sedang Then
   Sd = Sedang
   End If

   If Hangat < Lembab Then
   Ke1 = Hangat
   Elseif Hangat > Lembab Then
   Ke1 = Lembab
   Elseif Hangat = Lembab Then
   Ke1 = Lembab
   End If

   If Panas < Sedang Then
   Ke2 = Panas
   Elseif Panas > Sedang Then
   Ke2 = Sedang
   Elseif Panas = Sedang Then
   Ke2 = Sedang
   End If

   If Panas < Lembab Then
   Ke3 = Panas
   Elseif Panas > Lembab Then
   Ke3 = Lembab
   Elseif Panas = Lembab Then
   Ke3 = Lembab
   End If

   If Ke1 > Ke2 And Ke1 > Ke3 Then
   Hasilke = Ke1
   Elseif Ke1 > Ke2 And Ke1 = Ke3 Then
   Hasilke = Ke1
   Elseif Ke1 = Ke2 And Ke1 > Ke3 Then
   Hasilke = Ke1
   Elseif Ke1 = Ke2 And Ke1 = Ke3 Then
   Hasilke = Ke1

   Elseif Ke2 > Ke1 And Ke2 > Ke3 Then
   Hasilke = Ke2
   Elseif Ke2 > Ke1 And Ke2 = Ke3 Then
   Hasilke = Ke2
   Elseif Ke2 = Ke1 And Ke2 > Ke3 Then
   Hasilke = Ke2
   Elseif Ke2 = Ke1 And Ke2 = Ke3 Then
   Hasilke = Ke2


   Elseif Ke3 > Ke1 And Ke3 > Ke2 Then
   Hasilke = Ke3
   Elseif Ke3 > Ke1 And Ke3 = Ke2 Then
   Hasilke = Ke3
   Elseif Ke3 = Ke1 And Ke3 > Ke2 Then
   Hasilke = Ke3
   Elseif Ke3 = Ke1 And Ke3 = Ke2 Then
   Hasilke = Ke3
   End If

   Hasilsd = Sd
   Hasillb = 0


Elseif T > 30 And T < 35 And H > 80 Then
   If Hangat < Lembab Then
   Ke1 = Hangat
   Elseif Hangat > Lembab Then
   Ke1 = Lembab
   Elseif Hangat = Lembab Then
   Ke1 = Lembab
   End If

   If Panas < Lembab Then
   Ke2 = Panas
   Elseif Panas > Lembab Then
   Ke2 = Lembab
   Elseif Panas = Lembab Then
   Ke2 = Lembab
   End If

   If Ke1 < Ke2 Then
   Hasilke = Ke2
   Elseif Ke1 > Ke2 Then
   Hasilke = Ke1
   Elseif Ke1 = Ke2 Then
   Hasilke = Ke1
   End If

   Hasilsd = 0
   Hasillb = 0


Elseif T >= 35 And H <= 40 Then
   If Panas < Kering Then
   Sd = Panas
   Elseif Panas > Kering Then
   Sd = Kering
   Elseif Panas = Kering Then
   Sd = Kering
   End If

   Hasilsd = Sd
   Hasillb = 0
   Hasilke = 0

Elseif T >= 35 And H > 40 And H < 60 Then
   If Panas < Kering Then
   Sd = Panas
   Elseif Panas > Kering Then
   Sd = Kering
   Elseif Panas = Kering Then
   Sd = Kering
   End If

   If Panas < Sedang Then
   Ke = Panas
   Elseif Panas > Sedang Then
   Ke = Sedang
   Elseif Panas = Sedang Then
   Ke = Sedang
   End If

   Hasilsd = Sd
   Hasilke = Ke
   Hasillb = 0

Elseif T >= 35 And H > 60 And H < 80 Then
   If Panas < Sedang Then
   Ke1 = Panas
   Elseif Panas > Sedang Then
   Ke1 = Sedang
   Elseif Panas = Sedang Then
   Ke1 = Sedang
   End If

   If Panas < Lembab Then
   Ke2 = Panas
   Elseif Panas > Lembab Then
   Ke2 = Lembab
   Elseif Panas = Lembab Then
   Ke2 = Lembab
   End If

   If Ke1 < Ke2 Then
   Hasilke = Ke2
   Elseif Ke1 > Ke2 Then
   Hasilke = Ke1
   Elseif Ke1 = Ke2 Then
   Hasilke = Ke1
   End If

   Hasillb = 0
   Hasilsd = 0


Elseif T >= 35 And H > 80 Then
   If Panas < Lembab Then
   Ke = Panas
   Elseif Panas > Lembab Then
   Ke = Lembab
   Elseif Panas = Lembab Then
   Ke = Lembab
   End If

   Hasilke = Ke
   Hasilsd = 0
   Hasillb = 0

Elseif T <= 25 And H = 60 Then
   If Dingin < Sedang Then
   Lb = Dingin
   Elseif Dingin > Sedang Then
   Lb = Sedang
   Elseif Dingin = Sedang Then
   Lb = Sedang
   End If

   Hasillb = Lb
   Hasilsd = 0
   Hasilke = 0

Elseif T > 25 And T < 30 And H = 60 Then
   If Dingin < Sedang Then
   Lb = Dingin
   Elseif Dingin > Sedang Then
   Lb = Sedang
   Elseif Dingin = Sedang Then
   Lb = Sedang
   End If

   If Hangat < Sedang Then
   Sd = Hangat
   Elseif Hangat > Sedang Then
   Sd = Sedang
   Elseif Hangat = Sedang Then
   Sd = Sedang
   End If

   Hasillb = Lb
   Hasilsd = Sd
   Hasilke = 0

Elseif T = 30 And H = 60 Then
   If Hangat < Sedang Then
   Sd = Hangat
   Elseif Hangat > Sedang Then
   Sd = Sedang
   Elseif Hangat = Sedang Then
   Sd = Sedang
   End If

   Hasilsd = Sd
   Hasillb = 0
   Hasilke = 0

Elseif T > 30 And T < 35 And H = 60 Then
   If Hangat < Sedang Then
   Sd = Hangat
   Elseif Hangat > Sedang Then
   Sd = Sedang
   Elseif Hangat = Sedang Then
   Sd = Sedang
   End If

   If Panas < Sedang Then
   Ke = Panas
   Elseif Panas > Sedang Then
   Ke = Sedang
   Elseif Panas = Sedang Then
   Ke = Sedang
   End If

   Hasilsd = Sd
   Hasilke = Ke
   Hasillb = 0

Elseif T >= 35 And H = 60 Then
   If Panas < Sedang Then
   Ke = Panas
   Elseif Panas > Sedang Then
   Ke = Sedang
   Elseif Panas = Sedang Then
   Ke = Sedang
   End If

   Hasilke = Ke
   Hasilsd = 0
   Hasillb = 0


End If


'Defuzzifikasi

'0-10-20-30-40-50
Coglb = 150
Cogxlb = 6

'60-70-80-90-100-110-120
Cogsd = 630
Cogxsd = 7

'130-140-150-160-170-180-190-200
Cogke = 1320
Cogxke = 8
'

Komlb = Coglb * Hasillb
Komsd = Cogsd * Hasilsd
Komke = Cogke * Hasilke

Totalkom = Komlb + Komsd
Totalkom = Totalkom + Komke

Penlb = Hasillb * Cogxlb
Pensd = Hasilsd * Cogxsd
Penke = Hasilke * Cogxke

Totalpen = Penlb + Pensd
Totalpen = Totalpen + Penke


Cog = Totalkom / Totalpen


   Call Get_th(t , H)

   Cls
   Strcog = Fusing(cog , "#.##")

   Upperline
   Lcd "TMP: " ; T ; "C " ; H ; "%"
   Lowerline
   Lcd "Fuzzy = " ; Strcog

   Pwm1a = Cog
   Waitms 1500

   Cls

   Strhasillb = Fusing(hasillb , "#.##")
   Strhasilsd = Fusing(hasilsd , "#.##")
   Strhasilke = Fusing(hasilke , "#.##")


   Upperline
   Lcd "TMP: " ; T ; "C " ; H ; "%"
   Lowerline
   Lcd Strhasillb ; " " ; Strhasilsd ; " " ; Strhasilke
   Wait 3

Loop


'mengambil data DHT11

Sub Get_th(t As Byte , H As Byte)
 Count = 0
 Sensor_data = ""
 Set Dht_io_set
 Reset Dht_put
 Waitms 25
 Set Dht_put
 Waitus 40
 Reset Dht_io_set
 Waitus 40
 If Dht_get = 1 Then
    H = 1
    Exit Sub
 End If
  Waitus 80
  If Dht_get = 0 Then
    H = 2
    Exit Sub
  End If
  While Dht_get = 1 : Wend
   Do
    While Dht_get = 0 : Wend
    Waitus 30
     If Dht_get = 1 Then
       Sensor_data = Sensor_data + "1"
       While Dht_get = 1 : Wend
       Else
       Sensor_data = Sensor_data + "0"
    End If
    Incr Count
   Loop Until Count = 40
   Set Dht_io_set
   Set Dht_put
   Tmp_str8 = Left(sensor_data , 8)
   H = Binval(tmp_str8)
   Tmp_str8 = Mid(sensor_data , 17 , 8)
   T = Binval(tmp_str8)
   Tmp_str8 = Right(sensor_data , 8)
   Crc = Binval(tmp_str8)
   Mybyte = T + H
   If Mybyte <> Crc Then
      H = 3
   End If

End Sub





f. VIDEO HASILNYA









Link referensi - visit here :
http://petro.tanrei.ca/fuzzylogic/fuzzy_negnevistky.html