adruino relai laten schakelen bij bepaalde snelheid

Als U een gezamenlijk project wil starten of aan projecten van anderen mee wilt werken.
Berichten: 8
Geregistreerd: 17 Aug 2019, 21:14

Re: adruino relai laten schakelen bij bepaalde snelheid

Berichtdoor Tvstiphout » 29 Aug 2019, 19:53

Hoi,

doordat de teller iedere 2 seconden op 0 gezet werd zorgde dit er ook voor dat het ralai ging flikeren ondanks dat hij meer als 6 pulsen per seconden kreeg, dit heb ik inmiddels opgelost door de meting pas na 1.9 sec te laten doen en bij 2 sec te resetten waardoor hij geen last meer heeft van de 0 tot 6 pulsen in de tijd tot 2 sec. .


alleen ben ik nog niet veel verder gekomen met het pas laten tellen als hij van High naar low gaat en weer naar High...

ik neem aan dat je het over dit stukje had wat verkeerd was, maar moet hier nog iets bij voor het tellen als hij van High naar low gaat ? of heb ik dit helemaal verkeerd gedaan en moet dit weg en iets ander voor terug ...


Code: Alles selecteren
buttonState = digitalRead(buttonPin); // lees de input pin

  // verglijk status met vorige status
  if (buttonState != lastButtonState) {
    // als status verandert tel er een bij
    if (buttonState == HIGH) {











Code: Alles selecteren
const int  buttonPin = 2;    // pin waar pulsgever versnellingbak aan zit
const int ledPin = 13;       // pin van relai voor schakeling

// variabelen
int buttonPushCounter = 0;   // puls teller
int buttonState = 0;         // huidige status van puslgever
int lastButtonState = 0;     // vorige status van pulsgever

unsigned long timerStart,
              timerEnd = 2000; // 2 seconden 
                     




void setup() {


  pinMode(buttonPin, INPUT); // pulsgever als input
 
  pinMode(ledPin, OUTPUT); // relai pin als output
 
  Serial.begin(9600); // seriale cominicatie aan

 
}

void loop() {
 

  buttonState = digitalRead(buttonPin); // lees de input pin

  // verglijk status met vorige status
  if (buttonState != lastButtonState) {
    // als status verandert tel er een bij
    if (buttonState == HIGH) {
     
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes: ");
      Serial.println(buttonPushCounter);
 
    } else {
     
      Serial.println("off");
    }
   
     
  }
  // opslaan van vorige status voor volgende loop
  lastButtonState = buttonState;


 
 
  // als er minder als 6 pulsen zijn uitgegeven schakel relai
 
  if(millis() - timerStart > 1900){
    if (buttonPushCounter <6) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  } }
    if(millis() - timerStart > timerEnd){
     Serial.println(buttonPushCounter);
     buttonPushCounter = 0;              // reset count
     timerStart += timerEnd; // reset 2 sec timer
  }
}

Advertisement

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

Re: adruino relai laten schakelen bij bepaalde snelheid

Berichtdoor shooter » 30 Aug 2019, 08:57

Ja dat denk je helemaal goed hoor dat is statechange
Er is een verschil tussen 6 pulsen per 2 sec en de tijdsduur tussen elke puls.
en waarom resetten?
je kunt ook pulsen tellen en de tijd en dan op elkaar delen en als dat hoger is dan 3 per seconde .
je kunt zo zelfs het gemiddelde uitrekenen etc.
het ligt er maar aan wat je wilt, je bent wel op de goede weg hoor.
paul deelen
shooter@home.nl

Berichten: 8
Geregistreerd: 17 Aug 2019, 21:14

Re: adruino relai laten schakelen bij bepaalde snelheid

Berichtdoor Tvstiphout » 04 Sep 2019, 21:15

zo eindelijk werkt hij zoals hij het hoort :)

ik had gekozen voor pulsen per bepaalde tijd zodat nu hij aan het eind van die tijd gaat kijken hoeveel pulsen hij heeft de beslissing dus ook actief blijf tot de volgende meting 2 sec later.

en het resetten leek me nodig, maar geen idee wat verder de mogelijk heden waren... het is voor mijn de eerste keer dat ik een arduino of iets soortgelijks in mijn handen heb, dus vind het eigenlijk al een klein wonder dat het werkt.


de arduino gaat nou in een oude Citroen hy bus uit 1956 hier hebben we een Vw passat uit 2004 in gelegd. maar deze bus heeft dus aan iedere kant van die ouderwetse vlaggetjes als knipperlicht die uitklappen maar wou ze alleen aan laten gaan als de bus beneden ongeveer 40 km per uur gaat aangezien hij nu ook veel harder kan en daar die vlaggetjes waarschijnlijk niet tegen kunnen. en hij is ook voorzien van normale knipperlichten waardoor ze geen noodzakelijke functie meer hebben.



nou had ik nog een klein probleempje wat nog opgelost zou moeten worden en dat is dat de arduino een ralai schakelt maar het vlaggetje mag alleen uit gaan als knipperlicht bedient is en als ik het knipperlicht over het relais aansluit gaat het vlaggetje dus telkens in uit in plaats van uit zolang het knipperlicht aan staan. heb je misschien nog een idee om dit op te lossen ?





Code: Alles selecteren
const int  buttonPin = 2;   
const int ledPin = 13;       

// variabelen
int buttonPushCounter = 0;   
int ledState = HIGH;         
int buttonState;             
int lastButtonState = LOW;   


unsigned long lastDebounceTime = 0; 
unsigned long debounceDelay = 50;   

unsigned long timerStart,
              timerEnd = 2000; 
                     




void setup() {

 
 
  pinMode(buttonPin, INPUT); // pulsgever als input
 
  pinMode(ledPin, OUTPUT); // relai pin als output
 
  Serial.begin(9600); // seriale cominicatie aan
 

 
}

void loop() {
 
 
  int reading = digitalRead(buttonPin);

 
  if (reading != lastButtonState) {
   
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
   

   
    if (reading != buttonState) {
      buttonState = reading;

     
      if (buttonState == HIGH) {
        buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes: ");
      Serial.println(buttonPushCounter);
      }
    }
  }
 
     
 
   
 

   
   
 
  lastButtonState = reading;



if(millis() - timerStart > 1900){
    if (buttonPushCounter <6) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  } }
    if(millis() - timerStart > timerEnd){
     Serial.println(buttonPushCounter);
     buttonPushCounter = 0;              // reset count
     timerStart += timerEnd; // reset 2 sec timer
  }
}

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

Re: adruino relai laten schakelen bij bepaalde snelheid

Berichtdoor shooter » 05 Sep 2019, 09:43

je hebt dan dus nog een ingang nodig voor het aan zijn van de richting, als je die voor de clignoteur dus van de schakelaar afpakt dan hoef je alleen een if erbij te zetten en anders met een timer kijken of de uittijd al voorbij is.
Je kunt overigens beter de resettimer van millis() afhalen omdat je anders na 4 dagen een overflow krijgt (detail)
en nee ik ga je niet vertellen hoe dat precies te doen, ik zie aan je programma dat je dat heel goed zou kunen maken.
paul deelen
shooter@home.nl

Vorige

Terug naar Gezamenlijke projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten