tijdschakelaar

Arduino specifieke Software
Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 17 Okt 2016, 21:09

Nogmaals bedankt voor alle antwoorden (en moeite die je erin steekt!)

De 'UL' achter een getal is de afkorting van "unsigned long". Het verteld de compiler dat het getal een unsigned long is.
De 'L' achter een getal is de afkorting van "long".

Dit had ik ook gevonden, maar het staat toch ook voor het = teken? waarom 2 x defineren?

ik heb een arduino Uno, ik had de LED's op uitgang 2 en 3 en de drukknop met een pull up weerstand op pin 8 en 9

zoals eerder gezegd, heb ik verschillende projecten succesvol afgerond (capaciteit tester accu, code slot, buitenverlichting met RTC en aoto aanpassing zomer winter en zon onder, logger temperature en voltage met Oled display), maar dit was meer het van internet zoeken/veranderen/aanpassen dan het echt zelf programmeren.

de schakelingen van de starterkit ook diverse gebouwd, maar ik wil meer praktisch nut schakelingen, en het liefste nodig in dagelijks leven....


het ZONDER ervaring opleiding in programmeren starten ...is nog niet zo eenvoudig, elektronische kennis heb ik echter wel (opleiding, maar zeker door werk, storingdiensten, beheer apparatuur, en tegenwoordig testen apparatuur)

Maar toch zeker bedankt, ik geeft het ook niet op!! , deze schakeling zal ik zeker op een of andere manier bouwen, ik ben het met je eens dat de door jouw voorgestelde manier zeker een juiste is , maar voor mij nu nog te hoog gegrepen.

hopelijk zal ik het ooit goed onder de knie krijgen, het goede seizoen komt er in ieder geval aan

groet Wim en nog veel hobby plezier toegewenst

PS. ik denk dat van deze draad ook veel andere iets zullen leren

Advertisement

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

Re: tijdschakelaar

Berichtdoor Koepel » 18 Okt 2016, 07:59

Ah, je hebt al veel projecten gemaakt :D

Dus het is vooral de taal 'c' en 'c++' ? Probeer eens om zelf iets te maken met arrays. Bijvoorbeeld een array van integers, die je invult en allemaal laat zien in de seriële monitor. Ze allemaal laten zien met een for-loop natuurlijk.

unsigned long ScoobyDoo = 123456UL;

Daar staat dat "ScoobyDoo" van het type unsigned long is. Het wordt gevuld met een beginwaarde, met getal van een vaste waarde. Dat getal heeft een 'UL' om aan te geven dat het getal ook een unsigned long is.

Meestal is het overbodig, dan is het net zo iets als bij de tankdop van een auto waar staat dat er diesel in moet terwijl de andere spuitpistolen er niet eens op passen.

Zoals hier, dit gaat goed:
Code: Alles selecteren
unsigned long ScoobyDoo = 123456UL;
unsigned long SpongeBob = 123456;
const unsigned long MickeyMouse = 123456;

void setup()
{
  Serial.begin( 9600);
  Serial.println(F( "Started"));

  Serial.println( ScoobyDoo);
  Serial.println( SpongeBob);
  Serial.println( MickeyMouse);
}

void loop()
{
}


Maar de compiler werkt standaard met integers. Dus het kan mis gaan.
Als ik "604800000" zie, dan zegt dat mij niets. Als ik "1000*60*60*24*7" zie, dan zie ik het aantal milliseconden in een week. Ik hou niet van getallen in een sketch waarvan de oorsprong niet duidelijk is. Ik noem dat "magische getallen", omdat ze zomaar vanuit het niets in de sketch staan. Ik ga het zelf ook niet uitrekenen, daar is de compiler voor.

Maar dan kan het mis gaan:
Code: Alles selecteren
unsigned long pen       = 1000   * 60   * 60   * 24   * 7;   // FOUT !!!
unsigned long pineapple = 1000UL * 60UL * 60UL * 24UL * 7UL;

void setup()
{
  Serial.begin( 9600);
  Serial.println(F( "Started"));

  Serial.println( pen);
  Serial.println( pineapple);
}

void loop()
{
}


