Translate

Membuat Alat Pengukur Jarak Benda dan Pengukur Kecepatan Gerakan Benda sensor HC-SRF04 dan HB100 ARDUINO

Membuat Alat Pengukur Jarak Benda dan Pengukur Kecepatan Gerakan Benda sensor HC-SRF04 dan HB100 ARDUINO


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan Arduino untuk mengukur jarak benda dan kecepatan gerakan benda, alat ini menggunakan dua buah sensor yaitu HC-SRF04 dan HB100. alat ini dilengkapi dengan LCD untuk penampilnya atau interface. untuk aplikasi dari alat ini sangatlah banyak salah satunya untuk mengukur kecepatan mobil dan sensor jarak saat mundur parkir. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Mega




b. Sensor Jarak HC-SRF04




c. Sensor HB100




d. LCD + I2C






e. Program Arduino IDE

#include <Wire.h> 
#include <LiquidCrystal_I2C.h> 
#include "FreqMeasure.h"
LiquidCrystal_I2C lcd(0x3F, 16, 2);

#define trigPin 2
#define echoPin 3


void setup()
{
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  lcd.begin();
  lcd.clear();
  Serial.begin(9600);
  lcd.print("Dist:");
  lcd.setCursor(10,0);
  lcd.print("Speed:");
  FreqMeasure.begin();
}

double sum=0;
int count=0;

void loop(){
 
    long duration, distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

   
  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 (sorry, imperial guys :)
      //to improve speed, we update only the bottom row of the LCD

if(spd > 2.5){
spd = 0;
}
      lcd.setCursor(0, 1);
      lcd.print("                ");
      lcd.setCursor(0, 1);
      lcd.print(distance);
      lcd.print("cm");
      //lcd.print("       ");    
      lcd.setCursor(8,1);
      lcd.print(spd);
      lcd.print("km/h");
     
//      Serial.println(distance);
//      Serial.println(spd);
          
      sum = 0;
      count = 0;
    }
  }
}





f. VIDEO HASILNYA










Membuat Alat Monitoring Polusi Udara via Internet Webserver Arduino (IOT)

Membuat Alat Monitoring Polusi Udara via Internet Webserver Arduino (IOT)


            Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor polusi udara menggunakan Arduino sebagai kontrollernya serta internet sebagai media pengiriman datanya (IOT). alat ini terdiri dari beberapa bagian yaitu bagian sensor, bagian pengolah data dan bagian pengiriman data, untuk interface menggunakan server dari www.idhostinger.com. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno + Ethernet Shield




b. Sensor Gas Polutan




c. Router + Modem USB







d. Program Arduino IDE

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

LiquidCrystal_I2C lcd(0x27, 16, 2);

String txData2="";

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

EthernetClient client;

