Translate

Kursus Robotika dan Mikrokontroller untuk SD - SMP - SMA

Kursus Robotika dan Mikrokontroller untuk SD - SMP - SMA


Pada kesempatan kali ini kami resmi mengumumkan untuk kursus atau pelatihan robotik dan mikrokontroller untuk level SD, SMP dan SMA, adapun sistem pelatihan yang kami lakukan yaitu dengan praktek dan teori jadi siswa akan kami ajarkan secara praktek bagaimana cara membuat sebuah alat instrumentsi yang berguna dan bagaimana cara membuat sebuah robot yang bisa membantu manusia atau untuk sekedar lomba. Untuk tiap level akan berbeda materi pelatihan dan metode mengajarnya, untuk lebih detailnya berikut kami jelaskan sistemnya.

                                  
Sistem Pelatihan:
1. Trainer mengajar di sekolah / di lab komputer
2. Waktu pelatihan setelah jam sekolah
3. Bisa sebagai mapel ekstrakulikuler
4. Jumlah pertemuan per bulan 8 kali
5. Waktu pelatihan maksimal 2.5 jam


Biaya:
1. Biaya untuk trainer / pelatih per bulan Rp. 2.000.000,-  


Biaya Kelengkapan Pelatihan:
1. Modul pelatihan per anak Rp. 300.000,- (Beli komponen)
2. Buku pelatihan per anak Rp. 50.000,- (hard copy)
3. Biaya kelengkapan ini hanya sekali saja bayar diawal  













Jasa Program ARDUINO dan Mikrokontroller AVR untuk UMUM

Jasa Program ARDUINO dan Mikrokontroller AVR untuk UMUM


        Akhirnya pada kesempatan kali kami mengumumkan bahwa jasa program Arduino dan AVR resmi dibuka, kami menyediakan beberapa pilihan program yaitu ARDUINO, CodeVision AVR dan Bascom AVR, kemudian program interface yang bisa kami buat yaitu Visual Basic 6 dan Delphi 7. biaya yang kami tawarkan bervariaasi tergantung tingkat kesulitan program dan mekanisme hardware yang dipakai, kami bisa menyelesaikan program paling cepat 1 hari dan itu program yang kami anggap mudah atau sudah pernah kami buat sebelumnya, untuk program yang sulit atau yang belum pernah kami buat estimasi waktu 3 hari - 2 minggu. demikian informasi yang bisa kami berikan untuk lebih jelasnya silahkan Whatsup di nomer 085726496643 (Yanuar M).


Program Mikrokontroller:
1. Arduino IDE
2. CodeVision AVR
3. Bascom AVR


Program Interface Komputer:
1. Visual Basic 6
2. Visual Studio 2010
3. Delphi 7


Program Interface Web:
1. HTML
2. PHP
3. MySQL
4.Java Script






Membuat Alat Monitoring Arus LAMPU AC via Internet (IOT) menggunakan ARDUINO ethernet webserver

Membuat Alat Monitoring Arus LAMPU AC via Internet (IOT) menggunakan ARDUINO ethernet webserver


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang berfungsi untuk monitoring arus pada sebuah lampu AC berdaya masing-masing 100 watt, lampu ini berjumlah 4 buah dan terdapat saklar untuk menghidupkan atau mematikan lampu secara manual, arus yang terbaca oleh sensor arus ACS712 akan dikirimkan via internet dan akan ditampilkan pada interface server. alat ini menggunakan Arduino sebagai kontrollernya dan ethernet shield untuk media penghubung TCP-IP nya. kemudian router dan modem untuk pengiriman ke website. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Mega + Ethernet Shield





b. Router + Modem





c. Sensor Arus ACS712





d. Lampu Bohlam 100 watt







e. Program Arduino IDE

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

// Arrays to save our results in
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);


String txData2="";

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  char server[] = "www.viskositasoli.hol.es";
IPAddress ip(192,168,0,99);

EthernetClient client;

float arus1x;
float arus2x;
float arus3x;
float arus4x;

int arus1;
int arus2;
int arus3;
int arus4;



void setup() {
 
  // 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

  Serial.begin(9600);
  while (!Serial) {
    ;
  }

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }

    delay(1000);
    Serial.println("connecting...");
    kirim ();
  
  }

