Translate

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











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