Translate

Membuat Stabilizer Camera / Gimbal Menggunakan Microcontroller ATMega + Bascom AVR dan PID Control

Membuat Stabilizer Camera / Gimbal Menggunakan Microcontroller ATMega + Bascom AVR dan PID Control


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat untuk stabilizer camera atau penstabil posisi kamera atau dengan nama lain GIMBAL dengan menggunakan motor servo dan mikrokontroller ATMega16, sensor yang digunakan memang sensor umum yaitu GY-61 sehingga hasilnya memang kurang memuaskan, jika ingin lebih bagus hasilnya pakai sensor accelerometer / kemiringan yang bagus kualitasnya. servo yang dipakai yaitu servo HI-TECH sebanyak 3 buah. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Minimum System ATmega





b. Motor Servo 3 pcs





c. UBEC 3A





d. Sensor kemiringan / accelerometer






e, Program Bascom AVR

$regfile = "m16def.dat"
$crystal = 8000000
$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

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Config Servos = 3 , Servo1 = Portb.0 , Servo2 = Portb.1 , Servo3 = Portb.2 , Reload = 10

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output

Enable Interrupts

Cls
Cursor Off


Dim X As Word
Dim Y As Word
Dim Z As Word

Dim Kpx As Single
Dim Kix As Single
Dim Kdx As Single
Dim Setpointx As Single
Dim Px As Single
Dim Pix As Single
Dim Pidx As Single
Dim Ix As Single
Dim Dx As Single
Dim Errorx As Single
Dim Errorxx As Single
Dim Sum_errx As Single


Dim Kpy As Single
Dim Kiy As Single
Dim Kdy As Single
Dim Setpointy As Single
Dim Py As Single
Dim Piy As Single
Dim Pidy As Single
Dim Iy As Single
Dim Dy As Single
Dim Errory As Single
Dim Errorxy As Single
Dim Sum_erry As Single



Start Adc

Kpx = 0.9                                                   ' Proportional factor
Kix = 0.12                                                  ' Integration factor
Kdx = 1.91                                                  ' derrivative factor

Setpointx = 600


Kpy = 0.09                                                  ' Proportional factor
Kiy = 0.02                                                  ' Integration factor
Kdy = 0.91                                                  ' derrivative factor

Setpointy = 600



Servo(3) = 80
Servo(2) = 45

Do

X = Getadc(0)
Y = Getadc(1)
Z = Getadc(2)

Errorx = Setpointx - X

Px = Errorx * Kpx

Sum_errx = Errorx + Errorxx
Ix = Kix * Sum_errx

Dx = Errorx - Errorxx

Pix = Px + Ix
Pidx = Pix + Dx

Pidx = Pidx * 7
Pidx = 210 - Pidx


If Pidx > 255 Then
Pidx = 255
End If


If Pidx < 1 Then
Pidx = 0
End If



Errory = Setpointy - Y

Py = Errory * Kpy

Sum_erry = Errory + Errorxy
Iy = Kiy * Sum_erry

Dy = Errory - Errorxy

Piy = Py + Iy
Pidy = Piy + Dy
Pidy = Pidy * 5
Pidy = Pidy - 95

If Pidy > 255 Then
Pidy = 255
End If


If Pidy < 1 Then
Pidy = 0
End If


'Locate 1 , 1
'Lcd "x=" ; X ; " " ; Pidx
'Locate 2 , 1
'Lcd "y=" ; Y ; " " ; Pidy
'Locate 1 , 9
'Lcd "z=" ; Z ; " "

'y
'Servo(1) = 60
'x
Servo(2) = Pidx
'Wait 1
'y
Servo(1) = Pidy
'x
'Servo(2) = 150
'Wait 1

'Print x ; "   " ; Pidx

'Waitms 200

Errorxx = Errorx
Errorxy = Errory

Loop






f. VIDEO HASILNYA










Kursus Mikrokontroller ARDUINO untuk PEMULA

Kursus Mikrokontroller ARDUINO untuk PEMULA


       Akhirnya kami telah merilis dengan resmi kursus mikrokontroller Arduino untuk pemula dan khusus untuk daerah surabaya, jadi jika Anda berminat ingin bisa membuat alat-alat menggunakan mikrokontroller Arduino atau ingin membuat robot dengan Arduino maka bisa kursus di tempat kami. adapun biaya dan tempat yang kami tawarkan yaitu seperti berikut:


a. Waktu:
        - 2 atau 3 Pertemuan ( maksimal 3 pertemuan )


b. Biaya Kursus: 
        - Kursus di rumah Tentor = Rp. 300.000 / orang   
        - Kursus di rumah peserta kursus / client + Transport = Rp. 500.000


c. Tempat:
        - Di Rumah Tentor 
        - Di Rumah peserta / client 


d. Materi:
        - Basic I/O
        - Mengakses LCD
        - Mengakses Sensor Analog
        - Mengakses komunikasi Serial
        - Mengakses Motor DC dan Motor Servo


        Jadi kami menawarkan kursus mikrokonroller Arduino untuk pemula dengan waktu pertemuan 2 atau 3 kali pertemuan dengan estimasi jam sekitar 2-3 jam tergantung kebutuhan, kemudian untuk tempat ada dua buah pilihan yang pertama yaitu kursus di rumah peserta atau client dengan spesifikasi biaya yaitu biaya kursus Rp. 300.000 dan biaya transport Rp. 200.000 jadi total Rp. 500.000, untuk kursus di rumah tentor biaya Rp. 300.000. tidak ada biaya transport. untuk waktu dan jam kursus menyesuaikan kegiatan dari peserta kursus. Minimal peserta kursus 1 orang dan tidak ada batas maksimal peserta artinya berapa pun peserta bisa dimulai kursusnya. 
       Demikian rincian yang kami tawarkan semoga bisa dicermati secara detail, jika tidak paham silahkan kontak via WA di nomer ini 085726496643 an Yanuar M. jika ingin membeli komponen yang kami ajarkan pada saat kursus bisa kami sediakan dengan biaya tersendiri dan tidak include biaya kursus. yang harus dibawa oleh peserta kursus yaitu buku dan laptop saja. Terima kasih  