void loop()
{
  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(A0);             
 
  if (values[i] >= z) {
  z = values[i]; 
  }
    stop_times[i] = micros();
  }

  arus1x = z * (5.0/1023.0);
  arus1x = (arus1x - 2.438)/ 0.251;
  arus1 = arus1x * 100;
 
  z = 0;
  i = 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();
  }

  arus2x = z * (5.0/1023.0);
  arus2x = (arus2x - 2.438)/ 0.251;
  arus2 = arus2x * 100;
 
  z = 0;
  i = 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();
  }

  arus3x = z * (5.0/1023.0);
  arus3x = (arus3x - 2.438)/ 0.251;
  arus3 = arus3x * 100;

  z = 0;
  i = 0;

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

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

  arus4x = z * (5.0/1023.0);
  arus4x = (arus4x - 2.438)/ 0.251;
  arus4 = arus4x * 100;

  z = 0;
  i = 0;
 
  kirim ();
}


void kirim (){

  EthernetClient client;

if (client.connect(server, 80)){
    txData2 = "arus1="+ (String (arus1)) + "&arus2="+ (String (arus2)) + "&arus3="+ (String (arus3)) + "&arus4="+ (String (arus4));           
    Serial.println("connected");
    Serial.print(txData2);
    client.println("POST /update2.php HTTP/1.1");
    client.println("Host: www.viskositasoli.hol.es");
    client.println("Connection: close");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(txData2.length());
    client.print("\n\n");
    client.print(txData2);
    Serial.println(txData2);    
    delay (5000);
        
  }  
  else{
    Serial.println("Connection Failed.");
    Serial.println();
    delay (3000);
  }
}





f. Config.php

<?php

$dbhost = 'mysql.idhostinger.com';
$dbuser = 'u1417xxx_local';
$dbpass = '12345';  
$dbname = 'u1417xxx_arus';

$conn = @mysql_connect($dbhost,$dbuser,$dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);
if(!$conn){
        echo "database gak konek";
    }else{

    }
?>



g. update2.php

<?php
require("config.php");

$query = "UPDATE dbarus SET arus1='$_POST[arus1]', arus2='$_POST[arus2]', arus3='$_POST[arus3]', arus4='$_POST[arus4]' WHERE no=1";

if(!@mysql_query($query))
{
    echo "&Answer; SQL Error - ".mysql_error();
    return;
}
?>




h. index.php

 <html>
<head>
<meta http-equiv="refresh" content="3">
<style>
.bordered { border-style:solid; }
</style>
<link rel="stylesheet" type="text/css" href="latweb.css" />
<title >MONITORING ARUS</title>
</head>
<body>

<CENTER>
<p><h2> MONITORING ARUS</h2></p>


</CENTER>

<CENTER>
<p><h3>

ARUS 1 =
<?php
include "confignew.php";
$tampil = @mysql_query("SELECT * FROM dbarus WHERE no IN (SELECT MAX(no) FROM dbarus)");
        
    while ($r=mysql_fetch_array($tampil)){
       echo $r[arus1]/100;
             
   }
?>
&nbsp Amper <br>


ARUS 2 =
<?php
include "confignew.php";
$tampil = @mysql_query("SELECT * FROM dbarus WHERE no IN (SELECT MAX(no) FROM dbarus)");
        
    while ($r=mysql_fetch_array($tampil)){
       echo $r[arus2]/100;
             
   }
?>
&nbsp Amper <br>


ARUS 3 =
<?php
include "confignew.php";
$tampil = @mysql_query("SELECT * FROM dbarus WHERE no IN (SELECT MAX(no) FROM dbarus)");
        
    while ($r=mysql_fetch_array($tampil)){
       echo $r[arus3]/100;
             
   }
?>
&nbsp Amper <br>


ARUS 4 =
<?php
include "confignew.php";
$tampil = @mysql_query("SELECT * FROM dbarus WHERE no IN (SELECT MAX(no) FROM dbarus)");
        
    while ($r=mysql_fetch_array($tampil)){
       echo $r[arus4]/100;
             
   }
?>
&nbsp Amper <br>


<BR><BR>

<?php
include "confignew.php";
$tampil = @mysql_query("SELECT * FROM dbarus WHERE no IN (SELECT MAX(no) FROM dbarus)");
        
    while ($r=mysql_fetch_array($tampil)){
             
       if ($r[arus1] > 65) {
         echo "LAMPU 1 ON";
       }
     
       if ($r[arus1] < 65) {
         echo "LAMPU 1 OFF";
       }
      
   }
?>
<br>


