INPUT SOURCE -SOLAR PANEL (MAXIMUM OPEN LOOP VOLTAGE =20V)
OUTPUT LOAD-- BATTERY OF 12V
PROGRAM
int c=0;int pwmpin=10,a;
int p=50;
int power,pp,cp;
#include <LiquidCrystal.h>
LiquidCrystal lcd(3, 4, 5, 6, 7, 8);//LCD RS-3,En-4,D4-5,D5- 6,D6-7,D7-8
int x,y;
void setup()
{
x= analogRead(A0);
delay(1);
setPwmFrequency(pwmpin,1);
analogWrite(pwmpin,p);
lcdstart();
Serial.begin(9600);
delay(100);
}
void loop()
{
int y=analogRead(5);
Serial.println(y);
delay(1);
int i = (analogRead(A0)-x);
delay(1);
pp=y*i;
//
if(y>205)
{
p=p-1;analogWrite(pwmpin,p);delay(30);
Serial.println("hhhh");
}
if(y<192)
{
Serial.println("less");
p=p+1;if(p>220)p=220;
analogWrite(pwmpin,p);
delay(30);
int cv=analogRead(5);
delay(1);
int i = (analogRead(A0)-x);
delay(1);
cp=cv*i;
if(cp<pp)
{
p=p-2; if(p<0)p=0;analogWrite(pwmpin,p);
delay(30);
}
}
c++;
if(c>20)
{
c=0;
int i = (analogRead(A0)-x)*36;//*12.56=45//0.045
delay(1);if(i<0)i=0;
float v = y;
v=v/13;
float w=(i*v)/1000;
//delay(100);
lcd.clear();
lcd.setCursor(0, 0); lcd.print(i); lcd.print("mA");//Serial.println(w);
lcd.setCursor(8, 0); lcd.print(v); lcd.print("v");// Print a message to the LCD.
lcd.setCursor(0, 1); lcd.print(w); lcd.print("W");// Print a message to the LCD.
c=0;
}
}
void lcdstart(void)
{
lcd.begin(16, 2);// set up the LCD's number of columns and rows:
lcd.setCursor(0, 0);
lcd.print("CUK converter");// Print a message to the LCD.
//delay(500);
//lcd.clear();
}
void setPwmFrequency(int pin, int divisor) {
byte mode;
if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
switch(divisor) {
case 1: mode = 0x01; break;
case 8: mode = 0x02; break;
case 64: mode = 0x03; break;
case 256: mode = 0x04; break;
case 1024: mode = 0x05; break;
default: return;
}
if(pin == 5 || pin == 6) {
TCCR0B = TCCR0B & 0b11111000 | mode;
} else {
TCCR1B = TCCR1B & 0b11111000 | mode;
}
} else if(pin == 3 || pin == 11) {
switch(divisor) {
case 1: mode = 0x01; break;
case 8: mode = 0x02; break;
case 32: mode = 0x03; break;
case 64: mode = 0x04; break;
case 128: mode = 0x05; break;
case 256: mode = 0x06; break;
case 1024: mode = 0x7; break;
default: return;
}
TCCR2B = TCCR2B & 0b11111000 | mode;
}
}
/**
* Divides a given PWM pin frequency by a divisor.
*
* The resulting frequency is equal to the base frequency divided by
* the given divisor:
* - Base frequencies:
* o The base frequency for pins 3, 9, 10, and 11 is 31250 Hz.
* o The base frequency for pins 5 and 6 is 62500 Hz.
* - Divisors:
* o The divisors available on pins 5, 6, 9 and 10 are: 1, 8, 64,
* 256, and 1024.
* o The divisors available on pins 3 and 11 are: 1, 8, 32, 64,
* 128, 256, and 1024.
*
* PWM frequencies are tied together in pairs of pins. If one in a
* pair is changed, the other is also changed to match:
* - Pins 5 and 6 are paired on timer0
* - Pins 9 and 10 are paired on timer1
* - Pins 3 and 11 are paired on timer2
*
* Note that this function will have side effects on anything else
* that uses timers:
* - Changes on pins 3, 5, 6, or 11 may cause the delay() and
* millis() functions to stop working. Other timing-related
* functions may also be affected.
* - Changes on pins 9 or 10 will cause the Servo library to function
* incorrectly.
*
* Thanks to macegr of the Arduino forums for his documentation of the
* PWM frequency divisors. His post can be viewed at:
* http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235060559/0#4
*
*/