Membuat Alat Monitoring / Penghitung Barang Menggunakan Barcode Scanner MCR 12 ARDUINO dengan Interface VB 6 dan Database MS ACCESS

Membuat Alat Monitoring / Penghitung Barang Menggunakan Barcode Scanner MCR 12 ARDUINO dengan Interface VB 6 dan Database MS ACCESS


       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana membuat sebuah alat untuk menghitung jumlah barang sekaligus melihat kode barcodenya, selain itu juga memunculkan informasi terkait barang tersebut pada interface vb 6 dengan database yang digunakan adalah MS ACCESS, jadi alat ini yang pertama akan men-scan barcode kemudian akan menghitung jumlah barang, kemudian akan mengirimkan kode barcode tersebut ke interface vb 6, pada interface vb 6 akan ditamplkan beberapa informasi seperti nama barang, tanggal produksi, tanggal kadaluarsa dan kode barcodenya, pada interface juga dilengkapi dengan beberapa buah tombol untuk insert data secara manual ke database jika data di database tidak mencantumkan kode barcode yang baru. alat ini menggunakan arduino sebagai kontrollernya dan Barcode scanner MCR 12 sebagai reader ITF 14 code nya, untuk lebih jelasnya berikut adalah skema dan programnya.


Link Download Program
https://www.4shared.com/rar/T3nkpMkAca/barcode.html




a. Arduino Mega






b. Barcode Scanner MCR 12





c. LCD 16x2






d. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(11, 12, 4, 5, 6, 7);

String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete
String barcode;
int jumlah = 0;

void setup() {
  lcd.begin(16, 2);
  lcd.clear();
  lcd.noCursor();
 
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(10,OUTPUT);
   
  Serial.begin(9600);
  inputString.reserve(200);
}

void loop() {
 
  digitalWrite(8,HIGH);
  digitalWrite(10,LOW);
  analogWrite(9,50);
 
  lcd.setCursor(0, 0);
  lcd.print("JUMLAH= ");
  lcd.print(jumlah);

  if (stringComplete) {
    //Serial.println(inputString);
    barcode = inputString.substring(0,14);
    lcd.setCursor(0, 1);
    lcd.print(barcode);
    delay(1000);
    Serial.println(barcode);
    lcd.setCursor(0, 1);
    lcd.print("                ");
    jumlah++;   
    inputString = "";
    stringComplete = false;
  
  }
}


void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}





e. Program Interface VB 6




 //============= main form =========================

Dim Conn1 As ADODB.Connection
Dim Cmd1 As ADODB.Command
Dim Param1 As ADODB.Parameter
Dim Rs1 As ADODB.Recordset


Private Sub cbdelete_Click()
Dim SQl As String
   
    Call dbConnect
   
    SQl = "DELETE FROM Table1 WHERE Kode = '" & tbcode.Text & "'"
   
    Dim Rs As Recordset
    Set Rs = New ADODB.Recordset
    Rs.Open SQl, Conn, adOpenDynamic, adLockOptimistic
   
    tbnama.Text = ""
    tbproduksi.Text = ""
    tbkadaluarsa.Text = ""
    tbcode.Text = ""
   
End Sub

Private Sub cbinsert_Click()
Dim SQl As String
   
   Call dbConnect
   
    SQl = "INSERT INTO Table1 VALUES('" & tbcode.Text & "','" & tbproduksi.Text & "','" & tbkadaluarsa.Text & "','" & tbnama.Text & "')"
   
    Dim Rs As Recordset
    Set Rs = New ADODB.Recordset
    Rs.Open SQl, Conn, adOpenDynamic
    tbcode.Text = ""
    tbproduksi.Text = ""
    tbkadaluarsa.Text = ""
    tbnama.Text = ""
End Sub

Private Sub cbselect_Click()
Dim SQl As String
   
    Call dbConnect
   
    SQl = "Select * from Table1  where Kode = '" & tbcode.Text & "'"
   
    Dim Rs As Recordset
    Set Rs = New ADODB.Recordset
    Rs.Open SQl, Conn, adOpenDynamic, adLockOptimistic
   
   
    If Not Rs.EOF Then
        tbproduksi.Text = Rs!Produksi
        tbkadaluarsa.Text = Rs!Kadaluarsa
        tbnama.Text = Rs!Nama
    End If
End Sub

Private Sub cmdConnect_Click()
Dim port As Integer
On Error GoTo errcode



If MSComm1.PortOpen = False Then
    MSComm1.CommPort = Combo1.ListIndex + 1
    MSComm1.RThreshold = 1
    MSComm1.InputLen = 0
    MSComm1.Settings = Combo2.List(Combo2.ListIndex) & ",N,8,1"
    MSComm1.PortOpen = True
cmdConnect.Enabled = False
cmdDisconnect.Enabled = True
End If

Exit Sub

errcode:
    MsgBox "Port Salah !", vbOKOnly, "Peringatan"
    Combo1.SetFocus


End Sub

Private Sub cmdDisconnect_Click()
If MSComm1.PortOpen = True Then
    MSComm1.PortOpen = False
End If
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False

End Sub

Private Sub Command1_Click()
Unload Me
End Sub

