Zonnetracker vollop benut

Toon hier Uw afgeronde projecten aan anderen.
Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonnetracker vollop benut

Berichtdoor Gompy » 21 Sep 2019, 20:15

Het schema behorende bij de sketch.
Bijlagen
Solarcollector-klein.jpg
Solarcollector-klein.jpg (39.37 KiB) 13839 keer bekeken

Advertisement

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonnetracker vollop benut

Berichtdoor Gompy » 24 Sep 2019, 15:26

Nog twee wijzigingen gedaan om de dag en nacht stand duidelijker te maken.
Dagstand (aev en aav) wordt nu alleen nog uitgevoerd als deze groter is dan de nachtwaarde (aevn en aavn).
Met deze wijzigingen is het duidelijker voor de sketch wanneer het dag of nacht is.

Code: Alles selecteren
//-------------------------------------------------------
// CHECK DIFFERANGE BETWEEN SENSORS UP AND DOWN FOR ELEVATION
//-------------------------------------------------------
  if ((-1*tolerance > dvv || dvv > tolerance) && (aev >= aevn)) // check difference in top/bottom LIGHT SENSORS is greater than tolerance
{
// CHANGE ELEVATION MOTOR DIRECTION


Code: Alles selecteren
//-------------------------------------------------------
// CHECK DIFFERANGE BETWEEN SENSORS LEFT AND RIGHT FOR AZIMUTH
//-------------------------------------------------------
  if ((-1*tolerance > dvh || dvh > tolerance) && (aav >= aavn)) // Check difference in left and right LIGHT SENSORS is within tolerance range
 {
// CHANGE AZIMUTH MOTOR DIRECTION

Berichten: 45
Geregistreerd: 08 Jan 2020, 17:23

Re: Zonnetracker vollop benut

Berichtdoor RonalT » 18 Jan 2020, 00:43

shooter schreef:...
Ik zou die delay dus gewoon vast zetten op 30 minuten = 30*60*1000 milliseconden en dat dus in een timer en niet met delay.
...


zoals zo velen die hun eerste bericht schrijven ben ik ook nieuw op dit forum. Ook Arduino is nieuw voor mij en ik probeer te leren door (video)lessen te bekijken en instructies te begrijpen. Ook berichten via het forum zijn leerzaam.
Nu stuit ik op dit, bedoel je hiermee dat ik beter

for (a = 0 ; a <= 255; a++) {

dan ' delay (500); ' kan gebruiken?
Of zijn er nog andere mogelijkheden.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Zonnetracker vollop benut

Berichtdoor Koepel » 18 Jan 2020, 14:13

Hallo RonalT, welkom op dit forum.
Kun je een nieuw onderwerp aanmaken ?
Als je een probleem met je sketch hebt, dan graag de hele sketch laten zien.
Heb je een vraag die met een ander onderwerp te maken heeft, dan kun je een link er naar toe geven.

Boven het tekstveld zie je een knop "Code" voor code-tags. Als je daar je sketch tussen zet dan ziet het er netjes uit.
Er is ook een knop "URL" om een link in te voeren.

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonnetracker vollop benut

Berichtdoor Gompy » 27 Aug 2020, 18:31

Het ergste is gebeurd......een jandoedel heeft enige dirs gewist, oa de Arduino dir met projecten, en nu ben ik een groot deel van mijn sketch kwijt.
Is er een mogelijk om de sketch, al dan niet in HEX, uit de Arduino te halen ?
De sketch welke nu in de Arduino zit werkt perfect en kan gedupliceerd worden, maar dan moet ik hem wel hebben natuurlijk.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Zonnetracker vollop benut

Berichtdoor shooter » 27 Aug 2020, 18:47

nee terug halen uit de arduino is vrijwel onmogelijk, maar met een beetje geluk kun je de code wel hier uit het forum vissen, want je hebt meermalen de code hier neergezet, en er zijn zat mensen die het op hun eigen computer hebben staan. als je erbij vertelt hoe de file heet dan zal ik eens kijken of ik het nog heb.
cpp code
/* SOLARTRACKER
*
* IN AND OUTPUTS Arduino (nano)
* A0 = tr - input LDR top right
* A1 = br - input LDR bototm right
* A2 = tl - input LDR top left
* A3 = bl - input LDR bottom left
* A4 = sda LCD 4x20
* A5 = sdc LCD 4x20
* A6 = input potentiometer 10k for tolerange between all LDR's
* A7 = input current module ACS712
*
* D9 = in1 - output L298N - motor left/right
* D10 = in2 - output L298N - motor left/right
* D11 = in3 - output L298N -motor up/down
* D12 = in4 - output L298N - motor up/down
*
* SHORTCUTS IN SKETCH
* avt = average top LDR's tl and tr
* avb = average bottom LDR's bl and br
* avl = average left LDR's tl and bl
* avr = average right LDR's tr and br
* dv = differenge vertical LDR's avt and avb
* dh = difference horizontal LDR's avl and avr
* av = average value azimute
* ev = average value elevation
* aavn = average azimuth value night
* aevn = average elevation value night
*/

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

//-------------------------------------------------------
// SET I2C ADDRESS FOR LCD
//-------------------------------------------------------
LiquidCrystal_I2C lcd(0x27,20,4); // LCD address

//-------------------------------------------------------
// MOTOR AZIMUTH
//-------------------------------------------------------
int in1 = 9; // D9 output to in1 L298N module
int in2 = 10; // D10 output to in2 L298N module

//-------------------------------------------------------
// MOTOR ELEVATION
//-------------------------------------------------------
int in3 = 11; // D11 output to in3 L298N module
int in4 = 12; // D12 output to in4 L298N module

//-------------------------------------------------------
// START LOOP ACTIVE RUNTIME
//-------------------------------------------------------
unsigned long currentMillis; // Current time
unsigned long previousMillis; // Past time
unsigned long interval = 180000; // Startup runtime motors for position 3*1000mS*60S=3min
int enableState = HIGH; // Start with ON

//-------------------------------------------------------
//START PRINTTIME
//-------------------------------------------------------
unsigned long previousMillisPrint; // Serial print
const unsigned long intervalPrint = 10000UL; // Serial print interval 10 seconds

//-------------------------------------------------------
// CURRENT SENSOR ACS712
//-------------------------------------------------------

const int currentPin = A7;
int sensitivity = 100; // 185=5A 100=20A 66=30A
int adcValue= 0;
int offsetVoltage = 2500; // For DC charge and discharge
double adcVoltage = 0;
double currentValue = 0;

void setup()
{
Serial.begin(115200); // Initialize the serial port
lcd.begin(); // Initialize LCD
lcd.backlight(); // ON

//-------------------------------------------------------
// PIN ASSIGN
//-------------------------------------------------------
pinMode(in1, OUTPUT); // D9 to module in1 L298N
pinMode(in2, OUTPUT); // D10 to module in2 L298N
pinMode(in3, OUTPUT); // D11 to module in3 L298N
pinMode(in4, OUTPUT); // D12 to todule in3 L298N
pinMode(A0, INPUT); // Top left LDR
pinMode(A1, INPUT); // Top right LDR
pinMode(A2, INPUT); // Bottom left LDR
pinMode(A3, INPUT); // Bottom right LDR
pinMode(A6, INPUT); // Potentiometer reading tolerance LDR's
pinMode(A7, INPUT); // Sensor ACS712 currentmeter battery

//-------------------------------------------------------
// PRINT START MESSAGE ON LCD
//-------------------------------------------------------
lcd.setCursor(1,0);
lcd.print(F("Gompy SolarTracker"));
lcd.setCursor(2,1);
lcd.print(F("The Netherlands"));
lcd.setCursor(6,2);
lcd.print(F("STARTED"));
lcd.setCursor(0,3);
lcd.print(F("VERSION 2.4 20092019"));
delay(3000);
lcd.clear();

//-------------------------------------------------------
// PRINT START MESSAGE TO SERIALMONITOR
//-------------------------------------------------------
Serial.println(F("MONITOR STARTED"));
Serial.println(F("NEW VALUES WILLBE ACTIVE IF"));
Serial.println(F("SOLARPANEL GOTO START POSITION"));
}

void loop()
{
//-------------------------------------------------------
// ROUTINE FLAG TO RUN ASYNCHONE TIMER
//-------------------------------------------------------
currentMillis = millis(); // Set loop time ON
if (currentMillis - previousMillis >= interval)
{
// HAS TIME PASSED ?
previousMillis = currentMillis; // Remember last value
if (enableState == HIGH)
{
// IS STATE ON ?
interval = 1800000; // Set next loop time 30min (1*1000*60*30)
enableState = LOW; // Set state OFF
}
else
{
// IS STATE OFF ?
interval = 180000; // Set motor run time 3min (1*1000*60*3)
enableState = HIGH; // Set state on
}
}
//-------------------------------------------------------
// LDR LIGHT SENSORS
//-------------------------------------------------------
int tr = analogRead(A0); // LDR top right
int br = analogRead(A1); // LDR bottom right
int tl = analogRead(A2); // LDR top left
int bl = analogRead(A3); // LDR bottom left

// SET TOLERANCE SENSORS VALUES 0 - 50
int tolerance = analogRead(A6)/20.46; // Difference 50 between sensors

// AVERAGE VALUE LDR'S
int avt = (tr + tl) / 2; // Average value top
int avb = (bl + br) / 2; // Average value down
int avl = (tl + bl) / 2; // Average value left
int avr = (tr + br) / 2; // Average value right

// AVERAGE DIFFERENCE OF TOP AND BOTTOM LIGHT SENSORS
int dv = avt - avb;
// AVERACE DIFFERENCE OF LEFT AND RIGHT LIGHT SENSORS
int dh = avl - avr;
// AVERAGE AZIMUTE VALUE NIGHT
int av = (avt + avb) / 2;
int aavn = 300; // set Average Azimuth Value Night here
// AVERAGE ELEVATION VALUE NIGHT
int ev = (avl + avr) / 2;
int aevn = 300; // set Average Elevator Value Night here

//-------------------------------------------------------
// RECALCULATE VALUE CURRENT SENSOR
//-------------------------------------------------------
adcValue = analogRead(A7);
adcVoltage = (adcValue / 1024.0) * 5000;
currentValue = ((adcVoltage - offsetVoltage) / sensitivity);

//-------------------------------------------------------
// PRINT DEBUG INFORMATION EVERY intervalPrint time
//-------------------------------------------------------
{
unsigned long currentMillis = millis();
if( currentMillis - previousMillisPrint >= intervalPrint)
{
previousMillisPrint = currentMillis;

// DEBUG INFORMATION
Serial.println();
Serial.print(F("*******NEW*******"));
Serial.println();
Serial.print(F("Top Left\t"));
Serial.print(tl);
Serial.println();
Serial.print(F("Top Right\t"));
Serial.print(tr);
Serial.println();
Serial.print(F("Bottom Left\t"));
Serial.print(bl);
Serial.println();
Serial.print(F("Bottom Right\t"));
Serial.print(br);
Serial.println();
Serial.println();
Serial.print(F("Tolerance\t"));
Serial.print(tolerance);
Serial.println();
Serial.println();
Serial.print(F("+UP<>DOWN-\t"));
Serial.print(dv);
Serial.println();
Serial.print(F("AVT - up\t"));
Serial.print(avt);
Serial.println();
Serial.print(F("AVB - down\t"));
Serial.print(avb);
Serial.println();
Serial.println();
Serial.print(F("+WEST<>EAST-\t"));
Serial.print(dh);
Serial.println();
Serial.print(F("AVL - west\t"));
Serial.print(avl);
Serial.println();
Serial.print(F("AVR - east\t"));
Serial.print(avr);
Serial.println();
Serial.println();
Serial.print(F("Active run time\t"));
Serial.println(interval/1000);
Serial.print(F("LOOP TIME\t"));
Serial.println((interval/1000) - (currentMillis-previousMillis)/1000);
Serial.println();
Serial.print(F("Amps\t\t"));
// Serial.println(A7);
Serial.println(currentValue);
Serial.println();
Serial.print(F("ELEVATION DOWN\t"));
Serial.println(avt < avb);
Serial.print(F("ELEVATION UP\t"));
Serial.println(avt > avb);
Serial.print(F("ELEVATION STOP\t"));
Serial.println(-1*tolerance < dv || dv < tolerance);
Serial.print(F("ELEVATION NIGHT\t"));
Serial.println(ev <= aevn);
Serial.println();
Serial.print(F("AZIMUTH WEST\t"));
Serial.println(avr < avl);
Serial.print(F("AZIMUTH EAST\t"));
Serial.println(avr > avl);
Serial.print(F("AZIMUTH STOP\t"));
Serial.println(-1*tolerance < dh || dh < tolerance);
Serial.print(F("AZIMUTH NIGHT\t"));
Serial.println(av <= aavn);
Serial.print(F("*******END*******"));
Serial.println();
}
}
//-------------------------------------------------------
// START PROGRAM RUN AZIMUTH AND ELEVATION MOTOR
//-------------------------------------------------------
if (-1*tolerance > dv || dv > tolerance) // check difference in top/bottom LIGHT SENSORS is greater than tolerance
{
// CHANGE ELEVATION MOTOR DIRECTION
if (avt < avb) // If average LIGHT SENSOR values on top side are smaller than on bottom side then elevation motor rotates CLOCKWISE
{
// SET ELEVATION MOTOR DOWN
digitalWrite(in3, HIGH && enableState);
digitalWrite(in4, LOW);
lcd.setCursor(0,0);
lcd.print(F("ELEVATION : DOWN")); // print lcd row 1
}
else // If average LIGHT SENSOR values on bottom side are greater than on top side then elevation motor rotates COUNTERCLOCKWISE
{
// SET ELEVATION MOTOR UP
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH && enableState);
lcd.setCursor(0,0);
lcd.print(F("ELEVATION : UP"));// Print lcd row 1
}
}
else if (-1*tolerance < dv || dv < tolerance) // If difference is smaller than tolerance, STOP elevation motor
{
// STOP ELEVATION MOTOR
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
lcd.setCursor(0,0);
lcd.print(F("ELEVATION : STOP")); // Print lcd row 1

// MOVE ELEVATION MOTOR NIGHT POSITION
if (ev <= aevn) // Sensor values night
{
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
lcd.setCursor(0,0);
lcd.print(F("ELEVATION : NIGHT")); // Print lcd row 1
}
}

//-------------------------------------------------------
// CHECK DIFFERANGE BETWEEN SENSORS LEFT AND RIGHT FOR AZIMUTH
//-------------------------------------------------------
if (-1*tolerance > dh || dh > tolerance) // Check difference in left and right LIGHT SENSORS is within tolerance range
{

// CHANGE AZIMUTH MOTOR DIRECTION
if (avr < avl) // If average LIGHT SENSOR values on left side are greater than right side, azimuth motor rotates CLOCKWISE
{
// SET AZIMUTH MOTOR WEST = LEFT
digitalWrite(in1, HIGH && enableState);
digitalWrite(in2, LOW);
lcd.setCursor(0,1);
lcd.print(F("AZIMUTH : WEST")); // Print lcd row 2
}
else // If average LIGHT SENSOR values on right side are greater than on left side, azimuth motor rotates COUNTERCLOCKWISE
{

// SET AZIMUTH MOTOR EAST = RICHT
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH && enableState);
lcd.setCursor(0,1);
lcd.print(F("AZIMUTH : EAST")); // Print lcd row 2
}
}
else if (-1*tolerance < dh || dh < tolerance) // If difference is smaller than tolerance, STOP azimuth motor
{

// STOP AZIMUTH MOTOR
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
lcd.setCursor(0,1);
lcd.print(F("AZIMUTH : STOP")); // Print lcd row 2
}

// MOVE AXIMUTH MOTOR NIGHT POSITION / RIGHT
if (av <= aavn) // Sensor values night
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
lcd.setCursor(0,1);
lcd.print(F("AZIMUTH : NIGHT")); // Print lcd row 2
}
{
//-------------------------------------------------------
// PRINT VALUES ON LCD - ROW 1 AND 2 FROM PROGRAM
//-------------------------------------------------------
// PRINT LOOP TIME LCD ROW 3
lcd.setCursor(0,2);
lcd.print(F("LOAD CURRENT:"));
char temp1[5]; // Enough spaces for 4 numbers
snprintf(temp1,6, "%5d", currentValue); // %5d = 5 digets, right aligned
lcd.print(temp1);
lcd.setCursor(19,2);
lcd.print("A");

// PRINT TOLERANCE LCD ROW 4
lcd.setCursor(0,3);
lcd.print(F("TOL:"));
char temp2[5]; // Enough spaces for 4 numbers
snprintf(temp2,6, "%3d", tolerance); // %3d = 3 digets, right aligned
lcd.print(temp2);

// PRINT LOOP TIME LCD ROW 4
lcd.setCursor(8,3);
lcd.print(F("LOOP:"));
char temp3[5]; // Enough spaces for 5 numbers
snprintf(temp3,6, "%5d", ((interval - (currentMillis-previousMillis))/1000)); // // %5d = 5 digets, right aligned
lcd.print(temp3);
lcd.setCursor(19,3);
lcd.print(F("S"));

delay(300);//
}
}
//-------------------------------------------------------
// PRINT FULLY NUMBERS
//-------------------------------------------------------
void print2digits(int number)
{
if (number >= 0 && number < 10)
{
Serial.write('0');
}
Serial.print(number);
}
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonnetracker vollop benut

Berichtdoor Gompy » 27 Aug 2020, 19:03

Ik had nog wat fine tuning gedaan en juist stuk dat mis ik, de één na laatste uitvoering had ik nog (gelukkig) op stick staan.
Zoals je op schema kan zie is er een stukje weg :(
Ook wat betreft de nachtstand had ik wat aanpassingen gemaakt om pendelen te voorkomen wat de versie die jij aanhaalt (nog) wel deed.
Pffff......dat wordt weer avonden aanknoeien om het weer goed te krijgen.
Bijlagen
Image03.jpg
Image03.jpg (14.08 KiB) 11242 keer bekeken

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Zonnetracker vollop benut

Berichtdoor zuid » 28 Aug 2020, 08:25

Zit de gewiste info niet in de "prullenbak" ?
Of heeft Jan D. die ook netjes leeggemaakt.
mvg Nico

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonnetracker vollop benut

Berichtdoor Gompy » 28 Aug 2020, 11:13

Hi Nico,

Jan D heeft de partition geformatteerd waar wij de data op wegschrijven, zoals bv van Corroldraw, (mijn Arduino projecten), Siemens, enz ipv zijn eigen USB-stick.
Daarom is het ook dat de laatste wijzigingen weg zijn, we maken altijd achteraf een backup naar onze eigen sticks (laptop is bedrijfseigendom).
Eén keer per week maken we een backup van de gehele laptop en dat was dus de laatste wijzigen die we hadden en terug konden ztten.
We hebben nog een un-format geprobeerd, maar de schijf was alweer be(over)schreven en kregen maar flarden terug waar we geen kaas van konden maken.
Onze fout is geweest dat we wijzigingen niet direct op onze eigen USB-sticks hebben bijgewerkt......en daar proeven we nu de zure druiven van.
Dat van mij is maar een hobbyproject, maar van andere zijn hele tekeningen en wijzigen van PLC's weg die voor/van het bedrijf waren.

Mvg, Rob

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Zonnetracker vollop benut

Berichtdoor zuid » 28 Aug 2020, 13:14

Dat wordt dus avondjes puzzelen.
Vaak wordt een tweede versie beter.
succes Nico

VorigeVolgende

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast