[csharp] scs

Viewer

  1. /*spray disinfektan dan UV otomatis yang akan menyala ketika barang masuk ke box khusus 
  2. yang di lengkapi suhu optimation di 30 derajat celcius tampilkan kondisi di OLED*/
  3. #include <Wire.h>
  4. #include <Adafruit_SSD1306.h>
  5. #include <Adafruit_GFX.h>
  6. #include <DHT.h>
  7. #include <Servo.h>
  8.  
  9. // Definisikan parameter layar OLED
  10. #define LEBAR_LAYAR 128 // Ukuran OLED
  11. #define TINGGI_LAYAR 64
  12. #define OLED_RESET -1
  13. #define ALAMAT_I2C_OLED 0x3C
  14. Adafruit_SSD1306 display(LEBAR_LAYAR, TINGGI_LAYAR, &Wire, OLED_RESET);
  15.  
  16. #define PIN_DHT 6
  17. #define JENIS_DHT DHT22
  18. DHT dht(PIN_DHT, JENIS_DHT);
  19.  
  20. #define PIN_LED A3
  21. #define PIN_PIR 5
  22. #define PIN_SERVO 4
  23.  
  24. Servo servo;
  25.  
  26. bool gerakanTerakhirTerdeteksi = false;
  27. unsigned long ledStartTime = 0;
  28. const unsigned long ledDuration = 5000; // Durasi nyala LED
  29.  
  30. void setup() {
  31.   Serial.begin(9600); // Mengatur komunikasi Serial
  32.   pinMode(PIN_LED, OUTPUT); // Pin mode
  33.   pinMode(PIN_PIR, INPUT);
  34.   digitalWrite(PIN_LED, LOW);
  35.  
  36.   servo.attach(PIN_SERVO);
  37.   servo.write(0);
  38.  
  39.   Wire.begin();
  40.   if (!display.begin(SSD1306_SWITCHCAPVCC, ALAMAT_I2C_OLED)) { // Memulai komunikasi I2C
  41.     Serial.println(F("Gagal inisialisasi SSD1306"));
  42.     for (;;) ;
  43.   }
  44.  
  45.   display.clearDisplay(); // Mempersiapkan OLED
  46.   dht.begin(); // Mempersiapkan sensor
  47. }
  48.  
  49. void loop() {
  50.   float suhu = dht.readTemperature(); // Membaca suhu
  51.   bool gerakanTerdeteksi = digitalRead(PIN_PIR); // Mendeteksi gerakan
  52.  
  53.   Serial.print(F("Suhu: ")); // Menampilkan informasi suhu 
  54.   Serial.println(suhu); 
  55.   Serial.print(F("Gerakan Terdeteksi: ")); // Status gerakan pada serial monitor.
  56.   Serial.println(gerakanTerdeteksi);
  57.  
  58.   perbaruiDisplay(suhu, gerakanTerdeteksi);
  59.  
  60.   if (gerakanTerdeteksi != gerakanTerakhirTerdeteksi) { // Mengaktifkan jika ada gerakan
  61.     if (gerakanTerdeteksi) {
  62.       aktifkanSprayDanUV(suhu);
  63.     }
  64.     gerakanTerakhirTerdeteksi = gerakanTerdeteksi;
  65.   }
  66.  
  67.   // Periksa apakah sudah waktunya mematikan LED
  68.   if (millis() - ledStartTime >= ledDuration) {
  69.     digitalWrite(PIN_LED, LOW);
  70.   }
  71.  
  72.   delay(50);
  73. }
  74.  
  75. void perbaruiDisplay(float suhu, bool gerakanTerdeteksi) {
  76.   display.clearDisplay(); // Membersihkan layar OLED 
  77.   display.setTextSize(1);
  78.   display.setTextColor(SSD1306_WHITE);
  79.  
  80.   if (isnan(suhu)) { // Menampilkan informasi suhu
  81.     display.setCursor(00);
  82.     display.print(F("Sensor Error"));
  83.   } else {
  84.     display.setCursor(00);
  85.     display.print(F("Suhu: "));
  86.     display.print(suhu);
  87.     display.print(F(" C"));
  88.     display.setCursor(016);
  89.     display.print(suhu >= 30.0 ? F("Suhu Tinggi") : F("Suhu Rendah"));
  90.   }
  91.  
  92.   display.setCursor(032); // Status spray
  93.   display.print(F("Spray: "));
  94.   display.print(gerakanTerdeteksi && (suhu >= 29.5 && suhu <= 30.5) ? F("ON") : F("OFF"));
  95.  
  96.   display.setCursor(048); // Status UV
  97.   display.print(F("UV: "));
  98.   display.print(gerakanTerdeteksi ? F("ON") : F("OFF"));
  99.  
  100.   display.display();
  101. }
  102.  
  103. void aktifkanSprayDanUV(float suhu) {
  104.   digitalWrite(PIN_LED, HIGH); // Mengaktifkan LED 
  105.   ledStartTime = millis(); // Catat waktu saat LED dinyalakan
  106.   display.setCursor(032);
  107.   display.print(F("Spray: ")); // Menampilkan status spray 
  108.   display.print(suhu >= 29.5 && suhu <= 30.5 ? F("ON") : F("OFF"));
  109.   display.setCursor(048); // Menampilkan UV pada layar OLED
  110.   display.print(F("UV: ON"));
  111.   display.display();
  112.  
  113.   if (suhu >= 29.5 && suhu <= 30.5) {
  114.     for (int i = 0; i < 3; i++) {
  115.       servo.write(90);
  116.       delay(500); // Menggerakkan servo ke posisi 90 derajat dan menunggu setengah detik
  117.       servo.write(0);
  118.       delay(500); // Mengembalikan servo ke posisi 0 derajat dan menunggu setengah detik
  119.     }
  120.   }
  121. }
  122.  

Editor

You can edit this paste and save as new:


File Description
  • scs
  • Paste Code
  • 29 Jun-2024
  • 3.62 Kb
You can Share it: