This is my TPJ project that controls the SLA battery charging cycle with 2W 12V Solar Panel and provides real-time data for user via LCD screen and Bluetooth

Dependencies:   N5110 Terminal mbed

Automated Solar Power Harvesting System

• Controls the charging and discharging operation of power bank with solar panel as well as house hold load and informs the user via Bluetooth and Internet of Things (IoT)

• Operated by FRDM-K64F: Kinetis Development Board that has ARM Cortes-M4 processor

• Programed with Mbed online C/C++ IDE.

/media/uploads/Ozmos/whatsapp_image_2017-06-11_at_5.13.53_pm.jpeg

/media/uploads/Ozmos/alone.jpeg

Revision:
1:ed2bd7349828
Parent:
0:aa0900f930e8
--- a/gate1.cpp	Thu Apr 06 03:40:54 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,251 +0,0 @@
-#include"mbed.h"
-#include "Terminal.h"
-#include "N5110.h"
-#include "string"
-
-/*********************************Pin decleration*************/
-Serial pc(USBTX, USBRX);
-Serial blue(PTC15,PTC14); 
-AnalogIn solar_voltage(A0);
-AnalogIn battery_voltage(A1);
-AnalogIn load_current(A2);
-DigitalOut solar_gate(D5);
-DigitalOut load_gate(D4);
-DigitalIn  pushBtnLeft(D3);
-DigitalIn  pushBtnRight(D2);
-DigitalOut blueLed(D0);
-/*******************************************************************/
-using std::string;
-/****************************Nokia5110 Pin Decleration*********/
- //SCE,RST,D/C,MOSI,SCLK,LED
-N5110 lcd(PTA0,PTC2,PTC4,PTD2,PTD1,PTC3);
-/*****************************************************************/      
-#define solargate 
-#define refVolt 3300
-float solarVoltage;
-unsigned char sGate = 'A';
-unsigned char bGate = 'B';
-
- string gateStat= "LR255G0B0"; // INTIALLY IT IS RED, GREEN IS LR0G255B0
-float batteryVoltage;
-/********************************************************Function Prototypes************/
-
-float fnc_solarPanel(void);
-bool fnc_chargingstat(float i);
-float fnc_batteryVolt(void);
-bool fnc_loadstat(float i);
-float fnc_load_current(void);
-
-/************************************************************M A I N************************/
-int main(){
-bool loadStatus, chargingStatus,screenOne,screenTwo;
- solarVoltage = 0.0;
- batteryVoltage = 0.0;
-float loadCurrent = 0.0;
-float usagePower = 0.0;
-float powerLeftinW = 0.0;
-int powerLeftinH = 0.0;
-char outputs[10];//it is used for conversion from solar volt (float) to char in order to print as string. 
-char outputb[10];//it is used for conversion from battery charge(float) to char in order to print as string.
-char outputc[10];//it is used for conversion from current charge(float) to char in order to print as string. 
-char blueInput;
-int left, right;
-lcd.init();
-lcd.normalMode();
-lcd.setBrightness(1.0); 
-
-loadStatus  = false;
-chargingStatus = false;
-screenOne = true;
-screenTwo = false;
-right = 1;
-left = 0;
-blueLed = 0;
-    while(1){
-       
-       if (blue.readable()) {
-            blueLed = 1;
-           
-            blueInput = blue.getc();
-           switch(blueInput){
-               case 'B' : bGate = 'B'; break;
-               case 'b' : bGate = 'b'; break;
-               case 'A': sGate = 'A';break;
-               case 'a' : sGate = 'a'; break;
-               
-               }}
-        
-
-            
-        
-        
-        
-right = pushBtnRight.read();
-left = pushBtnLeft.read();
-if(right){screenOne = false; screenTwo = true; }
-if(left){screenOne=true;screenTwo=false;}
-if(screenOne)
-{
-
-
-lcd.clear();
-solarVoltage=fnc_solarPanel();//solar voltge 
-            sprintf(outputs,"SolarV: %.2fV",solarVoltage); 
-            lcd.printString(outputs,0,0);
-    //lcd.refresh();
-    blue.printf("*S%s*",outputs);
-   
-
-chargingStatus = fnc_chargingstat(solarVoltage); // return true if volt bigger than 6V else false and sets the gate
-    if (chargingStatus){lcd.printString("Charging: ON ",0,1);/*lcd.refresh();*/blue.printf("*LR0G255B0*");}
-        else {lcd.printString("Charging: OFF",0,1);blue.printf("*LR255G0B0*");}
-     /*lcd.refresh();*/
-batteryVoltage = fnc_batteryVolt(); // return battery volt as float
-            sprintf(outputb,"Battery: %.2fV",batteryVoltage); /*lcd.refresh();*/
-            lcd.printString(outputb,0,2);
-  /*lcd.refresh();*/    
-  blue.printf("*B%s*",outputb);  
-
-loadStatus = fnc_loadstat(batteryVoltage); // return true if volt higger than 6v else fals end sets the gate
-    if (loadStatus){lcd.printString("Status: ON  ",0,3);/*lcd.refresh();*/blue.printf("*MR0G255B0*");}
-        else {lcd.printString("Status: OFF",0,3);blue.printf("*MR255G0B0*");}
-/*lcd.refresh();*/
-fnc_load_current(); // only return current as float and power calculations are required 
-lcd.printString("Power Usage =>",0,5);
-    lcd.refresh();
-    fnc_load_current();
-loadCurrent = fnc_load_current();
-      sprintf(outputc,"Load:%.2fmA",loadCurrent); 
-            
-            blue.printf("*E%s*",outputc);
-      usagePower = loadCurrent * batteryVoltage;
-      
-      sprintf(outputc,"L-Power:%.2fmW",usagePower); 
-           
-            blue.printf("*I%s*",outputc);
-      powerLeftinW = 24 - usagePower;
-      if(batteryVoltage <= 5) powerLeftinW=0.0;
-      sprintf(outputc,"B-Power:%.1fkW",powerLeftinW);
-      blue.printf("*I%s*",outputc);
-            
-       powerLeftinH = 24 / usagePower;
-       if(batteryVoltage <= 5) powerLeftinH=0.0;
-       sprintf(outputc,"B-Hour:%dh", powerLeftinH); 
-           
-            blue.printf("*N%s*",outputc);
-       
-    wait_ms(500);
-    }//if screenone
-    
-    if(screenTwo)
-    { 
-    lcd.clear();
-   
-solarVoltage=fnc_solarPanel();//solar voltge 
-            sprintf(outputs,"SolarV: %.2fV",solarVoltage); 
-            
-    blue.printf("*S%s*",outputs);
-   
-
-chargingStatus = fnc_chargingstat(solarVoltage); // return true if volt bigger than 6V else false and sets the gate
-    if (chargingStatus){blue.printf("*LR0G255B0*");}
-        else {blue.printf("*LR255G0B0*");}
-    
-batteryVoltage = fnc_batteryVolt(); // return battery volt as float
-            sprintf(outputb,"Battery: %.2fV",batteryVoltage); 
-         
-      
-  blue.printf("*B%s*",outputb);  
-
-loadStatus = fnc_loadstat(batteryVoltage); // return true if volt higger than 6v else fals end sets the gate
-    if (loadStatus){blue.printf("*MR0G255B0*");}
-        else {blue.printf("*MR255G0B0*");}
-
-fnc_load_current(); // only return current as float and power calculations are required 
-//*******************************
-
-      loadCurrent = fnc_load_current();
-      sprintf(outputc,"Load:%.2fmA",loadCurrent); /*lcd.refresh();*/
-            lcd.printString(outputc,0,0);/*lcd.refresh();*/
-            blue.printf("*E%s*",outputc);
-      usagePower = loadCurrent * batteryVoltage;
-     
-      sprintf(outputc,"L-Power:%.2fmW",usagePower); /*lcd.refresh();*/
-            lcd.printString(outputc,0,1);/*lcd.refresh();*/
-            blue.printf("*I%s*",outputc);
-      powerLeftinW = 24 - usagePower;
-       if(batteryVoltage <= 5) powerLeftinW=0.0;
-      sprintf(outputc,"B-Power:%.1fkW",powerLeftinW); /*lcd.refresh();*/
-      
-      blue.printf("*I%s*",outputc);
-        lcd.printString(outputc,0,2);/*lcd.refresh();*/
-       powerLeftinH = 24 / usagePower;
-        if(batteryVoltage <= 5) powerLeftinH=0.0;
-       sprintf(outputc,"B-Hour:%dh", powerLeftinH); /*lcd.refresh();*/
-            lcd.printString(outputc,0,3);/*lcd.refresh();*/
-            blue.printf("*N%s*",outputc);
-       lcd.printString("",0,1);/*lcd.refresh();*/
-       lcd.printString("<= Charger",0,5);
-       lcd.refresh();
-     wait_ms(500);
-        }// if screentwo
-
-    }
- }
- /******************************************E N D   M A I N*************************/
-
-
-
- /******************************************Function Definations********************/
- 
- float fnc_solarPanel(void)//Solar Panel Voltage at A0 in -------------------------------------------
- {
-         float solarVolt = ((solar_voltage.read() * (refVolt/1000.0))*2.63);    
-         return solarVolt;  
- }
-   //-------------------------------------------------------------------------------------------------------------
-     
-     
- bool fnc_chargingstat(float i)//-------------------------------------------------------------------------
- {
-        if (i<6|| sGate =='a' ) 
-        {
-            solar_gate = 0; 
-            gateStat = "LR255GOBO";
-         //   blue.printf("*OR255G0B0*");
-        
-        return false;  
-        }
-        else {
-          // blue.printf("*OR0G255B0*");
-
-            gateStat= "LROG255BO";
-         solar_gate = 1; return true;}
-         
- }
-      //-------------------------------------------------------------------------------------------------------------
- float fnc_batteryVolt(void)
- {
-        batteryVoltage = ((battery_voltage.read()*(refVolt/1000.0))*3.7789);
-        return batteryVoltage;  
- }
-       //--------------------------------------------------------------------------------------------------
-
- bool fnc_loadstat(float i)
- {  //bool stat; 
-         
-        if (i <6 ){ blue.printf("*OR255G0B0*");  return false;  }
-        else{  blue.printf("*OR0G255B0*"); return true;} 
- 
-// return stat; 
- }
-    
- //-----------------------------------------------------------------------------------------------------------------------
-    float fnc_load_current(void)
- {                                                
-       float loadcurrent = load_current.read();
-       return loadcurrent; 
- }  
- 
- //--------------------------------------------------------------------------------------------------
- 
\ No newline at end of file