Sterk flucturerende waarden analoge inputs

Hardware geleverd door Arduino
Berichten: 15
Geregistreerd: 29 Mrt 2018, 22:48

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor Mai Pensato » 01 Apr 2018, 09:36

Dat weet ik dan weer wel...hoe de code tag te gebruiken.
Wat ik gedaan heb is jouw code plaatsen direct na de void loop() regel en "pin" te wijzigen in A15 (op die ingang staat de WG reading nu). En enkele code regels tijdelijk uitgeschakeld zoals bijv de delay.
En dan krijg ik dus de foutmelding zoals gemeld.


Code: Alles selecteren
int wg = 0;
int ec = 0;
int temp = 0;
float wgpercent = 0.00;
// float ecms = 0.00;
// float tempgrc = 0.00;

void setup() {
  Serial.begin(9600);
}

void loop() {
  const unsigned int numberSamples = 1000;         // maximum about 60000
  float averageRead( int A15)
  {
    unsigned long total = 0;
    for( unsigned int i=0; i<numberSamples; i++)
    {
      total += analogRead(A15);
    }
    // De volgende berekening is met float getallen.
    // Dat maakt het mogelijk om meer resolutie te krijgen dan de 10 bit van de ADC.
    average = (float) total / (float) numberSamples;
    return( average);
  }
 
  // wg = analogRead(A15);     tijdelijk uitgeschakeld om average te testen 
  wgpercent = (average/1023.0)*100.0;  // wg veranderd in average om dit te testen
  // ec = analogRead(A1);
  // ecms = (ec/1023.0)*10.0;
  // temp = analogRead(A2);
  // tempgrc = (temp/1023.0)*50.0;
  Serial.print("WG =  ");
  Serial.println(wgpercent);
  // Serial.print("   EC =  ");
  // Serial.print(ecms);
  // Serial.print("   Temp =  ");
  // Serial.println(tempgrc);
  //delay(10000);  tijdelijk uitgeschakeld om average te testen
}

Advertisement

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

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor Koepel » 01 Apr 2018, 10:44

De "setup()" is een functie, de "loop()" is een functie. Die worden door Arduino aangeroepen.
Mijn "averageRead()" is een functie, met een globale variabele (een constante). De aanroep is in de loop().
In de libraries zitten ook nog functies.

Heb je de draden al gecontroleerd op draadbreuken ?

Pas de sketch aan en laat de sketch weer zien.

cpp code
// ------------------------
// globale variabelen
// ------------------------
float wgpercent = 0.00;
// float ecms = 0.00;
// float tempgrc = 0.00;
const unsigned int numberSamples = 1000; // maximum about 60000

// ------------------------
// functies van/voor Arduino
// ------------------------
void setup()
{
...
}

void loop()
{
...
float averageADC; // Dit is een lokale variabele.
averageADC = averageRead( A15); // Roep een functie aan
wgpercent = ( averageADC / 1023.0 ) * 100.0; // wg veranderd in average om dit te testen
...
}

// ------------------------
// zelfgemaakte functies
// ------------------------

float averageRead( int pin)
{
...
}

void voorbeeldFunctie()
{
Serial.println("Voorbeeld");
}

int voorbeeld_twee_getallen_optellen( int a, int b)
{
return( a + b);
}

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

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor shooter » 01 Apr 2018, 21:52

Het ligt vrijwel zeker aan je instelling van de meetpparatuur, ja het klopt dat als je over de + en - pennen meet een prima stabiele meting hebt.
Kijk of het mogelijk is om alle - uitgangen aan 0 te hangen met de kontaktjes(jumpers) boven de aansluitingen. Er komt een differentieel signaal uit. Uiteraard moet het geen stroomsignaal zijn maar een Volt signaal. Dat is heel vaak 0 tot 10 Volt, en dat is dus teveel voor een arduino dus daar moeten dan wel weerstandjes tussen.
Dus iets meer info over je meetspul, is wel handig.
Dat kun je zien door op je arduino op de analoge pin en op de Gnd met je multimeter te meten.
Verder moet je PULLUP uitzetten voor de analoge signalen, want dat heeft invloed op de meting (er gaat dan namelijk stroom lopen van de 5 Volt naar de analoge ingang en dus ook naar je meetapparatuur. (en die heeft er heel mooie DA convereters tussen zitten.

Verwacht geen al te hoge precisie alles binnen 1% is al erg goed voor een arduino. vooral bij de vochtigheid is 5% al prima.
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 29 Mrt 2018, 22:48

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor Mai Pensato » 01 Apr 2018, 23:26

@Koepel,

Na het voldoen aan de nodige Paasverplichtingen ben ik vanavond hier weer verder mee gegaan.
Wat betreft de draden: die heb ik voor de zekerheid vervangen door 2 anderen en dat maakt geen verschil.
Verder heb ik 2 van deze meetapparaten. De andere was nog in gebruik in mijn kasje maar heb ik nu gebruikt in de testopstelling met de Arduino. Het voordeel van deze is dat er een display op zit waarop ik ook direct de metingen van WG, EC en T op 2 decimalen kan aflezen.
Conclusie is dat de schommelingen ook bij deze even groot zijn.

Ik heb de sketch werkend gekregen, bedankt voor je input!. Door het gemiddelde te berekenen over 50.000 samples krijg ik in ieder geval wel een vrij stabiele waarde te zien op de seriele monitor (varieert nog slechts 2 honderdsten)


Conclusies van een "vergelijkend waren-onderzoek":
1) waarde WG volgens display van het meetapparaat 69,52% (stabiel gedurende de testperiode)
2) waarde WG volgens mijn "super-cheap-as"" multimeter 3,47 V = 69,40% (ook zeer stabiel)
3) waarde WG volgens Arduino (gemiddeldes van 50.000 samples) = 69,71-69,73%

