Anda di sini

Pemrograman

[TUTORIAL] Memantau Suhu dan Kelembapan Rumah Melalui Smartphone Android

Agus Ady Aryanto - 22 November 2015 00:11:49 0

Kenyamaan rumah menjadi hal yang penting didalam sebuah keluarga. Salah satu penyebab yang membuat kenyaman sebuah rumah yaitu Suhu dan Kelembaban sendiri. Mungkin banyak yang akan merasa "Galau" jika suhu udara sudah mulai tidak bersahabat. Karena sebagai makluk hidup pada hakikatnya membutuhkan suhu udara yang tepat untuk memenuhi kebutuhan hidupnya. Agar lebih efisien maka perlu dilakukan proses pengukuran. Proses dan alat pengukuran suhu dan kelemababan yang banyak saat ini beredar kadang-kadang membuat kita menjadi lebih Ribet dan Prustasi dalam pemakaian. Disamping itu juga, dalam pemakaian alat kadang-kadang banyak membuang-buang waktu hanya sekedar untuk mengetahui seberapa tinggi suhu udara dan kelembaban didalam rumah. Padahal dijaman yang modern ini waktu itu merupakan hal yang sangat berharga sekali. Maka dari itu, kenapa kita tidak memanfaatkan kecanggihan dari Smarphone Android yang ada digengaman tangan saja untuk melihat Hal-Hal seperti ini.

Terus bagaimana caranya untuk melihat Suhu dan Kelembaban Udara melalui Smartphone Android kita?? Ayoo kita lakukan eksperiman untuk mendapatkan jawabanya. Pertama persiapkan bahan-bahanya seperti :

  • Mikrokontroler Arduino
  • Modul Bluetooth
  • Sensor Suhu dan Kelembaban
  • Tentunya Smartphone Android

Ini merupakan bahan-bahan inti dari eksperimen yang akan kita lakukan. Bahan-bahan ini sangatlah mudah untuk didapatkan karena sudah beredar luas dipasaran dan harganya sangat murah. Dengan jadinya alat ini nanti maka, untuk mengukur Suhu dan Kelembaban Rumah akan menjadi lebih Cepat, Tidak Ribet dan Canggih hanya cukup Memonitoring dari Smartphone Android anda.

Ayo cukup basa-basinya kita lanjut ke pengerjaanya rangkaian perangkat keras seperti gambar 1 dibawah ini, Pada Gambar 1 juga memperlihatkan Sistem Kerja dari alat :

Jika rangkain sudah diRancang mari kita lanjutkan ke pemrogramannya, dimulai dari pembuat program untuk mikrokontroler seperti dibawah ini :

#include <MeetAndroid.h>
#include <dht11.h>
 
dht11 DHT11;
 
#define DHT11PIN 7
 
int data = 0;
int ld2;
int celsius = 0;
int kelembaban = 0;
 
MeetAndroid meetAndroid;
void setup(){
  Serial.begin(38400);
  meetAndroid.registerFunction(leda,'A');  
}
 
void loop()
{
  
  meetAndroid.receive();
   
  DHT11.read(DHT11PIN);
  celsius = (DHT11.temperature);
  kelembaban = (DHT11.humidity) + 500;
  
  meetAndroid.send(kelembaban);
  delay(2000);
  meetAndroid.send(celsius);
   
}
 
void leda(byte flag, byte numOfValues)
{
  ld2=meetAndroid.getInt();
}

Kemudian pembuat program untuk Androidnya :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background="@drawable/tema"     
    >
<!--     android:background="#ffffff" warna putih-->
 
    <EditText
        android:id="@+id/deviceIDField"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp">
    </EditText> 
     
     <Button 
        android:id="@+id/okButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Set ID"
    />
 
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background="@drawable/tema"     
    >
<!--     android:background="#ffffff" warna putih-->
 
    <EditText
        android:id="@+id/deviceIDField"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp">
    </EditText> 
     
     <Button 
        android:id="@+id/okButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Set ID"
    />
 
</LinearLayout>
<RelativeLayout xmlns:android="<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"
    xmlns:tools="<a href="http://schemas.android.com/tools">http://schemas.android.com/tools</a>"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.Miarana.suhuamarino.MainActivity"
     >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"       
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:text="@string/celsius_"
        android:textSize="20dp"/>
 
    <TextView
        android:id="@+id/textKelembaban"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView2"
        android:layout_alignBottom="@+id/textView2"
        android:layout_marginLeft="26dp"
        android:layout_toRightOf="@+id/textView2"
        android:text="%"
        android:layout_marginTop="50dp"
        android:textSize="20dp"/>
 
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/progressBar1"
        android:layout_below="@+id/progressBar1"
        android:layout_marginTop="96dp"
        android:text="Kelembaban :"
        android:textSize="20dp"/>
 
    <ProgressBar
        android:id="@+id/progressBarKelembaban"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="23dp"
        android:max="100" />
 
    <ProgressBar
        android:id="@+id/progressBarCelsius"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="26dp"
        android:max="50" />
 
    <TextView
        android:id="@+id/textCelsius"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView1"
        android:layout_alignBottom="@+id/textView1"
        android:layout_toRightOf="@+id/textView2"
        android:text="degC"
        android:textSize="20dp"/>
 
</RelativeLayout>
package com.Miarana.suhuamarino;
 
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import at.abraxas.amarino.Amarino;
 
public class InputUser extends Activity implements OnClickListener {
     
    private static final String TAG = "Suhu dan Kelembaban";
     
    public static String DEVICE_ADDRESS;
     