Private Sub Form_Load()
Dim i As Byte
For i = 1 To 16
Combo1.AddItem (i)
Next i
With Combo2
        .AddItem "2400"
        .AddItem "4800"
        .AddItem "9600"
        .AddItem "19200"
        .AddItem "38400"
        .AddItem "56600"
       
End With
Timer2.Enabled = False
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End Sub

Private Sub Timer1_Timer()
Adodc2.Refresh
End Sub

Private Sub Timer2_Timer()
MSComm1_OnComm


End Sub

Private Sub Timer3_Timer()
Dim data As String

        Dim buffer As String
        If MSComm1.InBufferCount > 0 Then
            tbnama.Text = ""
            tbproduksi.Text = ""
            tbkadaluarsa.Text = ""
            tbcode.Text = ""
   
      
        buffer = MSComm1.Input
        data = Mid$(buffer, 1, 14)

        tbcode.Text = data
             
        End If
End Sub

Private Sub Timer4_Timer()
  
Dim SQl As String
   
    Call dbConnect
   
    SQl = "Select * from Table1  where Kode = '" & tbcode.Text & "'"
   
    Dim Rs As Recordset
    Set Rs = New ADODB.Recordset
    Rs.Open SQl, Conn, adOpenDynamic, adLockOptimistic
   
   
    If Not Rs.EOF Then
        tbproduksi.Text = Rs!Produksi
        tbkadaluarsa.Text = Rs!Kadaluarsa
        tbnama.Text = Rs!Nama
    End If
   
End Sub




//=============== modul1 ======================

Public Conn As New ADODB.Connection
Public Rs As New ADODB.Recordset
Public SQl As String
Public i As Byte

Public Sub dbConnect()
Set Conn = New ADODB.Connection
Conn.ConnectionString = strConn
Conn.Open
End Sub

Public Function strConn() As String
Set Conn = New ADODB.Connection
Set Rs = New ADODB.Recordset
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\yanuar\Desktop\Projek Mei -juni 2017 & PID\barcode\interface\Database1.mdb;Persist Security Info=False"


End Function






f. VIDEO HASILNYA











Mengakses DHT22 Sensor Suhu - Kelembaban dan RTC DS1307 BASCOM AVR

Mengakses DHT22 Sensor Suhu - Kelembaban dan RTC DS1307 BASCOM AVR


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat dengan menggunakan sensor suhu dan kelembaban DHT22 kemudian dilengkapi dengan RTC DS1307 untuk menampilkan waktunya. program yang digunakan adalah Bascom AVR, mikrokontroller yang dipakai adalah ATMega16 dengan interface pada lcd 16x2. jadi alat ini hanya mendeteksi suhu dan kelembaban serta menampilkan waktunya secara real time, saat suhu tertentu maka relay 1 akan on begitu pula dengan kelembaban, saat kelembaban tertentu maka akan menghidupkan relay 2. untuk lebih jelasnya berikut adalah skema dan programnya. 




a. Minimum System ATMega





b. Sensor DHT22 Suhu dan Kelembaban





c. RTC DS1307





d. LCD 16x2






e. Program Bascom AVR DHT22 + RTC DS1307 + Relay

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

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


Declare Sub Get_th(t As Word , H As Word)

Config Serialin = Buffered , Size = 128
Config Serialout = Buffered , Size = 128

'czujnik podlaczony do PortD.6
Dht_put Alias Portd.6
Dht_get Alias Pind.6
Dht_io_set Alias Ddrd.6

Cls
Cursor Off

Dim Crc As Byte                                             'zmienna do przechowywania bajtów parzystosci
Dim Mybyte As Byte                                          'zmienna do obliczania bitu parzystosci
Dim Sensor_data As String * 40                              'tutaj beda zapisywac sie dane z czujnika
Dim Count As Byte
Dim T As Word                                               'zmienna do przechowywania temperatury
Dim H As Word                                               'zmienna do przechowywania wilgotnosci
Dim S16 As String * 16                                      'zmienna do obliczania odebranych bitów
Dim Ti As Byte                                              'zmienna do przechowywania dziesietnej temperatury
Dim Hi As Byte                                              'zmienna do przechowywania dziesietnej wilgotnosci


Enable Interrupts


Config Sda = Portc.1
Config Scl = Portc.0

Const Ds1307w = &HD0
Const Ds1307r = &HD1

Dim Oke As Integer
Dim Mark As Byte

Dim _sec As Byte
Dim _min As Byte
Dim _hour As Byte
Dim _day As Byte
Dim _month As Byte
Dim _year As Byte
Dim _weekday As Byte

Dim Sa(3) As String * 2
Dim Sb(3) As String * 2

Declare Sub Getdatetime
Declare Sub Settime
Declare Sub Getsec
Declare Sub Disptime
Declare Sub Dispdate
Declare Sub Format_00
Declare Sub Setdate
Declare Sub Subset

Dim I As Byte
Dim Flagset As Bit                                          '0 = Waktu, 1 = Tanggal
Dim Flagreset As Bit
Dim Line1 As String * 1

Dim Weekday As Byte
Dim Jam_puluhan As Integer
Dim Jam_satuan As Integer
Dim Min_puluhan As Integer
Dim Min_satuan As Integer
Dim Sec_puluhan As Integer
Dim Sec_satuan As Integer

'_sec = 00
'_hour = 14
'_min = 59
'Settime

'_day = 28
'_month = 11
'_year = 15
'Setdate

I = 13
Line1 = Chr(13)


Ddrb.0 = 1                                                  'kipas
Ddrb.1 = 1                                                  'air


Do

Getdatetime

Upperline
Disptime

   Dht_io_set = 1
   Dht_put = 1
   Wait 5
   Call Get_th(t , H)
   Cls
   Locate 2 , 1
   Lcd "T:" ; T ; "c"
   Locate 2 , 10
   Lcd "H:" ; H ; "%"


   If H <= 60 Then
   Portb.1 = 0
   Elseif H > 60 Then
   Portb.1 = 1
   End If


   If T >= 35 Then
   Portb.0 = 0
   Elseif T < 35 Then
   Portb.0 = 1
   End If


Loop



Sub Get_th(t As Word , H As Word)

 Count = 0
 Sensor_data = ""
 Dht_io_set = 1                                             'robimy wyjscie z PD.6
 Dht_put = 0                                                'ustawic magistrale w stan LOW
 Waitms 1                                                   'odczekac co najmniej 18ms

 Dht_put = 1                                                'zwolnic magistrale
 Waitus 20
 Dht_io_set = 0                                             'robimy wejscie z PD.6
 Waitus 40                                                  'odczekaj 40 ms
 If Dht_get = 1 Then                                        'jesli jest jeszcze jeden, ???? ?? ??? ?? ???????? 1
    H = 1                                                   'oznacza ze czujnik nie odpowiedzial
    Exit Sub                                                'konczymy podprogram
 End If

'jesli czujnik odpowiedzial i wyciagnal magistrale do ziemi kontynuujemy prace
  Waitus 80                                                 'czekamy jeszcze 80ms
  If Dht_get = 0 Then                                       'jesli na linii jest nadal 0
    H = 2                                                   'oznacza czujnik zwariowal
    Exit Sub                                                'konczymy podprogram
  End If

'jesli wszystko pójdzie dobrze i czujnik zareagowal prawidlowo, mozemy kontynuowac

  While Dht_get = 1 : Wend                                  'czekamy, az magistrala pokazuje 1

   Do                                                       'zaczynamy przyjmowac 40-bitowe dane
    While Dht_get = 0 : Wend                                'czekamy na ustawienie magistrali w stan 0
    Waitus 30                                               'po wystapieniu stamu 0 czekac 30 ms
     If Dht_get = 1 Then                                    'jesli na szynie 1
       Sensor_data = Sensor_data + "1"                      'zapisujemy do zmiennej ta ?????????? ? ?????????? ??? ???????
       While Dht_get = 1 : Wend                             'i czekamy az nadajnik wysle kolejny bit
       Else                                                 'w przeciwnym razie, jesli tam jest 0
       Sensor_data = Sensor_data + "0"                      'zapisujem je do zmiennej
    End If
    Incr Count                                              'zwiekszamy licznik
   Loop Until Count = 40                                    'Powtarzaj te czynnosc dopóki licznik osiagnie liczbe 40

   Dht_io_set = 1
   Dht_put = 1

'zaczynamy rozkladac otrzymane dane


   S16 = Left(sensor_data , 16)
   H = Binval(s16)
   H = H / 10
   Hi = H Mod 10

   S16 = Mid(sensor_data , 17 , 16)
   T = Binval(s16)
   T = T / 10
   Ti = T Mod 10

   S16 = Right(sensor_data , 8)
   Crc = Binval(s16)
   'test sumy kontrolnej

   Mybyte = T + H                                           'dodajemy wartosci temperatury i wilgotnosci
   If Mybyte <> Crc Then                                    'jesli suma kontrolna sie nie zgadza
      Lcd "error"                                           'Oznacza to, ze dane nie sa poprawne
   End If




End Sub



Sub Getdatetime:

I2cstart                                                    ' Generate start code
I2cwbyte Ds1307w                                            ' send address

I2cwbyte 0                                                  ' start address in 1307

I2cstart                                                    ' Generate start code
I2cwbyte Ds1307r                                            ' send address

I2crbyte _sec , Ack
I2crbyte _min , Ack                                         ' MINUTES
I2crbyte _hour , Ack                                        ' Hours
I2crbyte _weekday , Ack                                     ' Day of Week
I2crbyte _day , Ack                                         ' Day of Month
I2crbyte _month , Ack                                       ' Month of Year
I2crbyte _year , Nack                                       ' Year

I2cstop

_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
End Sub

Sub Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)

I2cstart                                                    ' Generate start code
I2cwbyte Ds1307w                                            ' send address
I2cwbyte 0                                                  ' starting address in 1307
I2cwbyte _sec                                               ' Send Data to SECONDS
I2cwbyte _min                                               ' MINUTES
I2cwbyte _hour                                              ' Hours
I2cstop

End Sub

Sub Setdate

_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)

I2cstart                                                    ' Generate start code
I2cwbyte Ds1307w                                            ' send address
I2cwbyte 4                                                  ' starting address in 1307
I2cwbyte _day                                               ' Send Data to SECONDS
I2cwbyte _month                                             ' MINUTES
I2cwbyte _year                                              ' Hours
I2cstop

End Sub
Sub Dispdate
Sa(1) = Str(_day)
Sa(2) = Str(_month)
Sa(3) = Str(_year)
Format_00
Lcd "Date: " ; Sb(1) ; "-" ; Sb(2) ; "-" ; Sb(3)
End Sub


Sub Disptime
Sa(1) = Str(_hour)
Sa(2) = Str(_min)
Sa(3) = Str(_sec)
Format_00
Lcd "Time: " ; Sb(1) ; ":" ; Sb(2) ; ":" ; Sb(3)
End Sub

Sub Format_00
For I = 1 To 3 Step 1
Sb(i) = Format(sa(i) , "00")
Next I
End Sub






f. VIDEO HASILNYA












ARDUINO Fuzzy Logic Controller Mamdani untuk Monitoring Asap / Gas dan Temperature (suhu)

