I have 2 ultasonic sensor, Led bar graph, servo motor, arduino and GSM module(sim900d).
My project is working but I NEED HELP about GSM.
The lid of the trash bin moves 90 deg. when ultrasonic sensor detects human presence. The other ultasonic sensor measures the fill level of the trash and it is indicated by the LED bar graph but the GSM codes are not working. If the fill level reaches to 35, the arduino should send message that the trash bin is full.
#include <Servo.h>
#define pingTrig 2
#define pingEcho 3
#define trigPin 4
#define echoPin 5
#define led2 8
#define led3 9
#define led4 10
#define led5 11
#define led6 12
#define led7 13
#include <SIM900.h>
#include <sms.h>
#include <SoftwareSerial.h>
SMSGSM sms;
Servo myservo;
unsigned long sendTimer = 0;
int pos=0;
char recipient[] = "09202638719";
boolean started = true;
void setup() {
// put your setup code here, to run once:
pinMode(pingTrig, OUTPUT);
pinMode(pingEcho, INPUT);
myservo.attach(6);
Serial.begin (9600);
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);
pinMode(led7,OUTPUT);
char Header[160];
Serial.println("GSM Shield Test");
if (gsm.begin(2400)) {
Serial.println("\nGSM Initialization Success\n");
sprintf(Header, "This is ""Smart Trash Bin with GSM Notifier""");
sms.SendSMS(recipient,Header);
Serial.println("Message Sent");
}
else {
Serial.println("\nGSM Initialization Failed");
Serial.println("Check if GSM Shield power supply = 5V 2.6A and");
Serial.println("Network Provider signal integrity is stable");
}
}
void loop() {
double duration1,distance1, duration2,distance2;
digitalWrite(pingTrig,LOW);
delayMicroseconds(2);
digitalWrite(pingTrig,HIGH);
delayMicroseconds(10);
digitalWrite(pingTrig,LOW);
duration1 = pulseIn(pingEcho,HIGH);
distance1 = (duration1/2)/29.1;
digitalWrite(trigPin,LOW);
delayMicroseconds(2);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
duration2 = pulseIn(echoPin,HIGH);
distance2 = (duration2/2)/29.1;
Serial.println(distance1);
if(distance1 < 30 ){
myservo.write(90);
delay(1000);
}else{
myservo.write(0);
}
delay(1000);
if (started) {
if ((millis() - sendTimer) > 1000) {
if (distance2 < 35)
{digitalWrite(led2,HIGH);
sendMessage();
}
else {digitalWrite(led2,LOW);}
if (distance2 < 30)
{digitalWrite(led3,HIGH);}
else {digitalWrite(led3,LOW);}
if (distance2 < 25)
{digitalWrite(led4,HIGH);}
else {digitalWrite(led4,LOW);}
if (distance2 < 20)
{digitalWrite(led5,HIGH);}
else {digitalWrite(led5,LOW);}
if (distance2 < 15)
{digitalWrite(led6,HIGH);}
else {digitalWrite(led6,LOW);}
if (distance2 < 10)
{digitalWrite(led7,HIGH);}
else {digitalWrite(led7,LOW);}
if (distance2 > 35 || distance2 <= 0)
{Serial.println("OUT OF RANGE");}
else {Serial.print(distance2);
Serial.println("cm");}
delay(500);
}
}}
void sendMessage() {
/int integer, decimal;/
char data[160];
// Library cannot handle float/decimal values on-the-fly!
// quickest method is to separate the integer and decimal data before sending
/* integer = tempValue;
// data presented will be up to two decimal places, adjust PRECISION value as needed
tempValue = tempValue * PRECISION;
integer = integer * PRECISION;
decimal = tempValue - integer;
integer = integer / PRECISION;
tempValue = tempValue / PRECISION; */
// compose message here
sprintf(data, "Full garbage"); //get all result above and put to a data variable
if (sms.SendSMS(recipient, data)) {
Serial.println("Message Sent!");
// print out the sensor data as reference to check if sent data is correct
Serial.println("");
sendTimer = millis();
}
else {
Serial.println("GSM is offline");
Serial.println("Check if GSM Shield power supply = 5V 2.6A and");
Serial.println("Network Provider signal integrity is stable");
started = false;
}
}
gsmfull.ino (3.6 KB)