Dus Arduino zit ongeveer 0,2 te hoog maar lijkt zo een bruikbare meting op te leveren.
Ik ga dit nog even verder volgen, ook met waardes voor EC en T

Toch zou ik graag die grote fluctuaties er uit willen hebben.

Hier dan de werkende sketch:

Code: Alles selecteren
float wgpercent = 0.00;
// float ecms = 0.00;
// float tempgrc = 0.00;
const unsigned int numberSamples = 50000;         // maximum about 60000

void setup() {
  Serial.begin(9600);
}

void loop()
{
  float averageADC;        // Dit is een lokale variabele.
  averageADC = averageRead( A15);    // Roep functie averageRead aan
  wgpercent = ( averageADC / 1023.0 ) * 100.0;  // omrekening naar WG-%
 
  // wg = analogRead(A15);     tijdelijk uitgeschakeld om average te testen 
  // ec = analogRead(A1);
  // ecms = (ec/1023.0)*10.0;
  // temp = analogRead(A2);
  // tempgrc = (temp/1023.0)*50.0;
  Serial.print("WG =  ");
  Serial.println(wgpercent);
  //delay(10000);  tijdelijk uitgeschakeld om average te testen
}

float averageRead( int pin)
{
  unsigned long total = 0;
  float average = 0.00;
  for( unsigned int i=0; i<numberSamples; i++)
  {
    total += analogRead( pin);
  }
  // De volgende berekening is met float getallen.
  // Dat maakt het mogelijk om meer resolutie te krijgen dan de 10 bit van de ADC.
  average = (float) total / (float) numberSamples;
  return( average);
}

Berichten: 15
Geregistreerd: 29 Mrt 2018, 22:48

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor Mai Pensato » 01 Apr 2018, 23:37