ARDUINO Fuzzy Logic Controller Mamdani untuk Monitoring Asap / Gas dan Temperature (suhu)


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat untuk monitoring suhu dan asap / gas dengan menggunakan metode fuzzy logic control mamdani untuk bisa menghasilkan putaran pada Fan AC yang optimal, alat ini menggunakan dua buah sensor yaitu sensor suhu ds18b20 dan sensor gas / asap MQ-2 dengan outputnya untuk kendali kipas AC. jadi saat kondisi panas dan ada asap kipas akan berputar cepat, jika kondisi dingin dan tidak ada asap maka kipas akan berputar lambat atau OFF, begitu seterusnya tergantung pada Fuzzy Rule yang dibuat, untuk lebih jelasnya berikut adalah skema dan programnya.

Link Referensi:




a. Arduino Uno






b. Sensor Suhu DS18b20





c. Sensor Asap / Gas MQ-2





d. Kipas Motor AC





e. Lcd 16x2





f. Blok Diagram Fuzzy





g. Fuzzy Logic Control






- Rumus yang dipakai yaitu:






- Rumus COG :






h. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h> 
#define AC_LOAD 6   // connect pin 6 arduino to input terminal of driver motor
#include <OneWire.h>

#define on 1
#define off 0

LiquidCrystal_I2C lcd(0x27, 16, 2);

OneWire  ds(7);

const int AOUTpin1=0;
int adc0;
int suhu;
float h;
float T;
int output;
//int dimming = 128;  // Dimming level (0-128)  0 = ON, 128 = OFF
float dimming;

  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
 
 
float dingin, hangat, panas;
float sedikit, sedang, banyak;
float lb, sd, ke;
float hasillb, hasilsd, hasilke;
float Coglb, Cogsd, Cogke;
float Cogxlb, Cogxsd, Cogxke;
float Komlb, Komsd, Komke;
float Penlb, Pensd, Penke;
float Totalkom, Totalpen;
float Cog;
float lb1, lb2, lb3;
float sd1, sd2, sd3;
float ke1, ke2, ke3;
 
 

void setup()
{
  Serial.begin(9600);
  lcd.begin();
  pinMode(AC_LOAD, OUTPUT);  // Set AC Load pin as output (pin 6)
  attachInterrupt(0, zero_cross_int, FALLING);  // connect pin 2 arduino to output terminal of driver motor

}


void zero_cross_int()  //function to be fired at the zero crossing
{
  // Firing angle calculation : 1 full 50hz wave =1/50=20ms
  // Every zerocrossing thus: (50hz)-> 10ms (1/2 Cycle)
  // 10ms=10000us
  // (10000us - 10us) / 128 = 70 (Approx)

  if(output==on)
  {
  digitalWrite(AC_LOAD, LOW);  
  int dimtime = (70*dimming);   
  delayMicroseconds(dimtime);  // Wait till firing the driver motor      
  digitalWrite(AC_LOAD, HIGH);  // Fire the driver motor
  }
  else{digitalWrite(AC_LOAD, LOW);
  }  // Stop the driver motor
 
}