<?php
include "confignew.php";
$tampil = @mysql_query("SELECT * FROM dbarus WHERE no IN (SELECT MAX(no) FROM dbarus)");
        
    while ($r=mysql_fetch_array($tampil)){
             
       if ($r[arus2] > 65) {
         echo "LAMPU 2 ON";
       }
     
       if ($r[arus2] < 65) {
         echo "LAMPU 2 OFF";
       }
      
   }
?>
<br>



<?php
include "confignew.php";
$tampil = @mysql_query("SELECT * FROM dbarus WHERE no IN (SELECT MAX(no) FROM dbarus)");
        
    while ($r=mysql_fetch_array($tampil)){
             
       if ($r[arus3] > 65) {
         echo "LAMPU 3 ON";
       }
     
       if ($r[arus3] < 65) {
         echo "LAMPU 3 OFF";
       }
      
   }
?>
<br>



<?php
include "confignew.php";
$tampil = @mysql_query("SELECT * FROM dbarus WHERE no IN (SELECT MAX(no) FROM dbarus)");
        
    while ($r=mysql_fetch_array($tampil)){
             
       if ($r[arus4] > 65) {
         echo "LAMPU 4 ON";
       }
     
       if ($r[arus4] < 65) {
         echo "LAMPU 4 OFF";
       }
      
   }
?>
<br>

</CENTER>
</body>
</html>





i. Gambar Interface Server







j. VIDEO HASILNYA









Membuat Alat Monitor Bpm, Jarak dan Tekanan Udara Menggunakan HP Android ( CV AVR )

Membuat Alat Monitor Bpm, Jarak dan Tekanan Udara Menggunakan HP Android ( CV AVR )


          Pada kesempatan kali ini saya akan membahas mengenai bagaimana cara membuat sebuah alat yang menggunakan mikrokontroller ATMega16 kemudian bahasa yang dipakai adalah C atau CV AVR, alat ini digunakan untuk monitoring BPM atau detak jantung kemudian jarak dan tekanan udara, sensor yang dipakai yaitu pulse sensor, sensor jarak SRF04 dan sensor MPX5700. data dari sensor tersebut dikirimkan ke HP android secara bersamaan lalu ditampilkan pada aplikasi android terkait 3 data sensor yang dikirimkan oleh mikrokontroller. media pengiriman menggunakan bluetooth HC05 untuk lebih jelasnya berikut adalah skema dan programnya.




a. Minimum System ATMega16





b. Sensor Jarak HC-SRF04





c. Sensor Tekanan MPX5700





d. Sensor BPM / Pulse Sensor





e. Bluetooth HC-05





f. Program Android









g. Program CV AVR

#include <mega16.h>
#include <stdio.h>
#include <delay.h>
#include <stdlib.h>
// Alphanumeric LCD Module functions
#include <alcd.h>

// Standard Input/Output functions
#include <stdio.h>

#define ADC_VREF_TYPE 0x40
#define ADC_VREF_TYPE 0x40
#define trigger1    PORTB.0
#define echo1       PINB.1
#define OUT         1
#define IN          0

int cacah;
int jarak;
int kpa;
int ok;
int mark;
int mark1;
int mark2;
int mark3;
int adcbpm;
char temp1[10];
char temp2[10];
char temp3[10];
char temp4[10];
int bpmxx;
char temp[10];
int bpmx;
float adcmpx, x, Vout, Tekanan_kpa;
char lcd[16];
unsigned int count1;
unsigned long sens1, waktu1;
unsigned char baris1[16];

