hello guys. I really have a problem with a project i buid right now.i made a dual axis solar tracker using photoresistors that is working fine( i post the diagram and the code at the end).When i finished this project i tryed to improve it adding a solar panel(12V, 4.5W) and a 7segment 3digit display conected to the arduino to do a real time voltmeter and a simple 5V usb charger at the end(using a voltage regulator etc.).So i buid a voltage divider 3:1 to take the voltage from the solar panel and messuring form analog pin A5 and print it at the 3digit display.
For the solar tracking system i use adafruit motor shield, 2 stepper motors 4x10Kohm resistors and 4 photoresistors(LDR) and it is conected as the following image except tha i use steper motors directly connected to the shield and not servos Imgur: The magic of the Internet.
the code is
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_StepperMotor *YMotor = AFMS.getStepper(4075.7728395, 2);
Adafruit_StepperMotor *XMotor = AFMS.getStepper(4075.7728395, 1);
int ph0Read ;
int ph1Read ;
int ALightPct;
int BLightPct ;
int diff1;
int diff2;
int ph2Read ;
int ph3Read ;
int CLightPct ;
int DLightPct ;
void setup() {
Serial.begin(9600);
AFMS.begin();
YMotor->setSpeed(10);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
XMotor->setSpeed(10);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
}
void loop() {
ph0Read = analogRead(A0);
ph1Read = analogRead(A1);
ph2Read = analogRead(A2);
ph3Read = analogRead(A3);
ALightPct = map(ph0Read, 0, 1023, 0, 100);
BLightPct = map(ph1Read, 0, 1023, 0, 100);
CLightPct = map(ph2Read, 0, 1023, 0, 100);
DLightPct = map(ph3Read, 0, 1023, 0, 100);
if (CLightPct < 5 && DLightPct < 5)
{
Serial.println("No sun detected!");
}
else
{
diff1 = CLightPct - DLightPct;
if (abs(diff1) > 1.5)
{
if (diff1 > 0)
{
Serial.println("Turning CCW!");
XMotor->step(25, BACKWARD, INTERLEAVE);
delay(100);
}
else
{
Serial.println("Turning CW!");
XMotor->step(25, FORWARD, INTERLEAVE);
delay(100);
}
}
}
if (ALightPct < 5 && BLightPct < 5)
{
Serial.println("No sun detected!");
}
else
{
diff2 = ALightPct - BLightPct;
if (abs(diff2) > 1.5)
{
if (diff2 > 0)
{
Serial.println("Turning UP!");
YMotor->step(25, BACKWARD, INTERLEAVE);
delay(100);
}
else
{
Serial.println("Turning DOWN!");
YMotor->step(25, FORWARD, INTERLEAVE);
delay(100);
}
}
}
}
For the voltmeter project i use a voltage divider 300 Ohm/ 100 Ohm and the circuit is this Imgur: The magic of the Internet
and the code
int a;
int b;
int c;
int vin;
int input=A5;
int disp1=2;
int disp2=3;
int disp3=4;
int segA=5;
int segB=6;
int segC=7;
int segD=8;
int segE=9;
int segF=10;
int segG=11;
int segDP=12;
const float vpp = 0.0048875855327468;
int voltage;
float digivolt;
void setup()
{
Serial.begin(9600);
pinMode(disp1, OUTPUT);
pinMode(disp2, OUTPUT);
pinMode(disp3, OUTPUT);
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(segDP, OUTPUT);
pinMode(input,INPUT);
}
int display (int a)
{
switch (a)
{
case 0:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
break;
case 1:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 2:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 3:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 4:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 5:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 6:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 7:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 8:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 9:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
}}
void loop()
{
vin=analogRead(input);
digivolt =(vin * vpp)*4;
voltage = (vin * vpp)*4*10;
a = voltage%10;
digitalWrite(disp1,LOW);
digitalWrite(disp2,LOW);
digitalWrite(disp3, HIGH);
digitalWrite(segDP,HIGH);
display(a);
delay(5);
b = voltage/10;
a = b%10;
digitalWrite(disp1,LOW);
digitalWrite(disp2,HIGH);
digitalWrite(disp3, LOW);
digitalWrite(segDP,LOW);
display(a);
delay(5);
c=b/10;
a=c;
digitalWrite(disp1,HIGH);
digitalWrite(disp2,LOW);
digitalWrite(disp3, LOW);
digitalWrite(segDP,HIGH);
display(a);
delay(5);
Serial.println(digivolt);
Serial.println(voltage);
}
the completed circuit is this Imgur: The magic of the Internet
SO HERE IS THE PROBLEM :
I can't run the tracking program if the A5 or GRD of the voltmeter is conected to arduino.
If i load the voltmeter programm it is working fine.But the solar tracking programm works only if i disconect the A5 input from the ''voltmeter'' circuit.If A5 is connected the program doesnt start at all.if i disconect A5 it starts.and if i start the programm with A5 unconnected and while it is runnig i connect A5 it still runs until i give some light at one of the photoresistors and then it freeze.
It seems very complicated i know but if anyone has a solution for me or find what i did wrong please share it with me.That will be very helpfull cause it is my graduation project and it really means a lot.
Thank you