void loop()
{
  
  output=on;
 
   if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }
 

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
 
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
 
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
 
  celsius = (float)raw / 16.0;
  T = celsius;
  lcd.setCursor(0,0);
  lcd.print("T=");
  lcd.print(celsius,1);


   h = 1.953125 *(analogRead(AOUTpin1));
   lcd.setCursor (0,1);
   lcd.print ("Gas=");
   lcd.print (h,1);
   lcd.print ("   ");




   //======================
   //   fuzzyfikasi suhu
   //======================
  
   if(T <= 25){
   dingin = 1;
   hangat = 0;
   panas = 0;
   }
   else if(T >= 35){
   panas = 1;
   hangat = 0;
   dingin = 0;
   }
   else if(T == 30){
   hangat = 1;
   dingin = 0;
   panas = 0;
   }
   else if((T > 25)&&(T < 30)){
   hangat = (T - 25)/5;
   dingin = 1-(T - 25)/5;
   panas = 0;
   }
   else if((T > 30)&&(T < 35)){
   panas = (T - 30)/5;
   hangat = 1-(T - 30)/5;
   dingin = 0;
   }
  
  
 //  Serial.print("panas= ");  
 //  Serial.println(panas);
 //  Serial.print("hangat= ");  
 //  Serial.println(hangat);
 //  Serial.print("dingin= ");  
 //  Serial.println(dingin);
     
   //===============================
   //       fuzzyfikasi gas
   //===============================
  
   if(h <= 150){
   sedikit = 1;
   sedang = 0;
   banyak = 0;
   }
   else if(h >= 300){
   banyak = 1;
   sedang = 0;
   sedikit = 0;
   }
   else if(h == 200){
   banyak = 0;
   sedang = 1;
   sedikit = 0;
   }
   else if((h > 150)&&(h < 200)){
   sedang = (h - 150)/50;
   sedikit = 1-(h - 150)/50;
   banyak = 0;
   }
   else if((h > 200)&&(h < 300)){
   sedang = (h - 200)/100;
   banyak = 1-(h - 200)/100;
   sedikit = 0;
   }
  
 //  Serial.print("Sedikit= ");  
 //  Serial.println(sedikit);
 //  Serial.print("sedang= ");  
 //  Serial.println(sedang);
 //  Serial.print("banyak= ");  
 //  Serial.println(banyak);
   
  
  
  
   //==================================
   //           fuzzy rule
   //===================================
     
   //============================================================================
   if((T <= 25 )&&(h <= 150)){ //1A
    if(dingin < sedikit){
    lb = dingin;
    }
    else if(dingin > sedikit){
    lb = sedikit;
    }
    else if(dingin == sedikit){
    lb = sedikit;
    }
   
    hasillb = lb;
    hasilsd = 0;
    hasilke = 0;
    
   }
  
   //=========================================================================
  
   else if((T <= 25 )&&(h > 150)&&(h < 200)){ //1AB
    if(dingin < sedikit){
    lb1 = dingin;
    }
    else if(dingin > sedikit){
    lb1 = sedikit;
    }
    else if(dingin == sedikit){
    lb1 = sedikit;
    }
   
    if(dingin < sedang){
    lb2 = dingin;
    }
    else if(dingin > sedang){
    lb2 = sedang;
    }
    else if(dingin == sedang){
    lb2 = sedang ;
    }
   
    if(lb1 < lb2){   
     hasillb = lb2;  
    }
    else if(lb1 > lb2){   
     hasillb = lb1;  
    }
    else if(lb1 == lb2){   
     hasillb = lb1;  
    }
   
    hasilsd = 0;
    hasilke = 0;
    
   }
  
   //========================================================================
    else if((T <= 25 )&&(h > 200)&&(h < 300)){ //1BC
    if(dingin < sedang){
    lb = dingin;
    }
    else if(dingin > sedang){
    lb = sedang;
    }
    else if(dingin == sedang){
    lb = sedang;
    }
   
    if(dingin < banyak){
    sd = dingin;
    }
    else if(dingin > banyak){
    sd = banyak;
    }
    else if(dingin == banyak){
    sd = banyak;
    }
   
    hasillb = lb;  
    hasilsd = sd;
    hasilke = 0;
    
   }
  
   //=======================================================================
    else if((T <= 25 )&&(h >= 300)){ //1C

    if(dingin < banyak){
    sd = dingin;
    }
    else if(dingin > banyak){
    sd = banyak;
    }
    else if(dingin == banyak){
    sd = banyak;
    }
   
    hasillb = 0;  
    hasilsd = sd;
    hasilke = 0;
    
   }
  
  
   //==========================================================================
  
    else if((T > 25 )&&(T < 30 )&&(h <= 150)){ //12A

    if(dingin < sedikit){
    lb1 = dingin;
    }
    else if(dingin > sedikit){
    lb1 = sedikit;
    }
    else if(dingin == sedikit){
    lb1 = sedikit;
    }
   
   
    if(hangat > sedikit){
    lb2 = sedikit;
    }
    else if(hangat < sedikit){
    lb2 = hangat;
    }
    else if(hangat == sedikit){
    lb2 = hangat;
    }
   
   
    if(lb1 < lb2){   
     hasillb = lb2;  
    }
    else if(lb1 > lb2){   
     hasillb = lb1;  
    }
    else if(lb1 == lb2){   
     hasillb = lb1;  
    }
   
    hasilsd = 0;
    hasilke = 0;
    
   }
  
   //=========================================================================
  
    else if((T > 25 )&&(T < 30 )&&(h > 150)&&(h < 200)){ //12AB

    if(dingin < sedikit){
    lb1 = dingin;
    }
    else if(dingin > sedikit){
    lb1 = sedikit;
    }
    else if(dingin == sedikit){
    lb1 = sedikit;
    }
   
   
    if(dingin < sedang){
    lb2 = dingin;
    }
    else if(dingin > sedang){
    lb2 = sedang;
    }
    else if(dingin == sedang){
    lb2 = sedang;
    }
   
   
    if(hangat < sedikit){
    lb3 = dingin;
    }
    else if(hangat > sedikit){
    lb3 = sedikit;
    }
    else if(hangat == sedikit){
    lb3 = sedikit;
    }
   
   
    if(hangat < sedang){
    sd = hangat;
    }
    else if(hangat > sedang){
    sd = sedang;
    }
    else if(hangat == sedang){
    sd = sedang;
    }
   
   
   if((lb1 > lb2)&&(lb1 > lb3)){                         
   hasillb = lb1;
   }
   else if((lb1 > lb2)&&(lb1 == lb3)){
   hasillb = lb1;
   }
   else if((lb1 == lb2)&&(lb1 > lb3)){
   hasillb = lb1;
   }
   else if((lb1 == lb2)&&(lb1 == lb3)){
   hasillb = lb1;
   }
   else if((lb2 > lb1)&&(lb2 > lb3)){
   hasillb = lb2;
   }
   else if((lb2 > lb1)&&(lb2 == lb3)){
   hasillb = lb2;
   }
   else if((lb2 == lb1)&&(lb2 > lb3)){
   hasillb = lb2;
   }
   else if((lb2 == lb1)&&(lb2 == lb3)){
   hasillb = lb2;
   }
   else if((lb3 > lb1)&&(lb3 > lb2)){
   hasillb = lb3;
   }
   else if((lb3 > lb1)&&(lb3 == lb2)){
   hasillb = lb3;
   }
   else if((lb3 == lb1)&&(lb3 > lb2)){
   hasillb = lb3;
   }
   else if((lb3 == lb1)&&(lb3 == lb2)){
   hasillb = lb3;
   }

   hasilsd = sd;
   hasilke = 0;
   
   }
  
   //===============================================================================
  
   else if((T > 25)&&(T < 30)&&(h > 200)&&(h < 300)){ //12BC
   if (dingin < sedang){
   lb = dingin;
   }
   else if(dingin > sedang){
   lb = sedang;
   }
   else if(dingin == sedang){
   lb = sedang;
   }

   if(dingin < banyak){
   sd1 = dingin;
   }
   else if(dingin > banyak){
   sd1 = banyak;
   }
   else if(dingin == banyak){
   sd1 = banyak;
   }

   if(hangat < sedang){
   sd2 = hangat;
   }
   else if(hangat > sedang){
   sd2 = sedang;
   }
   else if(hangat == sedang){
   sd2 = sedang;
   }

   if(hangat < banyak){
   ke = hangat;
   }
   else if(hangat > banyak){
   ke = banyak;
   }
   else if(hangat == banyak){
   ke = banyak;
   }

   if(sd1 > sd2){
   hasilsd = sd1;
   }
   else if(sd2 > sd1){
   hasilsd = sd2;
   }
   else if(sd2 == sd1){
   hasilsd = sd2;
   }

   hasillb = lb;
   hasilke = ke;

   }

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

   else if((T > 25)&&(T < 30)&&(h >= 300)){ //12C
    
   if(dingin < banyak){
   sd = dingin;
   }
   else if(dingin > banyak){
   sd = banyak;
   }
   else if(dingin == banyak){
   sd = banyak;
   }

   if(hangat > banyak){
   ke = banyak;
   }
   else if(hangat < banyak){
   ke = hangat;
   }
   else if(hangat == banyak){
   ke = hangat;
   }
  
   hasilsd = sd;
   hasilke = ke;
   hasillb = 0;
   }

   //===============================================================
   else if ((T == 30) && (h <= 150)){ //2A
   if (hangat > sedikit){    
   lb = sedikit;
   }
   else if (hangat < sedikit){
   lb = hangat;
   }
   else if (hangat == sedikit){
   lb = hangat;
   }

   hasillb = lb;
   hasilsd = 0;
   hasilke = 0;
   }
  
   //============================================================
   else if ((T == 30) && (h > 150) && (h < 200)){ //2AB
   if (hangat < sedikit){
   lb = hangat;
   }
   else if (hangat > sedikit){
   lb = sedikit;
   }
   else if (hangat == sedikit){
   lb = sedikit;
   }
  

   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedikit){
   sd = sedikit;
   }
   else if (hangat == sedikit){
   sd = sedikit;
   }

   hasillb = lb;
   hasilsd = sd;
   hasilke = 0;
  
   }