// 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
void bpm(){

          count1 = 0;
          trigger1 = 0;
          delay_us(10);
          trigger1 = 1;
          delay_us(20);
          trigger1 = 0;
                 
          while(echo1 == 0) {};
          while(echo1 == 1)
          {
            count1++;
          }       
         
          waktu1=(count1*0.090422453703703703703703703703704);
          sens1=((waktu1*0.3495)/2);
          
          if((sens1 <= 10)&&(mark3 == 0)){
            jarak++;
            mark3 = 1;
          }
         
         if((sens1 > 10)&&(mark3 == 1)){
            mark3 = 0;
          }

          lcd_gotoxy(0,1);
          sprintf(baris1,"J= %3d",sens1);
          lcd_puts(baris1);
         
          itoa(jarak,temp4);
          lcd_gotoxy(14,1);
          lcd_puts(temp4);
         

         adcmpx = read_adc(0);
         Vout = (float)(adcmpx*5.0)/1023.0;
         Tekanan_kpa = (float)((Vout/5)-0.04)/0.0012858;
        
         if((Tekanan_kpa >= 109)&&(mark2 == 0)){
            kpa++;
            mark2 = 1;
          }
         
         if((Tekanan_kpa < 109)&&(mark2 == 1)){
            mark2 = 0;
          }
         
         ftoa(Tekanan_kpa,1,temp);
        
          lcd_gotoxy(0,0);
          lcd_putsf("kpa= ");
          lcd_puts(temp);

          itoa(kpa,temp3);
          lcd_gotoxy(13,0);
          lcd_puts(temp3);
   
         
          adcbpm = read_adc(1);
          delay_ms(200);    
         
          if((adcbpm >= 400)&&(mark == 0)){
            bpmx++;
            mark = 1;
          }
         
          if((adcbpm < 400)&&(mark == 1)){
            mark = 0;
          }
                          
          itoa(bpmx,temp1);
          lcd_gotoxy(11,0);
          lcd_puts(temp1);
         
          cacah++;
         
          if(cacah < 25 ){
          bpm();
          }
         
          if(cacah > 25 ){
          bpmxx = bpmx * 12;
          itoa(bpmxx,temp2);
          lcd_gotoxy(7,1);
          lcd_putsf("B=");
          lcd_puts(temp2);    
         
                   
          putchar('A|');
          printf("%i",bpmxx);
          putchar('|');
          printf("%i",kpa);
          putchar('|');
          printf("%i",jarak);
        
        
        
          bpmx = 0;
          ok = 0;
          cacah = 0;
          jarak = 0;
          kpa = 0;

         
          }
         
}



void main(void)
{
// Declare your local variables here

// 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=Out
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=0
PORTB=0x00;
DDRB=0x01;

// 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=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
PORTD=0x00;
DDRD=0x00;

// 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: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// 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=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
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
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

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

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x1F;

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

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

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

while (1)
      {
      // Place your code here
      
        delay_ms(3000);
        lcd_clear();
        bpm();          
   
      }
}





h. VIDEO HASILNYA













Membuat Alat Deteksi Motion / Gerak dan Kecepatan Gerakan / Percepatan Menggunakan Sensor HB100 dan ARDUINO

Membuat Alat Deteksi Motion / Gerak dan Kecepatan Gerakan / Percepatan Sensor HB100 dan ARDUINO


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mendeteksi gerakan atau ada benda bergerak baik itu manusia atau bukan dan juga bisa mendeteksi perceatan dari gerakan tersebut, sensor yang dipakai adalah HB100, sensor ini mengeluarkan sinyal dengan frekuensi tertentu kemudian jika terdeteksi adanya pergerakan baik itu benda didepannya atau sensor HB100 sedang bergerak maka akan mengeluarkan frekuensi yang menyatakan kecepatan gerakan benda atau sensor tersebut, sensor ini menggunakan efek doppler Shift sebagai outputnya, 
      Terminal IF saat gerakan terdeteksi besarnya Shift Doppler sebanding dengan pantulan energi yang ditransmisikan dan berada dalam kisaran mikrovolt (μV). Amplifier penguat frekuensi rendah biasanya dihubungkan ke terminal IF untuk memperkuat pergeseran Doppler ke tingkat yang dapat diproses. Frekuensi pergeseran Doppler sebanding dengan kecepatan gerak. manusia tipikal berjalan menghasilkan pergeseran Doppler di bawah 100 Hz. untuk lebih jelasnya berikut adalah skema dan programnya.

Link Referensi:


 
a. Arduino Mega





b. Sensor Gerakan HB100 







c. Rangkaian Amplifier








d. Program Arduino IDE

 // Frequency input pin: 8 for ARDUINO UNO. Connect the IF pin from the preamp
 // Frequency input pin: 49 for ARDUINO MEGA. Connect the IF pin from the preamp

#include <FreqMeasure.h>

void setup() {
  Serial.begin(57600);
  FreqMeasure.begin();
}

double sum=0;
int count=0;

void loop() {
  if (FreqMeasure.available()) {
    // average 30 readings together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 30) {
      float frequency = FreqMeasure.countToFrequency(sum / count);
      float spd = frequency / 19.49; //conversion from frequency to kilometers per hour 
      //to improve speed, we update only the bottom row of the LCD
      Serial.print("F= ");
      Serial.print(frequency);
      Serial.print("Hz ");
      Serial.print("SPD= ");
      Serial.print(spd);
      Serial.println("km/h");
      sum = 0;
      count = 0;
    }
  }
}




e. VIDEO HASILNYA





 





Membuat Alat Monitor Flow Air dan Suhu (Temperature) DS18B20 Menggunakan Android dan ARDUINO

