#include <Servo.h>
#include <SoftwareSerial.h>
// Ultrasonic sensor pins
#define uTrig 52
#define uEcho 53
#define uTrig1 48
#define uEcho1 49
#define uTrig2 44
#define uEcho2 45
#define uTrig3 40
#define uEcho3 41
// Relay pin
#define relay 37
// Phone number to send SMS notification to
const String number = "+639192279506";
// SoftwareSerial object for communicating with SIM800 module
SoftwareSerial sim800(11, 10);
// SMS message content
String SMS1 = "System: The Bin1 is Full";
String SMS2 = "System: The Bin2 is Full";
// Variables for storing sensor readings and servo motor position
int read;
int read1;
int read2;
int read3;
double rotate;
// Servo motor objects for controlling bin lids
Servo sMotor1;
Servo sMotor2;
// Setup function - runs once at startup
void setup()
{
Serial.begin(9600);
// Reserve space in memory for string buffer
_buffer.reserve(50);
// Initialize communication with SIM800 module
sim800.begin(115200);
// Set relay pin as output
pinMode(relay, OUTPUT);
// Attach servo motor objects to pins
sMotor1.attach(6);
sMotor2.attach(7);
// Delay for 1 second
delay(1000);
}
// Function for reading ultrasonic distance sensor
long readUltrasonicDistance(int triggerPin, int echoPin)
{
// Set trigger pin to output and send pulse
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// Set echo pin to input and read pulse duration
pinMode(echoPin, INPUT);
long reading = 0.01723 * pulseIn(echoPin, HIGH);
// Delay for 100ms to prevent sensor interference
delay(100);
return reading;
}
// Function for sending SMS message
String SendMessage(String SMS)
{
// Set GSM module to text mode
sim800.println("AT+CMGF=1");
delay(200);
// Set SMS recipient phone number
sim800.println("AT+CMGS=\"" + number + "\"\r");
delay(200);
// Send SMS message content
sim800.println(SMS);
delay(100);
// Send CTRL+Z to terminate message and send
sim800.println((char)26);
delay(200);
}
// Main loop function - runs repeatedly
void loop()
{
// Read sensor values and map to 0-300 range
read = readUltrasonicDistance(uTrig, uEcho);
read = map(read, 2, 335, 0, 300);
read = constrain(read, 0, 300);
read1 = readUltrasonicDistance(uTrig1, uEcho1);
read1 = map(read1, 2, 335, 0, 300);
read1 = constrain(read1, 0, 300);
read2 = readUltrasonicDistance(uTrig2, uEcho2);
read2 = map(read2, 2, 335, 0, 300);
read2 = constrain(read2, 0, 300);
read3 = readUltrasonicDistance(uTrig3, uEcho3);
read3 = map(read3, 2, 335, 0, 300);
read3 = constrain(read3, 0, 300);
Serial.print(read);
Serial.print(read1);
Serial.print(read2);
Serial.println(read3);
delay(15);
if (read >= 50){
sMotor1.write(90);
digitalWrite(relay, HIGH);
delay(1000);
}
else if (read1 >= 50){
sMotor2.write(90);
digitalWrite(relay, HIGH);
delay(1000);
}
else if (read2 >= 50){
SendMessage(SMS1);
delay(1000);
}
else if (read3 >= 50){
SendMessage(SMS2);
delay(1000);
}
else{
sMotor1.write(0);
sMotor2.write(0);
digitalWrite(relay, LOW);
delay(1000);
}
}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
servo1:GND
servo1:V+
servo1:PWM
ultrasonic2:VCC
ultrasonic2:TRIG
ultrasonic2:ECHO
ultrasonic2:GND
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
ultrasonic3:VCC
ultrasonic3:TRIG
ultrasonic3:ECHO
ultrasonic3:GND
led1:A
led1:C
vcc1:VCC
gnd1:GND