Probeer beide sketches eens op een Arduino Uno. Vreemd hè ? De compiler is best slim, maar dit had de compiler niet door. Dus is het beter om de compiler te vertellen wat te doen. Bij een Arduino Due zijn integers 32 bit in plaats van 16 bit, dan gaat het opeens wel goed.

Wat ga je nu met je accu project doen ? Zal ik het eenvoudiger maken door voor beide alleen millis() te gebruiken en dat je dan niet langer dan 50 dagen kunt tellen ? Met een test mode zoals je die al gemaakt had, maar dan werkend ? Wil je met of zonder array ?
Oeps :oops: Ik zie nu dat die sketch in setup() geen "pinMode()" heeft. Dat hoort dus voor alle vier de pinnen gezet te worden.

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 18 Okt 2016, 18:27

hallo,

ja die Pinmode miste ik ook, maar dacht dat dat was geregeld in de (voor mij onbekende ) const int pinKnop[2] = { 8, 9};



bij codes geladen, ja inderdaad!! het maakt verschil , dus UL en L zijn beter altijd toe te voegen om deze problemen te voorkomen.

ja wat ga ik doen?...,
1- ik ben pas weer begonnen na de zomer, in de zomer heb ik hier geen tijd voor
2- de code zoals je nu hebt , begint door te dringen. maar snap ik nog niet volledig
3- ik zag liever een simpeler code , dus alleen millis() en niet langer dan 50 dagen lijkt me voor nu prima
4- ik heb ook het boek "arduino cookboek"gedownload en geprint hier staat in ieder geval veel uitleg in :D
en op Youtube staan een leuke training deze zal ik ook eens bestuderen:

https://www.youtube.com/playlist?list=P ... 2NbB4mZQn-


5- helaas (...) moet ik ook nog werken, en heb het redelijk druk, maar eea hoeft ook niet vandaag af te zijn.

groet en bedank voor je tijd en moeite!

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 18 Okt 2016, 20:51

ik dacht (voordat ik de vraag stelde op internet) de volgende code te gebruiken
//cycle timer


int ledPin = 13; // the number of the LED pin
int ledState = LOW; // ledState used to set the LED
unsigned long previousMillis = 0; // will store last time LED was updated
long OnTime = 10000; // milliseconds of on-time
long OffTime = 750; // milliseconds of off-time

void setup()
{
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}

void loop()
{
// check to see if it's time to change the state of the LED
unsigned long currentMillis = millis();

if((ledState == HIGH) && (currentMillis - previousMillis >= OnTime))
{
ledState = LOW; // Turn it off
previousMillis = currentMillis; // Remember the time
digitalWrite(ledPin, ledState); // Update the actual LED
}
else if ((ledState == LOW) && (currentMillis - previousMillis >= OffTime))
{
ledState = HIGH; // turn it on
previousMillis = currentMillis; // Remember the time
digitalWrite(ledPin, ledState); // Update the actual LED
}
}

Voor 1 timer goed te gebruiken, echter handmatige start toevoegen, en een tweede timer maakt het allemaal wat lastiger, dus dat pleit om jou code te gebruiken, ik zal mezelf alleen veel meer moeten verdiepen in deze door jou gebruikte comando's.

maar zoals gezegd ik heb veel meer te doen... komende tijd wat meer prio aan arduino!

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

Re: tijdschakelaar

Berichtdoor Koepel » 19 Okt 2016, 10:26

Wat jij hebt komt op hetzelfde neer als mijn voorbeeld.
Binnen de structuur van het programma doe je hetzelfde als ik deed:
- zet de state anders (true/false, HIGH/LOW, WAIT/CHARGE, whatever...)
- onthoud de tijd / reset de teller
- zet de output

Graag zou ik het programma een eigen 'state' willen geven, die los staat van de status van de led.
Dan krijg ik dit:

Code: Alles selecteren
// For: http://arduinoforum.nl/viewtopic.php?f=8&t=2054
// Tested with Arduino.cc IDE 1.6.12, Arduino Uno
//
// Warning: counting 30 days means that millis
// counts further than half of its maximum value.
// Therefor "unsigned long" must be used everywhere
// the timing is used.

// Arduino pin numbers
const int ledPin = 13;            // the number of the LED pin
const int buttonPin = 8;          // A button to GND

boolean chargingState = false;    // false is waiting, true is charging