//===================================================================
   else if ((T == 30) && (h > 200) && (h < 300)){ //2BC
   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   if (hangat < banyak){
   ke = hangat;
   }
   else if (hangat > banyak){
   ke = banyak;
   }
   else if (hangat == banyak){
   ke = banyak;
   }

   hasilsd = sd;
   hasilke = ke;
   hasillb = 0;
  
   }

 //=============================================================
   else if ((T == 30) && (h >= 300)){  //2C
   if (hangat < banyak){
   ke = hangat;
   }
   else if (hangat > banyak){
   ke = banyak;
   }
   else if (hangat == banyak){
   ke = banyak;
   }

   hasilke = ke;
   hasilsd = 0;
   hasillb = 0;

}


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

   else if ((T > 30) && (T < 35) && (h <= 150)){ //23A
   if (hangat < sedikit){
   lb = hangat;
   }
   else if (hangat > sedikit){
   lb = sedikit;
   }
   else if (hangat == sedikit){
   lb = sedikit;
   }
  
   if (panas < sedikit){
   sd = panas;
   }
   else if (panas > sedikit){
   sd = sedikit;
   }
   else if (panas == sedikit){
   sd = sedikit;
   }

   hasillb = lb;
   hasilsd = sd;
   hasilke = 0;
   }

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

   else if ((T > 30) && (T < 35) && (h > 150) && (h < 200)){  //23AB
   if (hangat < sedikit){
   lb = hangat;
   }
   else if (hangat > sedikit){
   lb = sedikit;
   }
   else if (hangat == sedikit){
   lb = sedikit;
   }

   if (hangat < sedang){
   sd1 = hangat;
   }
   else if (hangat > sedang){
   sd1 = sedang;
   }
   else if (hangat == sedang){
   sd1 = sedang;
   }
  
   if (panas < sedikit){
   sd2 = panas;
   }
   else if (panas > sedikit){
   sd2 = sedikit;
   }
   else if (panas == sedikit){
   sd2 = sedikit;
   }

   if (panas < sedang){
   ke = panas;
   }
   else if (panas > sedang){
   ke = sedang;
   }
   else if (panas == sedang){
   ke = sedang;
   }

   if (sd1 < sd2){
   hasilsd = sd2;
   }
   else if (sd1 > sd2){
   hasilsd = sd1;
   }
   else if (sd1 == sd2){
   hasilsd = sd1;
   }

   hasilke = ke;
   hasillb = lb;
   }

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

   else if ((T > 30) && (T < 35) && (h > 200) && (h < 300)){ //23BC
   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   if (hangat < banyak){
   ke1 = hangat;
   }
   else if (hangat > banyak){
   ke1 = banyak;
   }
   else if (hangat == banyak){
   ke1 = banyak;
   }

   if (panas < sedang){
   ke2 = panas;
   }
   else if (panas > sedang){
   ke2 = sedang;
   }
   else if (panas == sedang){
   ke2 = sedang;
   }

   if (panas < banyak){
   ke3 = panas;
   }
   else if (panas > banyak){
   ke3 = banyak;
   }
   else if (panas == banyak){
   ke3 = banyak;
   }
  
   if ((ke1 > ke2) && (ke1 > ke3)){
   hasilke = ke1;
   }
   else if ((ke1 > ke2) && (ke1 == ke3)){
   hasilke = ke1;
   }
   else if ((ke1 == ke2) && (ke1 > ke3)){
   hasilke = ke1;
   }
   else if ((ke1 == ke2) && (ke1 == ke3)){
   hasilke = ke1;
   }
   else if ((ke2 > ke1) && (ke2 > ke3)){
   hasilke = ke2;
   }
   else if ((ke2 > ke1) && (ke2 == ke3)){
   hasilke = ke2;
   }
   else if ((ke2 == ke1) && (ke2 > ke3)){
   hasilke = ke2;
   }
   else if ((ke2 == ke1) && (ke2 == ke3)){
   hasilke = ke2;
   }

   else if ((ke3 > ke1) && (ke3 > ke2)){
   hasilke = ke3;
   }
   else if ((ke3 > ke1) && (ke3 == ke2)){
   hasilke = ke3;
   }
   else if ((ke3 == ke1) && (ke3 > ke2)){
   hasilke = ke3;
   }
   else if ((ke3 == ke1) && (ke3 == ke2)){
   hasilke = ke3;
   }

   hasilsd = sd;
   hasillb = 0;
   }

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

   else if ((T > 30) && (T < 35) && (h >= 300)){ //23C
   if (hangat < banyak){
   ke1 = hangat;
   }
   else if (hangat > banyak){
   ke1 = banyak;
   }
   else if (hangat == banyak){
   ke1 = banyak;
   }

   if (panas < banyak){
   ke2 = panas;
   }
   else if (panas > banyak){
   ke2 = banyak;
   }
   else if (panas == banyak){
   ke2 = banyak;
   }

   if (ke1 < ke2){
   hasilke = ke2;
   }
   else if (ke1 > ke2){
   hasilke = ke1;
   }
   else if (ke1 == ke2){
   hasilke = ke1;
   }

   hasilsd = 0;
   hasillb = 0;
   }

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

  else if ((T >= 35) && (h <= 150)){  //3A
   if (panas < sedikit){
   sd = panas;
   }
   else if (panas > sedikit){
   sd = sedikit;
   }
   else if (panas == sedikit){
   sd = sedikit;
   }

   hasilsd = sd;
   hasillb = 0;
   hasilke = 0;
   }

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

