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.
Diff: gate1.cpp
- 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