Muhammad NovriandaAdebayusHentina awalia
Published © Apache-2.0

Lampu Teras Otomatis

Sensor memantau penerimaan cahaya matahari, jika sudah gelap maka lampu akan menyala. Android digunakan untuk mencatat info lampu

BeginnerFull instructions provided24 hours5,896
Lampu Teras Otomatis

Things used in this project

Hardware components

NodeMCU ESP8266 Breakout Board
NodeMCU ESP8266 Breakout Board
Rp. 60.000
×1
Jumper wires (generic)
Jumper wires (generic)
Rp. 10.000
×1
Arduino UNO
Arduino UNO
Rp. 75.000
×1
Breadboard (generic)
Breadboard (generic)
Rp. 35.000
×1
LED (generic)
LED (generic)
Rp. 2.000
×1
LDR
Rp. 5.000
×1

Software apps and online services

Arduino IDE
Arduino IDE
Android Studio
Android Studio

Hand tools and fabrication machines

Laptop
Smartphone Android

Story

Read more

Custom parts and enclosures

PBS

PBS 2

Schematics

PBS

Code

main_code_fix.ino

Arduino
#include <SoftwareSerial.h>



char ssid[] = "Home Sweet Home_plus";
char pass[] = "tidakada";

#define IP "184.106.153.149" //thingspeak.com ip address

String GET = "GET /update?api_key=CWM0UDYOL8RQN6AV&field"; //Write API key
//String READ = "GET /channels/381137/fields/1.json?api_key=AJJERIFP2BNTXEH6&results=2";


SoftwareSerial wifi(11,10);
int lampu = 6;
int hasilSensorLDR;
void setup() {
  pinMode (lampu, OUTPUT);
  Serial.begin(9600);
  wifi.begin(115200);
  //dht.begin();
  
  digitalWrite(lampu, LOW);

  while (!koneksiESP());

  if (!cekKoneksi()) {
    konekWifi;
  }

}

void loop() {
  delay(5000);
   hasilSensorLDR=analogRead(0);
  Serial.print("LDR     : ");
  Serial.print(hasilSensorLDR);
  delay(200);

  if (hasilSensorLDR >= 50 ) {
    digitalWrite (lampu, LOW);
    delay(100);
    Serial.println("");
    lampuMati();
   
    //End Thingspeak
  } else {
   
    digitalWrite (lampu, HIGH);
    Serial.println("");
    lampuNyala();
  }
   
}

activity_main2.xml

Java
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main2"
    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="wecare.d3ifcool.org.monitoringdatalamp.Main2Activity">

    <TextView android:text="@string/count" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:textSize="18sp"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />


</RelativeLayout>

list_item.xml

Java
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:text="Date"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:paddingBottom="2dip"
            android:paddingTop="6dip"
            android:textColor="@color/colorPrimaryDark"
            android:textSize="16sp"
            android:textStyle="bold"
            tools:text="Date"
            />
        <TextView
            android:id="@+id/name"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="2dip"
            android:paddingTop="6dip"
            android:textColor="@color/colorPrimaryDark"
            android:textSize="16sp"
            android:textStyle="bold"
            tools:text="Date"
            />

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:text="Entry Id"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:paddingBottom="2dip"
            android:textColor="@color/colorAccent"
            tools:text="Entry ID"/>

        <TextView
            android:id="@+id/email"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="2dip"
            android:textColor="@color/colorAccent"
            tools:text="Entry ID"/>
    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:text="LDR"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:textColor="#5d5d5d"
            android:textStyle="bold"
            tools:text="LDR"/>

        <TextView
            android:id="@+id/mobile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#5d5d5d"
            android:textStyle="bold"
            tools:text="LDR"/>

    </LinearLayout>




</LinearLayout>

Procedure.ino

Arduino
bool cekKoneksi() {
  wifi.println ("AT+CWJAP?");
  delay(1000);
  if (wifi.find("No AP")) {
    Serial.println("NO Access Point");
    return false;
  } else if (wifi.find("Error")) {
    Serial.println("Error");
    return false;}
    else {
      Serial.println("wifi connected!!");
      return true;
    }
  }

  void dcWifi() {
    wifi.println("AT+CWQAP");
  }

  bool koneksiESP() {
    Serial.println("Reseting ESP8266");
    wifi.println("AT+RST");
    delay(2000);
    Serial.println("Checking ESP8266");
    wifi.println("AT");
    delay(3000);

    if (wifi.find("OK")) {
      Serial.println("Connected to ESP8266");
      return true;
    }
    Serial.println("Not Connected to ESP8266");
    return false;
  }


  void konekWifi() {
    String cmd = "AT+CWJAP=";
    cmd += "\"";
    cmd += ssid;
    cmd += "\",";
    cmd += "\"";
    cmd += pass;
    cmd += "\"";

    wifi.println(cmd);
    delay(5000);

    if (wifi.find("OK"))
      Serial.println ("Device Connected to wifi");
    else
      Serial.println ("Device Cannot Connected to wifi");
  }

  void lampuMati(){
    //Start ThingSpeak
    String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";

  wifi.println(cmd);
  delay(1000);

  if (wifi.find("Error")) {
    return;
  }
  else{
    Serial.println("AT+CIPSTART Success");
  }
  cmd = GET;
  cmd += "1=";
  cmd += hasilSensorLDR;
  cmd += "\r\n\r\n";
  wifi.print("AT+CIPSEND=");
  wifi.println(cmd.length());
  delay(6000);
  if (wifi.find(">")) {
    wifi.print(cmd);
    Serial.println("Data sent");
     Serial.println("------");
  }
  else {
    Serial.println("AT+CIPSEND Error");
     Serial.println("------");
    return;
  }
   
  }

  void lampuNyala(){
    String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";

  wifi.println(cmd);
  delay(1000);

  if (wifi.find("Error")) {
    return;
  }
  else{
    Serial.println("AT+CIPSTART Success");
  }
  cmd = GET;
  cmd += "&2=";
  cmd += hasilSensorLDR;
  cmd += "\r\n\r\n";
  wifi.print("AT+CIPSEND=");
  wifi.println(cmd.length());
  delay(6000);
  if (wifi.find(">")) {
    wifi.print(cmd);
    Serial.println("Data sent");
     Serial.println("------");
  }
  else {
    Serial.println("AT+CIPSEND Error");
    Serial.println("------");
    return;
  }
}

HttpHandler.java

Java
package wecare.d3ifcool.org.monitoringdatalamp;

/**
 * Created by adeba on 12/10/2017.
 */

import android.util.Log;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

/**
 * Created by Ravi Tamada on 01/09/16.
 * www.androidhive.info
 */
public class HttpHandler {

    private static final String TAG = HttpHandler.class.getSimpleName();

    public HttpHandler() {
    }

    public String makeServiceCall(String reqUrl) {
        String response = null;
        try {
            URL url = new URL(reqUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            // read the response
            InputStream in = new BufferedInputStream(conn.getInputStream());
            response = convertStreamToString(in);
        } catch (MalformedURLException e) {
            Log.e(TAG, "MalformedURLException: " + e.getMessage());
        } catch (ProtocolException e) {
            Log.e(TAG, "ProtocolException: " + e.getMessage());
        } catch (IOException e) {
            Log.e(TAG, "IOException: " + e.getMessage());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
        return response;
    }

    private String convertStreamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line).append('\n');
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
}

LampMatiActivity.java

Java
package wecare.d3ifcool.org.monitoringdatalamp;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class LampMatiActivity extends AppCompatActivity {

    private String TAG = LampMatiActivity.class.getSimpleName();

    private ProgressDialog pDialog;
    private ListView lv;

    // URL to get contacts JSON
    private static String url = "https://thingspeak.com/channels/381137/field/1.json";

    ArrayList<HashMap<String, String>> dataList;


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
        case R.id.add:
            Intent intent = getIntent();
            overridePendingTransition(0, 0);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            finish();
            overridePendingTransition(0, 0);
            startActivity(intent);
            this.finish(); //
            return(true);
    }
        return(super.onOptionsItemSelected(item));
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lampu_mati);
        dataList = new ArrayList<>();

        lv = (ListView) findViewById(R.id.list);
        new GetContacts().execute();
    }
    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(LampMatiActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    JSONArray feeds = jsonObj.getJSONArray("feeds");

                    // looping through All Contacts
                    for (int i = 0; i < feeds.length(); i++) {
                        JSONObject c = feeds.getJSONObject(i);

                        String created_at = c.getString("created_at");
                        String entry_id = c.getString("entry_id");
                        String field1 = c.getString("field1");
                      /*  String address = c.getString("address");
                        String gender = c.getString("gender");

                        // Phone node is JSON Object
                        JSONObject phone = c.getJSONObject("phone");
                        String mobile = phone.getString("mobile");
                        String home = phone.getString("home");
                        String office = phone.getString("office");*/

                        // tmp hash map for single contact
                        HashMap<String, String> contact = new HashMap<>();

                        // adding each child node to HashMap key => value
                        contact.put("created_at", created_at);
                        contact.put("entry_id", entry_id);
                        contact.put("field1", field1);
                       // contact.put("mobile", mobile);

                        // adding contact to contact list
                        dataList.add(contact);
                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });

                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });

            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    LampMatiActivity.this, dataList,
                    R.layout.list_item, new String[]{"created_at", "entry_id",
                    "field1"}, new int[]{R.id.name,
                    R.id.email, R.id.mobile});

            lv.setAdapter(adapter);
        }

    }
}

LampNyalaActivity.java

Java
package wecare.d3ifcool.org.monitoringdatalamp;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
public class LampNyalaActivity extends AppCompatActivity {
    private String TAG = LampMatiActivity.class.getSimpleName();

    private ProgressDialog pDialog;
    private ListView lv;

    // URL to get contacts JSON
    private static String url = "https://thingspeak.com/channels/381137/field/2.json";

    ArrayList<HashMap<String, String>> dataList;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
        case R.id.add:
            Intent intent = getIntent();
            overridePendingTransition(0, 0);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            finish();
            overridePendingTransition(0, 0);
            startActivity(intent);
            this.finish(); //
            return(true);
    }
        return(super.onOptionsItemSelected(item));
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lampu_nyala);
        dataList = new ArrayList<>();

        lv = (ListView) findViewById(R.id.list);
        new LampNyalaActivity.GetContacts().execute();
    }
    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(LampNyalaActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    JSONArray feeds = jsonObj.getJSONArray("feeds");

                    // looping through All Contacts
                    for (int i = 0; i < feeds.length(); i++) {
                        JSONObject c = feeds.getJSONObject(i);

                        String created_at = c.getString("created_at");
                        String entry_id = c.getString("entry_id");
                        String field2 = c.getString("field2");
                      /*  String address = c.getString("address");
                        String gender = c.getString("gender");

                        // Phone node is JSON Object
                        JSONObject phone = c.getJSONObject("phone");
                        String mobile = phone.getString("mobile");
                        String home = phone.getString("home");
                        String office = phone.getString("office");*/

                        // tmp hash map for single contact
                        HashMap<String, String> contact = new HashMap<>();

                        // adding each child node to HashMap key => value
                        contact.put("created_at", created_at);
                        contact.put("entry_id", entry_id);
                        contact.put("field2", field2);
                        // contact.put("mobile", mobile);

                        // adding contact to contact list
                        dataList.add(contact);
                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });

                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });

            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    LampNyalaActivity.this, dataList,
                    R.layout.list_item, new String[]{"created_at", "entry_id",
                    "field2"}, new int[]{R.id.name,
                    R.id.email, R.id.mobile});

            lv.setAdapter(adapter);
        }

    }
}

MainActivity.java

Java
package wecare.d3ifcool.org.monitoringdatalamp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void nyala(View view) {
        Intent intent = new Intent(MainActivity.this,LampNyalaActivity.class);
        startActivity(intent);
    }

    public void mati(View view) {
        Intent intent = new Intent(MainActivity.this,LampMatiActivity.class);
        startActivity(intent);
    }
}

activity_lampu_mati.xml

Java
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    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="wecare.d3ifcool.org.monitoringdatalamp.LampMatiActivity">

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

activity_lampu_nyala.xml

Java
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_lamp_off"
    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="wecare.d3ifcool.org.monitoringdatalamp.LampNyalaActivity">
    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

activity_main.xml

Java
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="wecare.d3ifcool.org.monitoringdatalamp.MainActivity"
    android:background="@drawable/background">


    <Button
        android:background="@drawable/nyala"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="196dp"
        android:id="@+id/button"
        android:onClick="nyala"/>

    <Button
        android:background="@drawable/mati"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_alignTop="@+id/button"
        android:layout_alignLeft="@+id/button"
        android:layout_alignStart="@+id/button"
        android:layout_marginTop="78dp"
        android:id="@+id/button2"
        android:onClick="mati"/>
</RelativeLayout>

Credits

Muhammad Novrianda
1 project • 0 followers
Adebayus
1 project • 0 followers
Hentina awalia
1 project • 0 followers
🙏🙏🙏🙏

Comments