unsigned long previousMillis;     // will store last time the state was updated
unsigned long OnTime = 2000UL;    // milliseconds of charging time
unsigned long OffTime = 6000UL;   // milliseconds of waiting time

void setup()
{
  Serial.begin( 9600);
  Serial.println(F( "Started"));
 
  // set the digital pins:
  pinMode( ledPin, OUTPUT);
  pinMode( buttonPin, INPUT_PULLUP); // button to GND to this pin
}

void loop()
{
  // one currentMillis for the whole loop().
  unsigned long currentMillis = millis();

  // ---------------------------------------------------------
  // check to see if it's time to change the state of the LED
  // ---------------------------------------------------------
  if( chargingState)
  {
    if( currentMillis - previousMillis >= OnTime)
    {
      // The end of the charging time has been reached.
      // Change the state into waiting
      chargingState = false;            // Turn it off
      previousMillis = currentMillis;   // Remember the time
      digitalWrite(ledPin, LOW);        // Turn led off

      Serial.println(F( "Begin of waiting"));
    }
  }
  else
  {
    if( currentMillis - previousMillis >= OffTime)
    {
      // The end of the waiting time has been reached.
      // Change the state into charging
      chargingState = true;             // turn it on
      previousMillis = currentMillis;   // Remember the time
      digitalWrite( ledPin, HIGH);      // Turn led on

      Serial.println(F( "Begin of charging"));
    }
  }

  // ---------------------------------------------------------
  // check button
  // ---------------------------------------------------------
  if( digitalRead( buttonPin) == LOW)   // button pressed ?
  {
    // start charging right now
    chargingState = true;
    previousMillis = currentMillis;
    digitalWrite( ledPin, HIGH);

    Serial.println(F( "Button pressed"));
  }
}


Dat deel van de knop wordt uitgevoerd zolang de knop is ingedrukt. Dus als de knop ingedrukt blijft, dan blijft de uitgang actief. Dat lijkt me geen probleem, maar het is niet zo veilig. Als de knop vast blijft zitten, dan blijft de accu opladen. De oplossing is dit: https://www.arduino.cc/en/Tutorial/StateChangeDetection.
Ook millis() controleren binnen een bepaalde state is minder veilig. Als er een bug in de code binnensluipt dan kan dat al snel verkeerd gaan. Maar als de code goed is dan werkt het natuurlijk ook goed.

En dat dan twee keer voor twee accu's. Het is veiliger omdat met array's te doen, omdat de code er dan maar één keer staat. Als je alles twee keer doet, dan moet je bij iedere wijziging heel nauwkeurig beide stukken code hetzelfde houden. In plaats van array's kun je functies gebruiken, maar dan wordt de code iets rommeliger dan met array's (vind ik).

Wat voor accu's zijn het eigenlijk ? Voor loodaccu's is een druppellader voldoende, voor andere accu's kun een slimme lader gebruiken die alles regelt.

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 19 Okt 2016, 18:14

Bedank voor de code, zal hem proberen en verder uitwerken,

de accu's zijn van twee elektrische fietsen, in principe zitten daar "intelligente" LI-Ion lader bij en een BMS (battery management system), en zouden altijd kunnen aanstaan.

ik weet echter dat het constant laden (en of standby) van Li-Ion cellen Niet zonder brandgevaar is , een lithium cel die start met branden, is ook heel moeilijk te blussen daar hij zijn eigen zuurstof produceerd, verder hou ik niet van dit soort toepassingen altijd aan het net.

daarom een timer 1 x per maand laden voor het bijhouden cellen , en als ik of mijn vrouw de fiets heeft gebruikt bij thuiskomst starten laden (duurt ongeveer 5 uur, maar met 10 h ben ik zeker)

tijdens Standby alleen de arduino actief, maar dit via een (goedgekeurde KEMA-KEUR, VDE, enz.) lader zal dit weinig gevaar opleveren, zeker omdat de energie kleiner is dan 15 watt (volgens IEC60335-1 dan geen brandgevaar).

Er zullen over accu's veel meningen zijn, ik geloof echter in het niet constant laden ;)