else if ((T >= 35) && (h > 150) && (h < 200)){  //3AB
   if (panas < sedikit){
   sd = panas;
   }
   else if (panas > sedikit){
   sd = sedikit;
   }
   else if (panas == sedikit){
   sd = sedikit;
   }

   if (panas < sedang){
   ke = panas;
   }
   else if (panas > sedang){
   ke = sedang;
   }
   else if (panas == sedang){
   ke = sedang;
   }

   hasilsd = sd;
   hasilke = ke;
   hasillb = 0;
   }
  
  
//======================================================================  
  
else if ((T >= 35) && (h > 200) && (h < 300)){ //3BC
   if (panas < sedang){
   ke1 = panas;
   }
   else if (panas > sedang){
   ke1 = sedang;
   }
   else if (panas == sedang){
   ke1 = sedang;
   }

   if (panas < banyak){
   ke2 = panas;
   }
   else if (panas > banyak){
   ke2 = banyak;
   }
   else if (panas == banyak){
   ke2 = banyak;
   }

   if (ke1 < ke2){
   hasilke = ke2;
   }
   else if (ke1 > ke2){
   hasilke = ke1;
   }
   else if (ke1 == ke2){
   hasilke = ke1;
   }

   hasillb = 0;
   hasilsd = 0;
   }

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

else if ((T >= 35) && (h >= 300)){ //3C
   if (panas < banyak){
   ke = panas;
   }
   else if (panas > banyak){
   ke = banyak;
   }
   else if (panas == banyak){
   ke = banyak;
   }

   hasilke = ke;
   hasilsd = 0;
   hasillb = 0;
}


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

else if ((T <= 25) && (h == 200)){ //1B
   if (dingin < sedang){
   lb = dingin;
   }
   else if (dingin > sedang){
   lb = sedang;
   }
   else if (dingin == sedang){
   lb = sedang;
   }

   hasillb = lb;
   hasilsd = 0;
   hasilke = 0;
}

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

else if ((T > 25) && (T < 30) && (h == 200)){ //12B
   if (dingin < sedang){
   lb = dingin;
   }
   else if (dingin > sedang){
   lb = sedang;
   }
   else if (dingin == sedang){
   lb = sedang;
   }

   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   hasillb = lb;
   hasilsd = sd;
   hasilke = 0;
}

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

else if ((T == 30) && (h == 200)){ //2B
   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   hasilsd = sd;
   hasillb = 0;
   hasilke = 0;
  
}


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

else if ((T > 30) && (T < 35) && (h == 200)){ //23B
   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   if (panas < sedang){
   ke = panas;
   }
   else if (panas > sedang){
   ke = sedang;
   }
   else if (panas == sedang){
   ke = sedang;
   }
  
   hasilsd = sd;
   hasilke = ke;
   hasillb = 0;
}



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

else if ((T >= 35) && (h == 200)){  //3B
   if (panas < sedang){
   ke = panas;
   }
   else if (panas > sedang){
   ke = sedang;
   }
   else if (panas == sedang){
   ke = sedang;
   }

   hasilke = ke;
   hasilsd = 0;
   hasillb = 0;

}



//==================================================
//               Defuzzifikasi
//==================================================


//0-10-20-30
Coglb = 60;
Cogxlb = 4;

//40-50-60-70
Cogsd = 220;
Cogxsd = 4;

//80-90-100-110-120
Cogke = 500;
Cogxke = 5;

/*
//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;

Totalkom = (Coglb * hasillb) + (Cogsd * hasilsd) + (Cogke * hasilke);

Totalpen = (hasillb * Cogxlb) + (hasilsd * Cogxsd) + (hasilke * Cogxke);

Cog = Totalkom / Totalpen;
  
   dimming = 128 - Cog;
  
   //Serial.print("Totalkom= ");
   //Serial.println(Totalkom);
   //Serial.print("Totalpen= ");
   //Serial.println(Totalpen);
   //Serial.print("COG= ");
   //Serial.println(Cog);
  
   lcd.setCursor (9,0);
   lcd.print ("D=");
   lcd.print (dimming,1);
   lcd.print ("  ");
  
   lcd.setCursor (10,1);
   lcd.print ("C=");
   lcd.print (Cog,1);
   lcd.print ("  ");
  
  
   delay(100);

}






i. Video Hasilnya