Translate

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









Membuat Alat Monitor SUHU (Temperature) dan KELEMBABAN (Humidity) DHT11 Menggunakan SERVER LOCALHOST dan ARDUINO

Membuat Alat Monitor SUHU (Temperature) dan KELEMBABAN (Humidity) DHT11 Menggunakan SERVER LOCALHOST dan ARDUINO


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang mana alat ini digunakan untuk monitoring suhu dan kelembaban via ethernet web server namun servernya menggunakan LOCALHOST komputer jadi tidak menggunakan cloud atau wifi, alat ini menggunakan sensor DHT11 untuk sensing suhu dan kelembaban kemudian dikirim ke server LOCALHOST komputer, untuk lebih jelsnya berikut adalah program dan skemanya.



a. Arduino Uno + Ethernet Shield





b. Sensor DHT11





c. LCD 16x2







d. Program Arduino IDE tanpa LCD

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

#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);

int y;
int currx;
String txData="";

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

EthernetClient client;

void setup() {
  dht.begin();
  Serial.begin(9600);
  while (!Serial) {
    ; //wait for serial port to connect. Needed for Leonardo only
  }
//  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()
{
  kirim ();
}


void kirim (){

 float h = dht.readHumidity();
 float t = dht.readTemperature();
 float f = dht.readTemperature(true);

 int hum = h;
 int suhu = t;

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C ");
 
  EthernetClient client;

   if (client.connect("192.168.1.111", 80)){
    txData = "hum="+ (String (hum)) + "&suhu="+ (String (suhu));
    Serial.println("connected");
    Serial.print(txData);
    client.println("POST /monitoring/update.php HTTP/1.1");
    //jika menggunakan insert pakai client.println("POST /antri/insert.php HTTP/1.1");
    client.println("Host: 192,168,1,111");
    client.println("Connection: close");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(txData.length());
    client.print("\n\n");
    client.print(txData);
    Serial.println(txData);
    delay (2000);
  
  }  
  else{
    Serial.println("Connection Failed.");
    Serial.println();
    delay (1500);
  }
}



e. Program Arduino IDE + LCD

#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library

#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

int y;
int currx;
String txData="";

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

EthernetClient client;

void setup() {
  lcd.begin();
  dht.begin();
  Serial.begin(9600);
  while (!Serial) {
    ; //wait for serial port to connect. Needed for Leonardo only
  }
//  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()
{
  kirim ();
}


void kirim (){

 float h = dht.readHumidity();
 float t = dht.readTemperature();
 float f = dht.readTemperature(true);

 int hum = h;
 int suhu = t;

  lcd.setCursor(0,0);
  lcd.print("Temp= ");
  lcd.print(suhu);
  lcd.print(" C  ");
 
  lcd.setCursor(0,1);
  lcd.print("Hum= ");
  lcd.print(hum);
  lcd.print(" %  ");
 
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C ");
 
  EthernetClient client;

   if (client.connect("192.168.1.111", 80)){
    txData = "hum="+ (String (hum)) + "&suhu="+ (String (suhu));
    Serial.println("connected");
    Serial.print(txData);
    client.println("POST /monitoring/update.php HTTP/1.1");
    //jika menggunakan insert pakai client.println("POST /antri/insert.php HTTP/1.1");
    client.println("Host: 192,168,1,111");
    client.println("Connection: close");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(txData.length());
    client.print("\n\n");
    client.print(txData);
    Serial.println(txData);
    delay (2000);
  
  }  
  else{
    Serial.println("Connection Failed.");
    Serial.println();
    delay (1500);
  }
}




f. Cara Setting Komputer

    1. Aktifkan XAMPP 




    2. Buat tiga buah file PHP berikut



   3. Buat database phpmyadmin
      
      nama database = "monitordht"
      nama tabel = "tbmonitor"




     4. Setting IP LAN






g. Program PHP

1. config.php

 <?php

$dbhost = 'localhost';
$dbuser = 'root';
//$dbpass = '';   
$dbname = 'monitordht'; //This is the name of your database on the mysql server

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



2. 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</title>
</head>
<body>

<CENTER>
<p><h2> MONITORING SUHU DAN KELEMBABAN</h2></p>

</CENTER>

<CENTER>
<p><h3>

KELEMBABAN =
<?php
include "config.php";
$tampil = @mysql_query("SELECT * FROM tbmonitor WHERE no IN (SELECT MAX(no) FROM tbmonitor)");
        
    while ($r=mysql_fetch_array($tampil)){
       echo "$r[hum]";
   }
?>

%

<br>

SUHU =
<?php
include "config.php";
$tampil = @mysql_query("SELECT * FROM tbmonitor WHERE no IN (SELECT MAX(no) FROM tbmonitor)");
        
    while ($r=mysql_fetch_array($tampil)){
       echo "$r[suhu]";
   }
?>

C

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




3. update.php

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

$query = "UPDATE tbmonitor SET hum='$_POST[hum]', suhu='$_POST[suhu]' WHERE no=1";

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




h. Tampilan Server






i. VIDEO HASILNYA










Membuat Alat Frequency Generator Adjustable PWM dan Duty Cycle ARDUINO

Membuat Alat Frequency Generator Adjustable ARDUINO


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana membuat sebuah alat yang dapat menghasilkan sinyal kotak atau PWM dengan frekuensi yang dapat diatur selain itu ada waktu / timer untuk waktu PWM tersebut, alat ini menggunakan Arduino sebagai kontrollernya dan interface menggunakan LCD, kendali interface menggunakan 4 buah push button. aplikasi alat ini sangatlah banyak salah satunya yaitu untuk intensitas laser atau sinyal elektrostimulator, untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino UNO





b. LCD 16x2






c. Program Arduino IDE

#include<Wire.h>
#include<LiquidCrystal.h>
#include <PWM.h>

LiquidCrystal lcd(6,7,8,10,11,12);


int led = 9;                // the pin that the LED is attached to
int duty = 10;         // duty cycle
int32_t frequency = 30; //frequency (in Hz)

int btup = 2;
int btdown = 3;
int btok = 4;
int btset = 5;
int frek = 20;
int waktu = 10;
int btupx, btdownx, btsetx, btokx;
int nilaifrek, nilaiwaktu;
int detik;

void setup()
{
lcd.begin(16,2);
lcd.clear();
lcd.noCursor();
 
  //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(btup,INPUT_PULLUP);
  pinMode(btdown,INPUT_PULLUP);
  pinMode(btok,INPUT_PULLUP);
  pinMode(btset,INPUT_PULLUP);
 
  pwmWrite(led, duty);


}

void loop()
{
 
  btupx = digitalRead(btup);
  btdownx = digitalRead(btdown);
  btokx = digitalRead(btok);
  btsetx = digitalRead(btset);
 
  lcd.setCursor(0,0);
  lcd.print("E STIMULATOR");
  lcd.setCursor(0,1);
  lcd.print("SET");

 
  pwmWrite(led, 0);

 
if(btsetx == LOW){
  delay(200);
  lcd.clear();
  setfrek();
  delay(1000);
  lcd.clear();
  settime();
  delay(1000);
  lcd.clear();
  mulai();
 

 
        
}


void setfrek(){
 
  btupx = digitalRead(btup);
  btdownx = digitalRead(btdown);
  btokx = digitalRead(btok);
  btsetx = digitalRead(btset);
 
  lcd.setCursor(0,0);
  lcd.print("PILIH FREK     ");
  lcd.setCursor(0,1);
  lcd.print(frek);
  lcd.print("   ");
 
  if(frek < 20){
  frek = 20;
  }

  if(frek > 50){
  frek = 50;
  }
 
  if(btupx == LOW){
  delay(200);
  frek++;
  } 
 
  if(btdownx == LOW){
  delay(200);
  frek--;   
  }

  if(btokx == LOW){
  delay(200);
  nilaifrek = frek;
  return;
  }
 
 
setfrek();

}




void settime(){

  btupx = digitalRead(btup);
  btdownx = digitalRead(btdown);
  btokx = digitalRead(btok);
  btsetx = digitalRead(btset);
 
  lcd.setCursor(0,0);
  lcd.print("PILIH WAKTU    ");
  lcd.setCursor(0,1);
  lcd.print(waktu);
  lcd.print("   ");
 
 
  if(waktu < 10){
  waktu = 10;
  }

  if(waktu > 15){
  waktu = 15;
  }
 
  if(btupx == LOW){
  delay(200);
  waktu++;
  } 
 
  if(btdownx == LOW){
  delay(200);
  waktu--;   
  }

  if(btokx == LOW){
  delay(200);
  nilaiwaktu = waktu;
  return;
  }


settime();

}



void mulai(){

  lcd.setCursor(0,0);
  lcd.print("FREK= ");
  lcd.print(nilaifrek);
  lcd.setCursor(0,1);
  lcd.print(nilaiwaktu);
  lcd.print(" : ");
  lcd.print(detik);
  lcd.print("  ");


detik--;


if((nilaiwaktu < 1)&&(detik < 1)){
delay(1000);
nilaiwaktu = 0;
detik = 0;
lcd.clear();
return;
}


if(detik < 1){
nilaiwaktu--; 
detik = 59;
}


  InitTimersSafe();
//  Serial.begin(9600);
  //sets the frequency for the specified pin
  bool success = SetPinFrequencySafe(led, nilaifrek);

 
  pwmWrite(led, duty);


delay(1000);
mulai();
}





d. VIDEO HASILNYA











Membuat Alat Monitor Suhu dan Kelembaban Menggunakan DHT11 dan SMS Gateway SIM800L ARDUINO

Membuat Alat Monitor Suhu dan Kelembaban Menggunakan DHT11 dan SMS Gateway SIM800L ARDUINO


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk memonitor suhu dan kelembaban menggunakan sensor DHT11 dan SMS Gateway SIM800L, jadi rinsip kerja alat ini yaitu jika suhu dan kelembaban mencapai suhu lebih dari 35 derajat celcius maka akan mengirimkan sms kepada pengguna yang nomernya tertera di program, kemudian setelah tu relay akan menyala, jika suhu dibawah 35 maka relay akan mati dan kondisi kembali seperti semula, alat ini dilengkapi dengan RTC DS1302 untuk menampilkan jam dan tanggal. untuk lebih jelasnya berikut adalah program dan skemanya.




a. Arduino UNO





b. Sensor Suhu dan Kelembaban DHT11





c. SMS Modul SIM800L + Buck Converter





 
d. RTC DS1302






e. Program Arduino IDE

#include "DHT.h"
#define DHTPIN 7   
#define DHTTYPE DHT11
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;


DHT dht(DHTPIN, DHTTYPE);

int mark = 0;
char string[160];

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];

void setup(){
  Serial.begin(9600);
  dht.begin();
 
  pinMode(A4,OUTPUT);
  pinMode(A5,OUTPUT);
  digitalWrite(A4,HIGH);
  digitalWrite(A5,HIGH);

  Serial.println("GSM Shield testing.");
     if (gsm.begin(2400)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

     if(started) {
          if (sms.SendSMS("083854030000", "Alat Ready"));
     }

}


void loop(){

  int h = dht.readHumidity();
  int t = dht.readTemperature();
  int hic = dht.computeHeatIndex(t, h, false);

  sprintf(string,"Pompa menyala suhu = %d dan kelembaban = %d ", t , h);
 

  Serial.print("Temp= ");
  Serial.print(t);
  Serial.println(" C");

  Serial.print("Hum= ");
  Serial.print(h);
  Serial.println(" %");

  if((t > 35)&&(mark == 0)){
  if (sms.SendSMS("083854030000", string));
  delay(1000);
  mark = 1; 
  digitalWrite(A4,LOW);
  digitalWrite(A5,LOW); 
  }

  if((t < 35)&&(mark == 1)){
  mark = 0;  
  digitalWrite(A4,HIGH);
  digitalWrite(A5,HIGH);
  }

  delay(1000);

}

 




f. Gambar Hasilnya






g. VIDEO HASILNYA