void setup()
{
lcd.begin();
  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()
{     
  kirim ();
}


void kirim()
{
 
   int voltage0 = analogRead(A0); //mq135
   int voltage1 = analogRead(A1); //mq9
   int voltage2 = analogRead(A2); //gasamonia
   int voltage3 = analogRead(A3); //gasco2
 
  EthernetClient client;

if (client.connect(server, 80)){
    txData2 = "voltage0="+ (String (voltage0)) + "&voltage1="+ (String (voltage1)) + "&voltage2="+ (String (voltage2)) + "&voltage3="+ (String (voltage3));          
    Serial.println("connected");
    Serial.print(txData2);
    client.println("POST /updatex.php HTTP/1.1");
    client.println("Host: www.monitoring-udara.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 (1000);
        
  }  
  else{
    Serial.println("Connection Failed.");
    Serial.println();
    delay (1500);
  }
 
   
  lcd.setCursor(0,0);
  lcd.print("1=");
  lcd.print(voltage0);
  lcd.print("  ");
 
  lcd.setCursor(0,1);
  lcd.print("2=");
  lcd.print(voltage1);
  lcd.print("  ");
 
  lcd.setCursor(7,0);
  lcd.print("3=");
  lcd.print(voltage2);
  lcd.print("    ");
 
  lcd.setCursor(7,1);
  lcd.print("4=");
  lcd.print(voltage3);
  lcd.print("    ");
 
  delay(5000);
 
}




e. updatex.php

<?php
require("configx.php");
                
$query = "UPDATE tbudara SET voltage0='$_POST[voltage0]', voltage1='$_POST[voltage1]', voltage2='$_POST[voltage2]', voltage3='$_POST[voltage3]' WHERE no=1";

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



f. 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 >AIR QUALITY CONTROL</title>
</head>

<center>
<p><h2>AIR QUALITY CONTROL</h2></p>

<script type='text/javascript'>
<!--
var months = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'];
var myDays = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum&#39;at', 'Sabtu'];
var date = new Date();
var day = date.getDate();
var month = date.getMonth();
var thisDay = date.getDay(),
    thisDay = myDays[thisDay];
var yy = date.getYear();
var year = (yy < 1000) ? yy + 1900 : yy;
document.write(thisDay + ', ' + day + ' ' + months[month] + ' ' + year);
//-->
</script>

<br>

<script type="text/javascript">
<!--
var a_p = "";
var d = new Date();
var curr_hour = d.getHours();
if (curr_hour < 12) {
    a_p = "AM";
} else {
    a_p = "PM";
}
if (curr_hour == 0) {
    curr_hour = 12;
}
if (curr_hour > 12) {
    curr_hour = curr_hour - 12;
}

var curr_min = d.getMinutes();
curr_min = curr_min + "";
if (curr_min.length == 1) {
    curr_min = "0" + curr_min;
}
document.write(curr_hour + " : " + curr_min + " " + a_p);
//-->
</script>

</center>

<body>

<CENTER>

<br>
<input type="button" onclick="location.href='http://monitoring-udara.hol.es/dbshow.php';" value="Lihat Database" />
<br><br>
</CENTER>

<CENTER>
<p><h3>
Konsentrasi GAS CO2 =
<?php
include "configx.php";
$tampil = @mysql_query("SELECT * FROM tbudara WHERE no IN (SELECT MAX(no) FROM tbudara)");
         
    while ($r=mysql_fetch_array($tampil)){
       echo $r[voltage0];
   }
?>
<br>
Konsentrasi GAS SnO2 =
<?php
include "configx.php";
$tampil = @mysql_query("SELECT * FROM tbudara WHERE no IN (SELECT MAX(no) FROM tbudara)");
         
    while ($r=mysql_fetch_array($tampil)){
       echo "$r[voltage1]";
   }
?>

<br>
Konsentrasi GAS NH3 =
<?php
include "configx.php";
$tampil = @mysql_query("SELECT * FROM tbudara WHERE no IN (SELECT MAX(no) FROM tbudara)");
         
    while ($r=mysql_fetch_array($tampil)){
       echo "$r[voltage2]";
   }
?>


<br>
Konsentrasi GAS CO =
<?php
include "configx.php";
$tampil = @mysql_query("SELECT * FROM tbudara WHERE no IN (SELECT MAX(no) FROM tbudara)");
         
    while ($r=mysql_fetch_array($tampil)){
       echo "$r[voltage3]";
   }
?>

</CENTER>
<br><br><br>

</body>

</html>




g. dbshow.php

<html>
<head>
<meta http-equiv="refresh" content="3">
<style>
.bordered { border-style:solid; }
</style>
<title >DATABASE</title>
</head>
<body bgcolor = #ffffff>

<CENTER>
<p><h2>AIR QUALITY CONTROL DATABASE</h2></p>

<center>
<script type='text/javascript'>
<!--
var months = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'];
var myDays = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum&#39;at', 'Sabtu'];
var date = new Date();
var day = date.getDate();
var month = date.getMonth();
var thisDay = date.getDay(),
    thisDay = myDays[thisDay];
var yy = date.getYear();
var year = (yy < 1000) ? yy + 1900 : yy;
document.write(thisDay + ', ' + day + ' ' + months[month] + ' ' + year);
//-->
</script>

<br>

<script type="text/javascript">
<!--
var a_p = "";
var d = new Date();
var curr_hour = d.getHours();
if (curr_hour < 12) {
    a_p = "AM";
} else {
    a_p = "PM";
}
if (curr_hour == 0) {
    curr_hour = 12;
}
if (curr_hour > 12) {
    curr_hour = curr_hour - 12;
}

var curr_min = d.getMinutes();
curr_min = curr_min + "";
if (curr_min.length == 1) {
    curr_min = "0" + curr_min;
}
document.write(curr_hour + " : " + curr_min + " " + a_p);
//-->
</script>

</center>


<br>
<input type="button" onclick="location.href='http://monitoring-udara.hol.es/index.php';" value=" HOME " />
<br>
<input type="button" onclick="location.href='http://monitoring-udara.hol.es/downloadExcel.php';" value=" Download Data" />
<br>

<?php
include "configx.php";

//$id=mysql_fetch_array(mysql_query("SELECT * FROM tbudara ORDER BY no desc LIMIT 1 "))[no];

//mysql_query("UPDATE  `u761553243_udara`.`tbudara` SET  `waktu` =  (SELECT CONVERT_TZ(CURRENT_TIMESTAMP,'+00:00','+07:00')) WHERE  `tbudara`.`no` =$id;");

$tampil = mysql_query("SELECT * FROM tbudara ORDER BY `tbudara`.`no` DESC");

 echo "<table border = '0'>
          <tr><th bgcolor = #F0F011>GAS CO2</th><th bgcolor = #F0F011>GAS SnO2</th><th bgcolor = #F0F011>GAS NH3</th><th bgcolor = #F0F011>GAS CO</th></tr>";
  
    while ($r=mysql_fetch_array($tampil)){
       echo "<tr>
             <td bgcolor = #FFC848>$r[voltage0]</td>
             <td bgcolor = #FFC848>$r[voltage1]</td>
             <td bgcolor = #FFC848>$r[voltage2]</td>
             <td bgcolor = #FFC848>$r[voltage3]</td></tr>";
    }
    echo "</table>";

@mysql_close($con);

?>

</CENTER>

</body>
</html>




h. configx.php

<?php

$dbhost = 'mysql.idhostinger.com';
$dbuser = 'u76xxxx_local';
$dbpass = '19986876';   
$dbname = 'u76xxx_udara';

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

    }
?> 





i. VIDEO HASILNYA









Membuat Alat Monitor Gas Secara Wireless Modul HC-12 Logger Komputer ARDUINO

Membuat Alat Monitor Gas Secara Wireless Modul HC-12 Logger Komputer ARDUINO


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk monitor gas secara wireless, jadi alat ini memang difungsikan untuk memonitor gas pada suatu udara kemudian akan mengirimkan datanya ke server yang berada cukup jauh dari alat, kemudian terdapat data logger menggunakan software VB pada komputer untuk recod data gas. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno




b. Sensor Gas




c. Modul Wireless HC-12




d. Program Arduino Transmitter

#include <SoftwareSerial.h>

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin

void setup() {
  Serial.begin(9600);             // Serial port to computer
  HC12.begin(9600);               // Serial port to HC12

}

void loop() {

  int dataadc = analogRead(A0);
  int ppm = 1.953125*dataadc;
 
    HC12.write(ppm);      // Send that data to HC-12
  delay(1000);
 
}




e. Program Arduino Receiver

#include <SoftwareSerial.h>

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin

void setup() {
  Serial.begin(9600);             // Serial port to computer
  HC12.begin(9600);               // Serial port to HC12

}

void loop() {
  while (HC12.available()) {        // If HC-12 has data
    Serial.println(HC12.read());      // Send the data to Serial monitor
  }

}




f. Cara Penggunaan Alat

         Pertama hubungkan modul wireless HC-12 ke arduino transmitter dan receiver, kemudian pasangkan sensor gas di bagian arduino transmitter pada pin ADC. setelah itu hubungkan arduino receiver ke komputer dan aktifkan serial monitor, maka data PPM gas akan tampil pada serial monitor secara realtime dan data tersebut adalah data hasil kiriman dari arduino transmiter.







Mengakses Sensor Jarak HC-SRF04 Menggunakan ARDUINO (Alat Pengukur Jarak Digital)

Mengakses Sensor Jarak HC-SRF04 Menggunakan ARDUINO (Alat Pengukur Jarak Digital)


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat digunakan untuk mengukur jarak benda dari sensor menuju ke objek yang akan diukur jaraknya. menurut datasheet sensor ini bisa mengukur maksimal hingga 3 meter dan minimal 3 cm. sensor ini sangat cocok sekali buat tempat sampah otomatis, buka tutup pintu dan lainnya. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno




b. Sensor Jarak HC-SRF04




c. LCD 16x2 + I2C





d. Program Arduino IDE

#define trigPin 2
#define echoPin3

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  }

 void loop() {

  long duration, distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  Serial.print(distance);
  Serial.println(" cm");
 
  if (distance < 10) {  // This is where the LED On/Off happens

   }

  else {
 

   }
 
  delay(200);

}
 




 e. VIDEO HASILNYA