@Shooter:
Hierbij dan iets meer info over de meetapparatuur. Deze wordt gebruikt op grote schaal in de professionele glastuinbouw (teelt van bijv. tomaten en paprika op substraat). De meter meet middels een sensor in het substraat het electrisch geleidingsvermogen en de temperatuur. Dit wordt via allerlei omrekenformules (software dus) omgerekend naar een watergehalte (in volume% vocht), EC (ms/cm/ De temperatuurmeting zit er op om de EC betrouwbaar te meten (temp-correctie).
Om de metingen te kunnen aansluiten op de procescomputers die in kassen gebruikt worden zitten er drie digitaal/analoog converters op. En op de analoge uitgangen kunnen 5 verschillende protocols ingesteld worden (afhl van type/merk procescomputer). De 5 protocols zijn: 0-20 mA; 4-20 mA; 0-24 mA ; 0-5V en 0-10V.
Dit kun je instellen door middel van de 6 blauwe jumpers die op 1 van de foto's te zien zijn. Ik weet 100% zeker dat ik deze correct heb ingesteld op 0-5V. Dat wordt ook bevestigd door de meting met de multimeter en ook door de uitgelezen waarden door de Arduino.

Wat ik verder nog gelezen heb in de specificaties is dat de WG- EC- en T- met elkaar verbonden zijn en dus dezelfde massa hebben. Dit is niet dezelfde massa als van de voeding. De 3 uitgangen zijn volledig galvanisch gescheiden van de voeding (middels 48V adapter) en alle andere aansluitingen.

Dit zegt mij allemaal niet zo veel, zoals al aangegeven ik ben niet zo thuis in electronica.

Ik hoop dat je zo wel voldoende antwoord hebt op je vraag en mij wellicht kan helpen hoe de grote fluctuaties op de Arduino te verhelpen.

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

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor Koepel » 02 Apr 2018, 20:42

Het wijst in de richting van 50 Hz brom. Dat kan enerzijds nu eenmaal op het signaal zitten, het kan anderzijds met een grounding probleem te maken hebben.

Wanneer de ruis mooi verdeeld was, dan zou het beter verdwijnen met het gemiddelde nemen.
Dus de frequentie van de storing is mogelijk erg laag, waardoor de meting tijdens een bepaalde tijd een verschil laat zien. Zo kom ik gevoelsmatig op 50 Hz.

Zo'n goedkope multimeter heeft mogelijk toch nog 50 Hz en 60 Hz brom onderdrukking.

De 50 Hz zou de Arduino op de grafische seriële monitor kunnen zetten.

Mai Pensato, je begrijpt toch wel dat dit allemaal gepruts is ? Dat wij wel willen helpen, maar dat wij van een afstand niet kunnen zien wat het probleem is. Wij schrijven bericht na bericht na bericht, maar het slaat bijna nergens op. Als je een probleem hebt, dan pak je het aan. Als je iemand weet met een scope, dat zou mooi zijn.

Berichten: 15
Geregistreerd: 29 Mrt 2018, 22:48

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor Mai Pensato » 02 Apr 2018, 20:54

@Koepel,

Dat is me duidelijk en dat ga ik ook doen zoals ik al aangaf.
Ik vond het wel zo correct om terug te melden dat het gelukt is met het script en wat de resultaten zijn van de gemiddelde waarden. Ook had je gevraagd om de sketch te plaatsen.
En ik vond het ook netjes om te reageren ol de vraag van Shooter.
Ik ga nu dus iemand zoeken die een scope heeft (dat is me nog niet gelukt).
En zal dan hier wel terug melden of het gelukt is om oorzaak en oplossing te vinden.
Nogmaals bedankt voor de ondersteuning.

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

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor Koepel » 02 Apr 2018, 21:20

Ik had ergens in een donker hoekje een project met 50 Hz storing.
Daar deed ik 10000 samples met een extra "delayMicroseconds( 47);" in de for-loop. Op die manier smeerde ik de tijd van samplen uit over 3.5 seconden. Helaas heb ik niet in de sketch er bij geschreven waarom "47" microseconden, waarschijnlijk omdat 3.5 seconden samplen goed werkte.

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

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor shooter » 02 Apr 2018, 22:24

Je zegt zelf al dat er een galvanische scheiding is, de arduino meet dus telkens de spanning van een analoge input en dat altijd tov de Gnd van de arduino.
De Gnd van de arduino moet natuurlijk vast zitten aan de Gnd van de uitgangen, Kijk dan wel even of er geen groundloop is, dat betekent dat er stroom tussen de voedingen gaat lopen. Dat kun je voorkomen door de arduino geisoleerd op te stellen, en dus niet naar ground te zetten. daar zorgt de meetapparatuur dan maar voor. meet eens de spanning tussen de gnd van de arduino en die van je meetset.
Vertrouw de meetset maar,
Doe eens een experiment: pak een potmeter en sluit die aan op een gebruikte ingang, als deze ook fluctueert dan zit de 'fout' in de arduino.
ontstoren is zeker mogelijk, met een simpele condensator en een weerstand erover. Dit belast de uitgang (en dat is ook de bedoeling) en zorgt ook geijk dat er pieken worden weggehaald.
Verder heel even wachten voordat je een analogread doet, werkt ook, lees de datasheet van de atmega daarover. Het duurt even voordat de pinnen stabiel zijn.
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 29 Mrt 2018, 22:48

Re: Sterk flucturerende waarden analoge inputs

Berichtdoor Mai Pensato » 09 Apr 2018, 23:53

Update...

@Koepel: Naar aanleiding van jouw laatste tip toch nog maar even "doorgeprutst" :D en die delay uitgetest (mede ook omdat Shooter dit ook aangeeft). De delay getest in de for loop, zowel voor als na de analogRead. En ook met verschillende tijden. Echter dit bood geen oplossing.

@Shooter:
Spanning tussen de ground van de Arduino en de ground van de meetapparatuur is 0 Volt.
Experiment met potmeter: hierbij zijn de meetwaarden dus wel zeer stabiel !
Delay voor de analogRead lost de fluctuaties dus niet op.
Ik weet niet wat je bedoelt met "arduino geisoleerd op te stellen en dus niet naar de ground te zetten" ?

Ik heb/had nog een plan B: de meetapparatuur heeft ook een RS232 uitgang. Hiermee zouden de meetgegevens digitaal gestuurd kunnen worden naar een PC. Er zit daarvoor een TXD, RXD en GND uitgang op. Ik heb gelezen dat dit dan ook op de Arduino zou moeten kunnen echter ik las ook dat er mogelijk een te hoog voltage op de RS232 uitgang zou staan wat schade kan veroorzaken aan de Arduino. Dus even gemeten met mijn "cheap-ass" Multimeter: Op TXD+GND meet ik -9,2 Volt en op RXD+GND 0 Volt. Dus ik durf dit niet zomaar aan te sluiten.
Graag nog advies hierover.




Komend weekend krijg ik hulp van iemand met meer verstand van electronica en betere apparatuur. Wat we dan in ieder geval nog gaan testen is afgeschermde kabels en het door Koepel en Shooter geadviseerde RC-filter.

VorigeVolgende

Terug naar Arduino hardware

Wie is er online?

Gebruikers in dit forum: Google [Bot] en 3 gasten