Sumber daya eksternal ditambahkan sehingga MG995 dapat bekerja
Dua mekanisme berbeda untuk memperlebar/mengempitkan penutup matahari diuji. Yang dibuang ditampilkan dalam video kedua. Yang digunakan ditampilkan dalam video ketiga.
Sketsa dimodifikasi untuk menggunakan library VarSpeedServo
Kesalahan logika kecil pada salah satu status penutup matahari diperbaiki (terima kasih kepada Gurneet1928)
Anda dapat menemukan V1.0 pada tautan berikut: Model Versi 1.0
VIDEO:
Pembuatan rangkaian
Pembuatan Model Arsitektur
Kode
Kode
KodeC/C++
#include <VarSpeedServo.h>
VarSpeedServo servo;
int easternLight = 0;
int westernLight = 0;
int rainSensed = 0;
int sunshadePosition = 0;
int rainThreshold = 512;
int sunshadeExpanded = 120;
int sunshadeContracted = 60;
int ambientLighting = 0;
int turnOnLightsOn = 150;
int ledIntensity = 0;
int ledPower = 0;
int servoSpeed = 20;
bool debugging = false; // Set ke TRUE untuk mengaktifkan debugging ke Serial Console
void setup() {
pinMode(A4, OUTPUT); // Penerangan interior halte bus
pinMode(A5, OUTPUT); // Lampu jalan
pinMode(A1, INPUT); // Cahaya Barat
pinMode(A2, INPUT); // Cahaya Timur
pinMode(A3, INPUT); // Pin analog sensor hujan
pinMode(2, INPUT); // Pin digital sensor hujan
servo.attach(A0); // Servo
servo.write(sunshadeContracted, servoSpeed, true);
if (debugging){
Serial.begin(9600);
Serial.println("*** DEBUGGING DIMULAI ***");
Serial.println("-------------------------");
}
}
void oya_mydebug(String text, int value = NULL) {
if (debugging){
Serial.print(text);
if (value){
Serial.print(" = ");
Serial.println(value);
} else {
Serial.println(" ");
}
}
}
void expand_collapse(int easternLight, int westernLight) {
if (easternLight <= westernLight) {
oya_mydebug("Matahari terbit");
if (sunshadePosition != sunshadeExpanded) {
servo.write(sunshadeExpanded, servoSpeed, true);
oya_mydebug("Penutup matahari diperlebar");
}
}
if (easternLight > westernLight) {
oya_mydebug("Matahari sedang terbenam");
if (sunshadePosition != sunshadeContracted) {
servo.write(sunshadeContracted, servoSpeed, true);
oya_mydebug("Penutup matahari diempitkan");
}
}
}
void loop() {
easternLight = analogRead(A2);
westernLight = analogRead(A1);
rainSensed = analogRead(A3);
sunshadePosition = servo.read();
ambientLighting = ((easternLight + westernLight) / 2);
oya_mydebug("easternLight", easternLight);
oya_mydebug("westernLight", westernLight);
oya_mydebug("rainSensed", rainSensed);
oya_mydebug("sunshadePosition", sunshadePosition);
oya_mydebug("ambientLighting", ambientLighting);
if (rainSensed < rainThreshold) {
oya_mydebug("Sedang hujan...");
if (sunshadePosition != sunshadeExpanded) {
servo.write(sunshadeExpanded, servoSpeed, true);
oya_mydebug("Penutup matahari diperlebar");
}
} else {
oya_mydebug("Tidak sedang hujan...");
if (ambientLighting <= turnOnLightsOn) {
oya_mydebug("Sedang gelap, menyala lampu");
ledPower = ((turnOnLightsOn - ambientLighting) * 4);
oya_mydebug("ledPower", ledPower);
analogWrite(A5, ledPower);
analogWrite(A4, ledPower);
expand_collapse(easternLight, westernLight);
} else {
oya_mydebug("Banyak sinar matahari, matikan lampu");
analogWrite(A5, 0);
analogWrite(A4, 0);
expand_collapse(easternLight, westernLight);
}
}
if (debugging){
Serial.println("********************");
Serial.println(" ");
delay(5000);
} else {
delay(100);
}
}