Membuat Alat Kendali Relay Menggunakan Android via Bluetooth HC-05 ARDUINO

Membuat Alat Kendali Relay Menggunakan Android via Bluetooth HC-05 ARDUINO


       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat kendali ON/OFF Relay yang dapat dikendalikan menggunakan HP Android, alat ini dilengkapi dengan wireless bluetooth untuk komunikasi dari alat ke HP Android, modul bluetooth yang digunakan adalah HC-05. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Minimum System Arduino + Relay




b. Bluetooth HC-05




c. Program Arduino IDE

int datain;
int a1 = 0;
int a2 = 0;
int a3 = 0;
int a4 = 0;
int a5 = 0;
int a6 = 0;
int a7 = 0;
int a8 = 0;
int a9 = 0;
int a10 = 0;
int a11 = 0;
int a12 = 0;
int a13 = 0;
int a14 = 0;
int a15 = 0;


void setup(){
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
pinMode(A5,OUTPUT);
Serial.begin(9600);
}



void loop() {

if (Serial.available() > 0)
{
  datain = Serial.parseInt();
  Serial.print(datain);

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

if ((datain == 100)&&(a1 == 0))
{
digitalWrite(2,HIGH);
a1 = 1;
datain = 0;
}

if ((datain == 100)&&(a1 == 1))
{
digitalWrite(2,LOW);
a1 = 0;
datain = 0;
}

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

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

if ((datain == 200)&&(a2 == 0))
{
digitalWrite(3,HIGH);
a2 = 1;
datain = 0;
}

if ((datain == 200)&&(a2 == 1))
{
digitalWrite(3,LOW);
a2 = 0;
datain = 0;
}

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

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

if ((datain == 300)&&(a3 == 0))
{
digitalWrite(4,HIGH);
a3 = 1;
datain = 0;
}

if ((datain == 300)&&(a3 == 1))
{
digitalWrite(4,LOW);
a3 = 0;
datain = 0;
}

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

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

if ((datain == 400)&&(a4 == 0))
{
digitalWrite(5,HIGH);
a4 = 1;
datain = 0;
}

if ((datain == 400)&&(a4 == 1))
{
digitalWrite(5,LOW);
a4 = 0;
datain = 0;
}

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

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

if ((datain == 500)&&(a5 == 0))
{
digitalWrite(6,HIGH);
a5 = 1;
datain = 0;
}

if ((datain == 500)&&(a5 == 1))
{
digitalWrite(6,LOW);
a5 = 0;
datain = 0;
}

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

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

if ((datain == 600)&&(a6 == 0))
{
digitalWrite(7,HIGH);
a6 = 1;
datain = 0;
}

if ((datain == 600)&&(a6 == 1))
{
digitalWrite(7,LOW);
a6 = 0;
datain = 0;
}

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

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

if ((datain == 700)&&(a7 == 0))
{
digitalWrite(8,HIGH);
a7 = 1;
datain = 0;
}

if ((datain == 700)&&(a7 == 1))
{
digitalWrite(8,LOW);
a7 = 0;
datain = 0;
}

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

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

if ((datain == 800)&&(a8 == 0))
{
digitalWrite(9,HIGH);
a8 = 1;
datain = 0;
}

if ((datain == 800)&&(a8 == 1))
{
digitalWrite(9,LOW);
a8 = 0;
datain = 0;
}

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

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

if ((datain == 900)&&(a9 == 0))
{
digitalWrite(10,HIGH);
a9 = 1;
datain = 0;
}

if ((datain == 900)&&(a9 == 1))
{
digitalWrite(10,LOW);
a9 = 0;
datain = 0;
}

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

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

if ((datain == 110)&&(a10 == 0))
{
digitalWrite(A0,HIGH);
a10 = 1;
datain = 0;
}

if ((datain == 110)&&(a10 == 1))
{
digitalWrite(A0,LOW);
a10 = 0;
datain = 0;
}

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

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

if ((datain == 120)&&(a11 == 0))
{
digitalWrite(A1,HIGH);
a11 = 1;
datain = 0;
}

if ((datain == 120)&&(a11 == 1))
{
digitalWrite(A1,LOW);
a11 = 0;
datain = 0;
}

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

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

if ((datain == 130)&&(a12 == 0))
{
digitalWrite(A2,HIGH);
a12 = 1;
datain = 0;
}

if ((datain == 130)&&(a12 == 1))
{
digitalWrite(A2,LOW);
a12 = 0;
datain = 0;
}

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

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

if ((datain == 140)&&(a13 == 0))
{
digitalWrite(A3,HIGH);
a13 = 1;
datain = 0;
}

if ((datain == 140)&&(a13 == 1))
{
digitalWrite(A3,LOW);
a13 = 0;
datain = 0;
}

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

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

if ((datain == 150)&&(a14 == 0))
{
digitalWrite(A4,HIGH);
a14 = 1;
datain = 0;
}

if ((datain == 150)&&(a14 == 1))
{
digitalWrite(A4,LOW);
a14 = 0;
datain = 0;
}

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

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

if ((datain == 160)&&(a15 == 0))
{
digitalWrite(A5,HIGH);
a15 = 1;
datain = 0;
}

if ((datain == 160)&&(a15 == 1))
{
digitalWrite(A5,LOW);
a15 = 0;
datain = 0;
}

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

}

}