Loodaccu's -- beste via een cycle(lage stroom,hoge stroom,lage stroom) druppel charger van bv. Ctek
Li-ion-- 1x per 1 of 2 maanden opladen , en na gebruik opladen, (altijd voorkomen dat hij helemaal leeg is, meestal bewaakt door de BMS)
NI-CD-- pas laden als helemaal (beneden 0,8V/cel?) leeg, dan met max stroom 1/10 capaciteit of via delta V methode

Nogmaals eea is mijn mening , en hoeft niet de beste te zijn.

groet Wim

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

Re: tijdschakelaar

Berichtdoor Koepel » 19 Okt 2016, 20:22

Jouw link naar die Arduino Tutorials, dat is bij elkaar zo'n 14 uur :shock: Dat is te lang voor me.
In Lesson 21 gebruikt hij een BMP180 baromic sensor van Adafruit. Hij verwijst naar een tutorial van Adafruit, en daar wordt voor de code verwezen naar Github. En wie geeft op Github commentaar dat de Wire (I2C) library verkeerd wordt gebruikt ? https://github.com/adafruit/Adafruit-BMP085-Library/issues/17 ;)

Iedere adapter gaat een keer stuk, en hij hoort er mee op te houden zonder in brand te vliegen. Dus alleen adapters die goed gekeurd zijn voor Europa zijn goed. De rest weg doen. Dat lijkt me duidelijk.

De veiligheid van de Li-ion cellen wordt bepaald door kwaliteit van de cellen en de lader.
Voor consumenten gaat een lader tot 4.2V. Dat is heel dicht bij de grens waarop de cel stuk gaat. Bij medische en militaire apparaten is dat voltage lager voor meer betrouwbaarheid. Zoek de alinea's met het woord "prolongs": http://batteryuniversity.com/learn/article/charging_lithium_ion_batteries.
Volgens mij maakt een keer maand laden weinig verschil. De lader maakt het verschil omdat die tot het uiterste van 4.2V gaat.

De redenering is ook om te draaien. Bij af en toe een heel klein beetje opladen loopt er weinig stroom. Bij één keer per maand opladen, loopt er een grotere stroom, dus meer warmteonwikkeling.

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 19 Okt 2016, 20:44

zoals ik al zei , zijn de meningen hier (terecht?) heel verschillend over.

ik werk bij een keur instantie , en het probleem met vertrouwen op een lader, is dat je vertrouwd op Functional safety (FS), bij fout condities gaat veel electronica maar 1 fout diep, en software fouten worden niet meegenomen.

dus om zo'n lader veilig te krijgen zou de software class B software moeten zijn (volgens bv. IEC6730-1), en ontworpen moeten zijn volgens een bepaalt (V) model, dit is, en was zeker in het verleden vaak niet het geval.

"vroeger" had je een wasmachine met een harde (bimetaal?) switch, tegenwoordig zie je steeds meer FS die dit regelt, is dit veiliger?? (in ieder geval wel eenvoudiger en goedkoper bij grote aantallen)

Wat is veilig en wat niet??? ik weet het ook niet, maar ik weet wel (geef jezelf ook al aan) dat LI-ION accus to tegen de grens geladen worden, en zeker niet alle cellen zijn (goed) gekeurd, ook is het moeilijk in welke omstandigheden warm/koud direct na gebruik/enz enz, sommige dingen zijn voorzien in de normen, andere dingen niet, of weten we gewoon nog niet (denk aan Samsung Note7)

tot zover FS, ik ga mezelf verdiepen in array's...........

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: tijdschakelaar

Berichtdoor nicoverduin » 19 Okt 2016, 22:02

Hoewel er niets mis is met het V-model, is dat zeker geen garantie dat het veiliger is. Wel dat je gemakkelijker iemand kan aanwijzen of het wel of niet goed getest is. Maar het statement 'garbage in = garbage out" staat nog steeds overeind...
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 19 Okt 2016, 22:10

natuurlijk is het programmeren volgens V model geen garantie, daarom testen we ook dmv foutconditie's , beoordelen FMEA, meerdere onderdelen die 1 commando's uitvoeren, dynamische signalen enz .

ik wil graag aan dit soort discussies meedoen, maar dan misschien een nieuw onderwerp starten? we dwalen wel erg van mijn schakeling af.

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: RussellAlets en 15 gasten