    EditText idField;
    Button button;
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.input);
         
        Log.d(TAG, "Main onStart");
         
        // get references to views defined in our main.xml layout file
        idField = (EditText) findViewById(R.id.deviceIDField);
        button = (Button) findViewById(R.id.okButton);
        // register listeners
        button.setOnClickListener(this);
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        DEVICE_ADDRESS = prefs.getString("device", "20:13:10:16:01:21");
        idField.setText(DEVICE_ADDRESS);
    } 
 
    public void onClick(View v) 
    {
        DEVICE_ADDRESS = idField.getText().toString();
        PreferenceManager.getDefaultSharedPreferences(this)
            .edit()
                .putString("device", DEVICE_ADDRESS)
            .commit();
        Amarino.connect(this, DEVICE_ADDRESS);
        Intent i = new Intent(this, MainActivity.class);
        startActivity(i);
    }
     
}
package com.Miarana.suhuamarino;
 
import android.R.integer;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ProgressBar;
import android.widget.TextView;
import at.abraxas.amarino.Amarino;
import at.abraxas.amarino.AmarinoIntent;
 
public class MainActivity extends ActionBarActivity {
    //private static final String DEVICE_ADDRESS = "20:13:10:16:01:21";
    public TextView celsius, kelembaban;
    private ProgressBar mProgressCelsius, mProgressKelembaban;
     
    private ArduinoReceiver arduinoReceiver = new ArduinoReceiver();
    private static final String TAG = null;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Amarino.connect(this, DEVICE_ADDRESS);
        celsius = (TextView) findViewById(R.id.textCelsius);
        kelembaban = (TextView) findViewById(R.id.textKelembaban);
        mProgressCelsius = (ProgressBar) findViewById(R.id.progressBarCelsius);
        mProgressKelembaban = (ProgressBar) findViewById(R.id.progressBarKelembaban);
        mProgressCelsius.setProgress(0);
        mProgressKelembaban.setProgress(0);
    }
    @Override
    protected void onStart() {
      super.onStart();
        registerReceiver(arduinoReceiver, new IntentFilter(AmarinoIntent.ACTION_RECEIVED));
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);    
           
        new Thread(){
            public void run(){
                try {
                    Thread.sleep(6000);
                } catch (InterruptedException e) {}                
                Log.d(TAG, "Hello");//logs debug messages
            }
        }.start();        
    }    
 
    @Override
    protected void onStop() {
      super.onStop();
      // stop Amarino's background service, we don't need it any more
      Amarino.disconnect(this, InputUser.DEVICE_ADDRESS);
    }
 
    public class ArduinoReceiver extends BroadcastReceiver {
 
        @Override
        public void onReceive(Context context, Intent intent) {
            String data = null;
                 
            String dataKelembaban = null;
            String dataCelsius = null;
            int dataCelsiusProgress = 0;
            int dataKelembabanProgres = 0;
                         
            // the device address from which the data was sent, we don't need it here but to demonstrate how you retrieve it
            final String address = intent.getStringExtra(AmarinoIntent.EXTRA_DEVICE_ADDRESS);
             
            // the type of data which is added to the intent
            final int dataType = intent.getIntExtra(AmarinoIntent.EXTRA_DATA_TYPE, -1);
             
            // we only expect String data though, but it is better to check if really string was sent
            // later Amarino will support differnt data types, so far data comes always as string and
            // you have to parse the data to the type you have sent from Arduino, like it is shown below
            if (dataType == AmarinoIntent.STRING_EXTRA){
                data = intent.getStringExtra(AmarinoIntent.EXTRA_DATA);
                final int sensorReading = Integer.parseInt(data);
                if (data != null ){                
                    try {
                        if(sensorReading > 100)
                        {
                            dataKelembaban = String.valueOf(sensorReading - 500);                            
                            if(Integer.parseInt(dataKelembaban) > 100)
                            {
                                dataKelembaban = String.valueOf(100);
                                kelembaban.setText(dataKelembaban + " %");
                                dataKelembabanProgres = Integer.parseInt(dataKelembaban);
                                mProgressKelembaban.setProgress(dataKelembabanProgres);
                            }
                            else
                            {
                                kelembaban.setText(dataKelembaban + " %");
                                dataKelembabanProgres = Integer.parseInt(dataKelembaban);
                                mProgressKelembaban.setProgress(dataKelembabanProgres);
                            }                            
                        }
                        else
                        {
                            // since we know that our string value is an int number we can parse it to an integer
                            if(sensorReading > 50)
                            {                                
                                 
                                dataCelsius = String.valueOf(50);
                                dataCelsiusProgress = Integer.parseInt(dataCelsius);
                                celsius.setText(dataCelsius + " degC");
                                mProgressCelsius.setProgress(dataCelsiusProgress);
                            }
                            else
                            {
                                dataCelsius = String.valueOf(sensorReading);
                                dataCelsiusProgress = Integer.parseInt(dataCelsius);
                                celsius.setText(dataCelsius + " degC");
                                mProgressCelsius.setProgress(dataCelsiusProgress);
                            }
                        }                        
                    } 
                    catch (NumberFormatException e) { /* oh data was not an integer */ }
                }
            }        
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }  
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

Sekian eksperimennya kali ini, berikutnya akan kita kembangakan alat ini dengan ditambah sebuah pendingin sehingga kita dapat mengatur keadaan Suhu dan Kelembaban dalam rumah, tentunya masih menggunakan sebuah Android. Semoga bermanfaat dan Terima kasih.. bye..

7.833
Image

Agus Ady Aryanto

Profil pujangga Komang Agus Ady Aryanto belum tersedia.

Artikel Menarik Lainnya
Mari Gabung

Halo Emo 51 , Ada yang ingin disampaikan? Jangan sungkan untuk gabung diskusi ini. Silahkan Login dulu atau Daftar baru.