d. Program Android







e. VIDEO HASILNYA









Membuat Alat Monitor Suhu Sensor DHT11 Dengan Output Buzzer dan Setting Manual Button BASCOM AVR

Membuat Alat Monitor Suhu Sensor DHT11 Dengan Output Buzzer dan Setting Manual Button BASCOM AVR


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat digunakan untuk monitor suhu menggunakan sensor DHT11, alat ini dilengkapi dengan buzzer sebagai indikator ketika suhu telah melewati batas dari suhu yang disetting. alat ini dilengkapi dengan 2 buah indikator yatu led dan buzzer. untuk setting batas suhu menggunakan tombol. kemudian ada komunikasi serial RS232 untuk mengirimkan kata-kata WARNING saat suhu melebihi batas. untuk leih jelasnya berikut adalah skema dan programnya.



a. Minimum System ATMega8





b. Sensor DHT11





c. Program Bascom AVR

$regfile = "m8def.dat"
$crystal = 12000000
$baud = 9600
'--------------------------
Config Lcdpin = Pin , Rs = Portd.7 , E = Portb.1 , Db4 = Portb.2
Config Lcdpin = Pin , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Config Lcd = 16 * 2
Cursor Off
Cls

'led
Ddrc.4 = 1
Ddrc.5 = 1

