I just turn off the transistor and entering the Arduino to low power mode using Low POwer library…
#include "LowPower.h"
#include <SoftwareSerial.h>
#include <ArduCAM.h>
#include <Wire.h>
#include <SPI.h>
#include <Servo.h>
//---- DECLARE PIN, VARIABLES, OBJECTS -----
int transistor_cam=2;
int transistor_servo=3;
int transistor_sim=4;
int servo_pin=5;
int SPI_CS = 10;
unsigned long timeprevious = millis();
uint8_t vid = 0, pid = 0;
uint8_t temp = 0;
int reponse = 0;
SoftwareSerial sim800l(7,8);
ArduCAM myCAM(OV5642, SPI_CS);
Servo myservo;
void setup() {
pinMode(transistor_cam,OUTPUT);
pinMode(transistor_servo,OUTPUT);
pinMode(transistor_sim,OUTPUT);
pinMode(SPI_CS,OUTPUT);
digitalWrite(transistor_cam,LOW);
delay(10);
digitalWrite(transistor_sim,LOW);
delay(10);
digitalWrite(transistor_servo,LOW);
delay(10);
//-------- STARTING BUS CONNEXIONS --------
Serial.begin(57600);
sim800l.begin(57600);
Wire.begin(); //For OV5642
SPI.begin();
}
void loop() {
delay(1000);
Serial.println(“Hello World !”);
// --------------- STARTING RELAYS & OPEN CAMERA COVER ------------------ */
Serial.println(“Open Camera Cover”);
/digitalWrite(transistor_servo,HIGH);
delay(10);
myservo.attach(servo_pin);
delay(100);
myservo.write(0);
delay(1000);
myservo.write(90);
delay(1000);
myservo.detach();
digitalWrite(transistor_servo,LOW);
delay(10);/
delay(1000);
Serial.print(“Activating CAM & SIM transistors…”);
delay(10);
digitalWrite(transistor_cam,HIGH);
delay(10);
digitalWrite(transistor_sim,HIGH);
delay(10);
Serial.print(“Activation done.”);
//digitalWrite(relay,LOW);
// --------------- SETUP SIM800l ------------------
Serial.print(“Starting in 5sec “);
delay(5000);
timeprevious = millis();
while(sendATcommand(“AT”,“OK”,1000) != 1 && (millis() - timeprevious) < 10000){
Serial.print(”.”);
delay(1000); //For WakeUp
}
if (sendATcommand(“AT”,“OK”,1000) != 1) {
Serial.println(“Problem. Reboot…”);
return;
}
timeprevious = millis();
while(sendATcommand(“AT”,“OK”,1000) != 1 && (millis() - timeprevious) < 10000){
Serial.print(".");
delay(1000); //For WakeUp
}
Serial.println(sendATcommand(“AT+CSCLK=0”,“OK”,2000));
sendATcommand(“AT+SAPBR=0,1”,“OK”,1000);
updateSerial(“Flushing after Startup…”,5000);
Serial.println(“Sim800 setup for FTP…”);
int rep = 1;
int brk = 0;
String date = “”;
rep=0;
long timeprev = millis();
while (rep==0 && (millis() - timeprev) < 15000){
rep = sendATcommand(“AT+CPIN?”,“OK”,10000);
Serial.println(“retest”);
delay(1000);
}
delay(3000);
Serial.println(sendATcommand(“AT”, “OK”, 1000));
Serial.println(sendATcommand(“ATZ”, “OK”, 1000));
Serial.println(sendATcommand(“ATI”, “OK”, 1000));
Serial.println(sendATcommand(“AT+SAPBR=3,1,CONTYPE,GPRS”, “OK”, 1000));
Serial.println(sendATcommand(“AT+SAPBR=3,1,APN,free”, “OK”, 1000));
delay(1000);
Serial.println(sendATcommand(“AT+SAPBR=1,1”,“OK”, 5000));
delay(2000);
Serial.println(sendATcommand(“AT+CSQ”, “OK”, 1000));
Serial.println(sendATcommand(“AT+FTPCID=1”, “OK”, 1000));
Serial.println(sendATcommand(“AT+FTPSERV=ftp.agrotic.org”, “OK”, 1000));
Serial.println(sendATcommand(“AT+FTPPORT=21”, “OK”, 1000));
Serial.println(sendATcommand(“[email protected]”, “OK”, 1000));
Serial.println(sendATcommand(“AT+FTPPW=SA7an-m@-B!T3”, “OK”, 1000));
Serial.println(sendATcommand(“AT+FTPPUTPATH=/img/”, “OK”, 1000));
delay(2000);
timeprevious = millis();
while (date.indexOf(“2020”) == -1 && (millis() - timeprevious) < 10000){
date=getDate();
delay(1000);
}
if (rep == 1) {rep = sendATcommand(“AT+FTPPUTNAME= dev1_” + date + “.jpg”,“OK”,1000);}
Serial.println(“Sim800 setup finished.”);
updateSerial(“Flushing after Setup…”,5000);
delay(300);
// --------------- SETUP CAMERA ------------------
Serial.println(“Camera setup”);
delay(1000);
timeprevious = millis();
while((millis() - timeprevious) < 10000){
myCAM.write_reg(0x07, 0x80); //Reset the CPLD
delay(1000);
myCAM.write_reg(0x07, 0x00);
delay(1000);
Serial.println(myCAM.read_reg(0x07));
myCAM.write_reg(ARDUCHIP_TEST1, 0x55);
temp = myCAM.read_reg(ARDUCHIP_TEST1);
if(temp != 0x55)
{
Serial.println(F(“SPI interface Error!”));
delay(1000);
continue;
}else{
Serial.println(F(“SPI interface OK.”));
break;
}
}
myCAM.wrSensorReg16_8(0xff, 0x01);
myCAM.rdSensorReg16_8(OV5642_CHIPID_HIGH, &vid);
myCAM.rdSensorReg16_8(OV5642_CHIPID_LOW, &pid);
if((vid != 0x56) || (pid != 0x42)){
Serial.println(F(“Can’t find OV5642 module!”));
delay(1000);
} else{
Serial.println(F(“OV5642 detected.”));
}
myCAM.set_format(JPEG);
myCAM.InitCAM();
myCAM.OV5642_set_JPEG_size(OV5642_320x240);
//myCAM.OV5642_set_JPEG_size(OV5642_640x480);
//myCAM.OV5642_set_JPEG_size(OV5642_1600x1200);
myCAM.write_reg(ARDUCHIP_TIM, VSYNC_LEVEL_MASK); //VSYNC is active HIGH
delay(1000);
// --------------- TAKE PICTURE ------------------
uint32_t length = 0;
int sim_buffer = 1350;
int i = 1;
int delai = 50;
int totalPackages=0;
myCAM.flush_fifo();
myCAM.clear_fifo_flag();
myCAM.start_capture();
Serial.println(F(“start Capture…”));
while(!myCAM.get_bit(ARDUCHIP_TRIG , CAP_DONE_MASK));
delay(1000);
Serial.println(F(“Capture Done!”));
// --------------- GET SIZE OF PICTURE ------------------
length = myCAM.read_fifo_length();
Serial.print(F(“The fifo length is :”));
Serial.println(length, DEC);
if (length >= MAX_FIFO_SIZE) {
Serial.println(F(“Over size.”));
}
if (length == 0 ) //0 kb
{
Serial.println(F(“Size is 0.”));
}
totalPackages = length / sim_buffer ;
//Serial.println("Size of file to send : " + length);
// --------------- SEND IMAGE ------------------
Serial.println("------ SEND IMAGE ------");
myCAM.CS_LOW();
myCAM.set_fifo_burst();
delay(1000);
Serial.println(String(SPI.transfer(0x00)));
Serial.println(String(SPI.transfer(0x00)));
while (sendATcommand(“AT+FTPPUT=1”,“OK”,2000)!=1){
delay(1000);
}
delay(1000);
updateSerial(“Waiting for FTP server…”,10000);
while (length > sim_buffer) {
Serial.println(“Sending " + String(i) + " / " + String(totalPackages) );
if(sendATcommand(“AT+FTPPUT=2,”+ String(sim_buffer),”+FTPPUT: 2",3000)){
delay(10);
for (int j=0; j<sim_buffer; j++){
sim800l.write(SPI.transfer(0x00));
}
length -= sim_buffer;
i++;
updateSerial(“fin : “,200);
Serial.println(”—”);
}
}
sendATcommand(“AT+FTPPUT=2,”+ String(length),"+FTPPUT: 2",5000);
delay(50);
for (int j=0; j<length; j++){
sim800l.write(SPI.transfer(0x00));
}
Serial.println(sendATcommand(“AT+FTPPUT=2,0”,“OK”,1000));
delay(2000);
Serial.println(“Upload finished.”);
Serial.println(sendATcommand(“AT+SAPBR=0,1”,“OK”,2000));
delay(2000);
Serial.println(sendATcommand(“AT+CFUN=0”,“OK”,2000));
Serial.println(sendATcommand(“AT+CSCLK=2”,“OK”,2000));
// --------------- CLOSE CAMERA COVER ------------------ */
delay(1000);
/*
Serial.println(“Close Camera Cover”);
digitalWrite(transistor_servo,HIGH);
delay(10);
myservo.attach(servo_pin);
delay(100);
myservo.write(0);
delay(1000);
digitalWrite(transistor_servo,LOW);
delay(10);*/
//-------- LOW POWER MODE --------
Serial.println(“Good night!”);
delay(10);
digitalWrite(transistor_cam,LOW);
delay(10);
digitalWrite(transistor_sim,LOW);
delay(10);
for (int i = 0; i <= 1; i++) {
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
} //Void loop