Membuat Alat Monitor Flow Air dan Suhu (Temperature) DS18B20 Menggunakan Android dan ARDUINO


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat untuk monitoring flow air atau kecepatan air menggunakan flow sensor dan suhu menggunakan sensor DS18B20, alat ini akan mengirimkan 3 buah data ke HP Android kemudian akan menampilkannya di layar HP Android, data yang dikirimkan oleh Arduino ke Android adalah data Suhu / temperature, data sensor flow atau kecepatan aliran kemudian sudut servo sehingga pada tamplan akan tampil 3 buah data tersebut. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino UNO





b. Sensor Flow 





c. Sensor Suhu DS18B20






d. Motor Servo






e. Bluetooth HC-05






f. Program Arduino IDE

#include <OneWire.h>
#include <Servo.h>

OneWire  ds(10);  // on pin 10 (a 4.7K resistor is necessary)

byte sensorInterrupt = 0;  // 0 = digital pin 2
byte sensorPin       = 2;

float calibrationFactor = 4.5;

int buzzer = 3;
int suhu;
int derajat;

volatile byte pulseCount;

unsigned int frac;
float flowRate;
unsigned int flowMilliLitres;
float totalMilliLitres;

unsigned long oldTime;

Servo myservo; 

void setup(void) {
  myservo.attach(9);
  Serial.begin(9600);
  pinMode(sensorPin, INPUT);
  pinMode(buzzer,OUTPUT);
  digitalWrite(sensorPin, HIGH);
  digitalWrite(buzzer, HIGH);

  pulseCount        = 0;
  flowRate          = 0.0;
  flowMilliLitres   = 0;
  totalMilliLitres  = 0;
  oldTime           = 0;

  attachInterrupt(sensorInterrupt, pulseCounter, FALLING);

}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;

  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }

  for( i = 0; i < 8; i++) {

  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      return;
  }

  switch (addr[0]) {
    case 0x10:
      type_s = 1;
      break;
    case 0x28:
      type_s = 0;
      break;
    case 0x22:
      type_s = 0;
      break;
    default:
      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

  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) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    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

  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  suhu = celsius;
 
 
  if((millis() - oldTime) > 1000)    // Only process counters once per second
  {

    detachInterrupt(sensorInterrupt);
    flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
    oldTime = millis();
    flowMilliLitres = (flowRate / 60) * 1000;
    //totalMilliLitres += flowMilliLitres;
     
  
    // Print the flow rate for this second in litres / minute
    //Serial.print("Flow rate: ");
    //Serial.print(int(flowRate));  // Print the integer part of the variable
    //Serial.print(".");             // Print the decimal point
    // Determine the fractional part. The 10 multiplier gives us 1 decimal place.
    frac = (flowRate - int(flowRate)) * 10;
    //Serial.print(frac, DEC) ;      // Print the fractional part of the variable
    //Serial.print("L/min");
    // Print the number of litres flowed in this second
    //Serial.print("Flow: ");             // Output separator
    //Serial.print(flowMilliLitres);
    //Serial.println(" mL/Sec");

   // Serial.print("Hasil|");             // Output separator
   // Serial.print(suhu);
   // Serial.print("|");
   // Serial.print(flowMilliLitres);
   // Serial.print("|");
   // Serial.print(derajat);
   
    // Print the cumulative total of litres flowed since starting
    //Serial.print("  Output Liquid Quantity: ");             // Output separator
    //Serial.print(totalMilliLitres);
    //Serial.println("mL");

    // Reset the pulse counter so we can start incrementing again
    pulseCount = 0;
  
    // Enable the interrupt again now that we've finished sending output
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
  }
 
    Serial.print(derajat);
    Serial.print("|");       
    Serial.print(suhu);
    Serial.print("|");
    Serial.print(flowMilliLitres);
    Serial.print("|");

  
    delay(300);
   
if((suhu >= 0 )&&(suhu <= 27)){
myservo.write(70);
derajat = 45;
}
if((suhu > 27 )&&(suhu <= 40)){
myservo.write(100);
derajat = 60;
}
if((suhu > 40 )&&(suhu <= 60)){
myservo.write(150);
derajat = 90;
}

if(suhu >= 60){
 digitalWrite(buzzer,LOW);
}
if(suhu < 60){
 digitalWrite(buzzer,HIGH);
}

}



void pulseCounter()
{
  pulseCount++;
}




g. Untuk Mengirim dua saja menggunakan proram ini




h. Program Android








i. Gambar Hasilnya





j. VIDEO HASILNYA