'buzzer
Ddrd.6 = 1

'pushbutton
Ddrd.4 = 0
Ddrd.3 = 0
Ddrd.2 = 0
Ddrd.5 = 0

'aktif low pushbutton
Portd.4 = 1
Portd.3 = 1
Portd.2 = 1
Portd.5 = 1

Pbset Alias Pind.4
Pbdown Alias Pind.3
Pbup Alias Pind.2
Pbok Alias Pind.5


Declare Sub Get_th(t As Byte , H As Byte)
Config Serialin = Buffered , Size = 128
Config Serialout = Buffered , Size = 128
Dht_put Alias Portb.0
Dht_get Alias Pinb.0
Dht_io_set Alias Ddrb.0
Dim T As Byte
Dim H As Byte
Dim Crc As Byte
Dim Mybyte As Byte
Dim Sensor_data As String * 40
Dim Tmp_str8 As String * 8
Dim Count As Byte
Enable Interrupts
Set Dht_io_set
Set Dht_put

Dim Nilai As Integer

Portc.4 = 0
Portc.5 = 0
Portd.6 = 1

Utama:
Do


   Waitms 1500
   Call Get_th(t , H)
   Upperline
   Lcd "SUHU: " ; T ; " C   "
   Lowerline
   Lcd "BATAS: " ; Nilai ; " C   "

If Pbset = 0 Then
Waitms 200
Cls
Wait 1
Goto Setting
End If

If Nilai > 0 And T > Nilai Then
Portc.4 = 0
Portc.5 = 1
Portd.6 = 0
Print "bahaya"
End If


If Nilai > 0 And T <= Nilai Then
Portc.4 = 1
Portc.5 = 0
Portd.6 = 1
End If

Loop



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


Setting:

Do

Upperline
Lcd "SET BATAS"

Lowerline
Lcd "Suhu= " ; Nilai ; "     "


If Pbup = 0 Then
Waitms 200
Incr Nilai
End If

If Pbdown = 0 Then
Waitms 200
Decr Nilai
End If

