fesdv — Arduino Uno simulation

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by nicholas-han7009.

Components

Sketch code

// Arduino Blink Example
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
#include <Servo.h>
#include <SensirionI2cScd4x.h>

#define sensorCahaya A0
#define sensorLembab A1
LiquidCrystal_PCF8574 lcd(0x27);
Servo myServo;
SensirionI2cScd4x scd4x;
int pinServo = 4;
int pinLed = 5;
int pinSprinkler = 6;
int pinMotor = 7;
int pinBuzzer = 8;
int pinPupuk = 9;

//ini di dapat dari tutorial velxio
//start
const uint8_t addrJam = 0x68;

//mengubah hex ke bcd
uint8_t bcd2dec(uint8_t v) 
{ 
  return (v >> 4) * 10 + (v & 0x0F); 
}

//bcd ke angka
uint8_t dec2bcd(uint8_t v) 
{
  return ((v / 10) << 4) | (v % 10); 
}
//selesai


void setup() {
  Wire.begin();
  scd4x.begin(Wire, SCD41_I2C_ADDR_62);
  pinMode(pinLed, OUTPUT);
  pinMode(pinMotor,OUTPUT);
  pinMode(pinSprinkler, OUTPUT);
  pinMode(pinBuzzer, OUTPUT);
  pinMode(pinPupuk, OUTPUT);
  lcd.begin(16,2);
  lcd.setBacklight(255);
  lcd.clear();
  myServo.attach(pinServo);

  //set jam ke jam 7:0:0
  Wire.beginTransmission(addrJam);
  Wire.write(0x00);
  Wire.write(dec2bcd(0));
  Wire.write(dec2bcd(0));
  Wire.write(dec2bcd(7));
  Wire.endTransmission();
}

void loop() {
  bool siap = false;
  bool kebakaran = false;
  uint16_t co2;
  float suhu, kelembapanU; 
  int cahaya = analogRead(sensorCahaya);
  int tanah = analogRead(sensorLembab);

  scd4x.readMeasurement(co2,suhu, kelembapanU);

  Wire.beginTransmission(addrJam);
  Wire.write(0x00);
  Wire.endTransmission();
  Wire.requestFrom(addrJam, (uint8_t)3);
  uint8_t detik = bcd2dec(Wire.read() &  0x7F);
  uint8_t menit = bcd2dec(Wire.read());
  uint8_t jam = bcd2dec(Wire.read() & 0x3F);


  //cek jam untuk menyalakan pupuk
  if(jam == 7 && menit == 0 && detik >= 0 && detik <= 30)
  {
    digitalWrite(pinPupuk, HIGH);
  }
  else
  {
    digitalWrite(pinPupuk, LOW);
  }

  //cek cahaya
  if(cahaya > 30 && suhu <= 32)
  {
    myServo.write(0); //untuk buka
  }
  else
  {
    myServo.write(90); //untuk tutup
  }

  //cek kelembapan tanah
  if(tanah < 400)
  {
    digitalWrite(pinMotor, HIGH);
  }
  else
  {
    digitalWrite(pinMotor, LOW);
  }

  //cek kebakaran
  if(suhu >= 50 && co2 >= 4000)
  {
    kebakaran = true;
  }
  else
  {
    kebakaran = false;
  }

  //jika kebakaran
  if(kebakaran)
  {
    digitalWrite(pinSprinkler, HIGH);
    tone(pinBuzzer, 1000);
    digitalWrite(pinLed, HIGH);
  }
  else
  {
    digitalWrite(pinSprinkler, LOW);
    noTone(pinBuzzer);
    digitalWrite(pinLed, LOW);
  }

  
  display(kebakaran,tanah,cahaya,co2,suhu,kelembapanU, jam, menit, detik);
}


void display(float kebakaran, int tanah, int cahaya, uint16_t Co2, float suhu, float kelembapanU, uint8_t jam, uint8_t menit,uint8_t detik)
{
  if(kebakaran)
  {
    lcd.clear();
    lcd.home();
    lcd.print("Kebakakaran Woi");
    delay(500);
  }
  else if(Co2 >= 2000)
  {
    lcd.clear();
    lcd.home();
    lcd.print("Co2 berlebih");
    lcd.setCursor(0, 1);
    lcd.print(Co2);
    delay(500);
  }
  else
  {
    lcd.clear();
    lcd.home();
    lcd.print("Jam :");
    

More projects by nicholas-han7009