Upload files to "arduino cloud"
This commit is contained in:
commit
65053c42ac
|
@ -0,0 +1,214 @@
|
|||
/*
|
||||
Sketch generated by the Arduino IoT Cloud Thing "Untitled"
|
||||
https://create.arduino.cc/cloud/things/fefef12a-9d1d-4f50-b0a4-8cd6e1d3693f
|
||||
|
||||
Arduino IoT Cloud Variables description
|
||||
|
||||
The following variables are automatically generated and updated when changes are made to the Thing
|
||||
|
||||
float ph;
|
||||
int ldr;
|
||||
int soil;
|
||||
bool relay;
|
||||
bool relay1;
|
||||
|
||||
Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
|
||||
which are called when their values are changed from the Dashboard.
|
||||
These functions are generated with the Thing and added at the end of this sketch.
|
||||
*/
|
||||
|
||||
#include "thingProperties.h"
|
||||
#include <LiquidCrystal_I2C.h>
|
||||
#define SOIL_PIN A0 // Pin untuk sensor SOIL (input)
|
||||
#define relayPin 2 // Pin untuk relay (output soil)
|
||||
#define wet 210
|
||||
#define dry 1023
|
||||
#define LDR_PIN A1 // Pin untuk sensor LDR (input)
|
||||
#define relay1Pin 4 // Pin untuk relay (output)
|
||||
#define dark 1023
|
||||
#define bright 0
|
||||
#define analogInPin A2 //sambungkan kabel hitam (output) ke pin A2
|
||||
|
||||
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
||||
|
||||
// Deklarasi fungsi
|
||||
|
||||
void onRelayChange();
|
||||
void onRelay1Change();
|
||||
void onSoilChange();
|
||||
void onLdrChange();
|
||||
void onPhChange();
|
||||
int sensorValue = 0; //ADC value from sensor
|
||||
float outputValue = 0.0; //pH value after conversion
|
||||
|
||||
void setup() {
|
||||
// Initialize serial and wait for port to open:
|
||||
Serial.begin(9600);
|
||||
lcd.init();
|
||||
lcd.backlight();
|
||||
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
|
||||
delay(1500);
|
||||
|
||||
pinMode(relayPin,OUTPUT);
|
||||
digitalWrite(relayPin,HIGH);
|
||||
|
||||
pinMode(relay1Pin, OUTPUT); // Mengatur pin relay sebagai output
|
||||
digitalWrite(relay1Pin, HIGH);
|
||||
|
||||
// Tampilkan pesan selamat datang
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Selamat Datang");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Project Ikhsan");
|
||||
delay(1000);
|
||||
|
||||
// Defined in thingProperties.h
|
||||
initProperties();
|
||||
|
||||
// Connect to Arduino IoT Cloud
|
||||
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
|
||||
|
||||
/*
|
||||
The following function allows you to obtain more information
|
||||
related to the state of network and IoT Cloud connection and errors
|
||||
the higher number the more granular information you’ll get.
|
||||
The default is 0 (only errors).
|
||||
Maximum is 4
|
||||
*/
|
||||
setDebugMessageLevel(2);
|
||||
ArduinoCloud.printDebugInfo();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
ArduinoCloud.update();
|
||||
// Your code here
|
||||
onRelayChange();
|
||||
onRelay1Change();
|
||||
onSoilChange();
|
||||
onLdrChange();
|
||||
onPhChange();
|
||||
}
|
||||
|
||||
void onSoilChange() {
|
||||
// Baca nilai mentah dari sensor
|
||||
int rawSoil = analogRead(SOIL_PIN);
|
||||
soil = map(rawSoil, dry, wet, 0, 100);
|
||||
|
||||
// Pastikan nilai soil berada dalam rentang yang benar
|
||||
if (soil > 100) soil = 100;
|
||||
if (soil < 0) soil = 0;
|
||||
|
||||
// Penyiraman otomatis jika kelembaban tanah di bawah 20%
|
||||
if (soil <= 50) {
|
||||
digitalWrite(relayPin, HIGH); // Aktifkan relay untuk menyiram tanaman
|
||||
} else {
|
||||
digitalWrite(relayPin, LOW); // Matikan relay setelah penyiraman selesai
|
||||
}
|
||||
|
||||
// Display on serial monitor
|
||||
Serial.print("Raw Soil Value: ");
|
||||
Serial.print(rawSoil);
|
||||
Serial.print(", Soil Moisture: ");
|
||||
Serial.print(soil);
|
||||
Serial.print("%, Relay (Watering): ");
|
||||
Serial.println(digitalRead(relayPin) == HIGH ? "ON" : "OFF");
|
||||
}
|
||||
|
||||
void onRelayChange() {
|
||||
// Add your code here to act upon Relay change
|
||||
if(relay){
|
||||
digitalWrite(relayPin,HIGH); // relayPin ditarik ke HIGH untuk aktif
|
||||
}else{
|
||||
digitalWrite(relayPin,LOW); // relayPin ditarik ke LOW untuk non-aktif
|
||||
}
|
||||
}
|
||||
|
||||
void onLdrChange() {
|
||||
// Baca nilai mentah dari sensor
|
||||
int rawLdr = analogRead(LDR_PIN);
|
||||
ldr = map(rawLdr, dark, bright, 0, 100);
|
||||
|
||||
// Hysteresis thresholds
|
||||
const int thresholdOn = 70;
|
||||
const int thresholdOff = 71;
|
||||
|
||||
if (ldr <= thresholdOn && !relay1) {
|
||||
// Aktifkan relay untuk pencahayaan otomatis
|
||||
relay1 = true;
|
||||
digitalWrite(relay1Pin, HIGH);
|
||||
}
|
||||
else if (ldr >= thresholdOff && relay1) {
|
||||
relay1 = false;
|
||||
digitalWrite(relay1Pin, LOW);
|
||||
}
|
||||
|
||||
// Display on serial monitor
|
||||
Serial.print("Raw LDR Value: ");
|
||||
Serial.print(rawLdr);
|
||||
Serial.print(", LDR: ");
|
||||
Serial.print(ldr);
|
||||
Serial.print("%, Relay (Lighting): ");
|
||||
Serial.println(digitalRead(relay1Pin) == HIGH ? "ON" : "OFF");
|
||||
}
|
||||
|
||||
void onRelay1Change() {
|
||||
// Add your code here to act upon Relay1 change
|
||||
if(relay1){
|
||||
digitalWrite(relay1Pin,HIGH); // relay1Pin ditarik ke LOW untuk aktif
|
||||
}else{
|
||||
digitalWrite(relay1Pin,LOW); // relay1Pin ditarik ke HIGH untuk non-aktif
|
||||
}
|
||||
}
|
||||
|
||||
void onPhChange() {
|
||||
// Baca nilai analog dari sensor pH
|
||||
int sensorValue = analogRead(analogInPin);
|
||||
delay(500);
|
||||
|
||||
// Rumus didapat berdasarkan datasheet
|
||||
float outputValue = (-0.0139 * sensorValue) + 7.7851;
|
||||
|
||||
// Periksa apakah outputValue adalah NaN
|
||||
if (isnan(outputValue)) {
|
||||
Serial.println(F("Error: outputValue is NaN!"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Pastikan outputValue tidak negatif
|
||||
if (outputValue < 0) outputValue = 0;
|
||||
|
||||
// Tampilkan nilai outputValue
|
||||
Serial.print(F("pH Value: "));
|
||||
Serial.println(outputValue);
|
||||
|
||||
// Tampilkan nilai RAW/ADC soil dan LDR secara bergantian pada LCD
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Soil RAW: ");
|
||||
lcd.print(analogRead(SOIL_PIN));
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Soil: ");
|
||||
lcd.print(soil);
|
||||
lcd.print("%");
|
||||
delay(2000);
|
||||
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("LDR RAW: ");
|
||||
lcd.print(analogRead(LDR_PIN));
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("LDR: ");
|
||||
lcd.print(ldr);
|
||||
lcd.print("%");
|
||||
delay(2000);
|
||||
|
||||
// Tampilkan nilai pH
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("ADC: ");
|
||||
lcd.print(sensorValue);
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("pH: ");
|
||||
lcd.print(outputValue);
|
||||
delay(2000);
|
||||
}
|
Loading…
Reference in New Issue