If Pbok = 0 Then
Waitms 200
Cls
Wait 1
Goto Utama
End If

Loop





 d.VIDEO HASILNYA







Membuat Alat Monitor Gas Menggunakan ATMega dilengkapi tombol setting dan set via komputer (SERIAL UART) dan CodeVision AVR (SIMPAN - BACA EEPROM)

Membuat Alat Monitor Gas Menggunakan ATMega dilengkapi tombol setting dan set via komputer (SERIAL UART) dan CodeVision AVR (SIMPAN - BACA EEPROM)


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat digunakan untuk monitoring gas dengan menggunakan interface berupa LCD 16x2. alat ini akan mengeluarkan suara buzzer atau indikator suara saat nilai gas lebih dari batas yang disettingkan, buzzer berfungsi sebagai alarm. Sensor yang digunakan bisa bermacam-macam tergantung jenis zat yang akan dideteksi. kelebihan dari alat ini yaitu bisa disetting menggunakan 2 cara yaitu manual tombol / pushbutton dan kedua yaitu via komputer atau serial / uart. alat ini dilengkapi dengan fungsi baca dan tulis EEPROM (read - write EEPROM) untuk penyimpanan batas nilai maksimal pada menu setting yang telah kita masukkan. untuk lebih jelasnya berikut adalah skema dan programnya.

 

a. Skema Minimum System





b. Sensor GAS





c. Program CodeVision AVR

#include <mega8.h>

#include <delay.h>

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

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

#define ADC_VREF_TYPE 0x40

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

// Declare your global variables here
int nilaix;
int dataadc;
int nilai;
char temp[10];
char temp2[10];
char buf[3];
int eeprom *pointer_eeprom;

void settingx(){

itoa(nilai,temp2);

lcd_gotoxy(0,0);
lcd_putsf("SET BATAS");
lcd_gotoxy(0,1);
lcd_puts(temp2);
lcd_putsf("        ");

if(PIND.3 == 0){
delay_ms(200);
nilai = nilai - 10;
}

if(PIND.2 == 0){
delay_ms(200);
nilai = nilai + 10;
}

if(PIND.5 == 0){
delay_ms(200);
lcd_clear();
return;
}

delay_ms(200);
settingx();

}


void simpaneeprom(){

 *pointer_eeprom = nilai;
 return;
}

void setserial(){

//buf[3] = 0;

 gets(buf,3);
nilai = atoi(buf);
itoa(nilai,temp2);

lcd_gotoxy(0,0);
lcd_putsf("BATAS NILAI");
lcd_gotoxy(0,1);
lcd_puts(temp2);
delay_ms(3000);
lcd_clear();
simpaneeprom();
return;


}


void bacaeeprom(){

 nilai = *pointer_eeprom;

}


void main(void)
{
PORTD.6 = 1;
bacaeeprom();
// Declare your local variables here

// Input/Output Ports initialization
// Port B 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
PORTB=0x00;
DDRB=0xFF;

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

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

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=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
MCUCR=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
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;

// 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 - PORTD Bit 7
// RD - PORTB Bit 0
// EN - PORTB Bit 1
// D4 - PORTB Bit 2
// D5 - PORTB Bit 3
// D6 - PORTB Bit 4
// D7 - PORTB Bit 5
// Characters/line: 16
lcd_init(16);

while (1)
      {
     
      dataadc = read_adc(0);

      itoa(dataadc,temp);
     
      itoa(nilai,temp2);

      lcd_gotoxy(0,0);
      lcd_putsf("ADC= ");
      lcd_puts(temp);   
      lcd_putsf("      "); 
      lcd_gotoxy(0,1);
      lcd_putsf("BATAS= ");
      lcd_puts(temp2);   
      lcd_putsf("       ");
     
      delay_ms(200);
     
      if(PIND.4 == 0){
      lcd_clear();    
      PORTD.6 = 1;
      delay_ms(3000); 
      settingx();     
      }
        
      if(PIND.5 == 0){
      lcd_clear();    
      PORTD.6 = 1;
      delay_ms(3000); 
      setserial();
        
      }
     
      if(nilai == 0){
      PORTD.6 = 1;
      }
     
      if(nilai > 0 && dataadc > nilai){
      PORTD.6 = 0;
      }
     
      if(nilai > 0 && dataadc < nilai){
      PORTD.6 = 1;
      }
     
      }
}




d. VIDEO HASILNYA