la opener

De regels van arduinoforum.nl
Berichten: 8
Geregistreerd: 07 Jan 2023, 09:55

la opener

Berichtdoor Harry » 16 Jan 2023, 21:31

Hallo,

Geheel nieuw hier en met arduino en wilde eens wat proberen met een servo.

sketch geleend van de diy bros om een servo aan te sturen zou bijna precies doen wat ik wil.
Origineel werkt het met 2 infrarood ogen en wanneer die binnen een bepaalde tijd geactiveerd worden gaat de servo bewegen. Aangezien ik een pulsdrukker gebruik is ingang 2 voldoende omschreef men.
Ik kan het programma nog niet helemaal zelf ontcijferen maar bij een test werkte het.

Nu een en ander ook praktisch in elkaar gezet en loop ik tegen een probleem aan met wat de servo doet.
Het gaat vaak goed en dan ineens is het als of de servo doorschiet. Hij gaat van 18 naar 160 graden en terug maar te ver en corrigeert dit weer maar soms ook niet en dan start de servo dus niet meer, enige remedie is dan spanning van de servo afhalen en dan werkt het weer.

Een andere regelmatig voorkomende fout, servo gaat van 18 naar 160 graden en blijft daar. Door de drukknop een aantal keren in te drukken gaat de servo soms wel naar de 18 graden maar soms helemaal niet weer de enige remedie spanning van de servo afhalen en servo beweegt weer. Voor alle duidelijkheid de arduino blijft onderspanning.
Ik heb een en ander na zitten te lezen over de servo en voor de zekerheid een elco van 470 µF over de servo gezet.
Voeding van de servo gaat buiten de arduino om met een gekoppelde gnd en is 5V (telefoon voeding 2A)

Ik gebruik een MG996R servo uit China.
en een Arduino Nano.

Mijn gevoel zegt dat de software goed werkt want de ene keer wel en de andere keer niet klinkt niet logisch hoewel ik wel graag een andere oplossing zou willen hebben voor de drukknop met anti dender.(ik begrijp deze schrijfwijze niet).

Omdat de servo in ruststand zich zelf steeds corrigeert (je hoort onregelmatig een pulsje van de servo) heb ik detach() toegevoegd en dat helpt. Een la wordt tenslotte niet de hele dag open en dicht gedaan.

Mijn vraag is dus zit er iets fout in de code wat dit onberekenbare gevolg kan veroorzaken?

En, voor latere zorg, hoe kan ik de pulsdrukker code aanpassen. uiteindelijk moeten er straks 4 lade's apart aangestuurd worden.

voor de volledigheid natuurlijk hieronder de code.

En alvast bedankt voor de tips/correcties.

Code: Alles selecteren
```cpp
unsigned long time1;
unsigned long time2;
int input1 = 2;
int input2 = 3;
int instelhoek1 = 160;
bool servo_run = false;
#include <Servo.h>
int servoPin = 9;
Servo Servo1;

void setup() {
    Servo1.attach(servoPin);
  pinMode(input1, INPUT);
  pinMode(input2, INPUT);
    Servo1.write(instelhoek1);  // instelstand van servo
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH);
  Servo1.detach();
}

void loop() {
  if (digitalRead(input1) == LOW) {
    time1 = millis();
  }
  if (digitalRead(input2) == LOW) {
    time2 = millis();
  }

  if (time2 - time1 > 10 && time2 - time1 < 200) {
    time1 = 0;
    time2 = 0;
   
    servo_run = true;
  }

  if (servo_run) {
    Servo1.write(18);         //om doorschieten te corrigeren
    Servo1.attach(servoPin);  //deze twee regels verplaatst om detach te kunnen gebruiken


    servo_run = false;
    Servo1.write(18); 
    delay(1100);
    Servo1.write(instelhoek1);  //en weer terug naar 170
    delay(1000);                // was 2000 duurt te lang voor een volgende druk
    Servo1.detach();            //nu geen zenuwachtig getik meer
  }
}

```

Advertisement

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

Re: la opener

Berichtdoor shooter » 20 Jan 2023, 13:27

een attach heeft dus tijd nodig want het servo signaal is een tijdsignaal en dus direct detach gaat niet goed.
verder mis ik haakjes bij de IF want (time1-time2) werkt wel maar time2 >10 werkt niet en de servo heeft geen rust dus die probeert zijn stand telkens naar de tijd te zetten en alleen de servo veranderen als die ook inderdaad anders is want anders wordt er telkens een servo tijd neergezet en dus reset de servo telkens.
paul deelen
shooter@home.nl

Berichten: 8
Geregistreerd: 07 Jan 2023, 09:55

Re: la opener

Berichtdoor Harry » 20 Jan 2023, 13:47

shooter schreef:een attach heeft dus tijd nodig want het servo signaal is een tijdsignaal en dus direct detach gaat niet goed.
verder mis ik haakjes bij de IF want (time1-time2) werkt wel maar time2 >10 werkt niet en de servo heeft geen rust dus die probeert zijn stand telkens naar de tijd te zetten en alleen de servo veranderen als die ook inderdaad anders is want anders wordt er telkens een servo tijd neergezet en dus reset de servo telkens.


Bedankt voor het antwoord.
Begrijp ik het goed dat de wijziging als volgt er uit moet zien:
Attach en detach verwijderen uit de loop en
(time2 - time1) > 10 && (time2 - time1 < 200)

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

Re: la opener

Berichtdoor shooter » 20 Jan 2023, 14:03

een attach is prima in de setup en als je in de loop een detach zet loopt de servo timer niet meer en dus schiet deze naar alle kanten
en de if regel
Code: Alles selecteren
if (((time2 - time1) > 10) && ((time2 - time1) < 200)){


verder staat er servo run =false en dan gelijk een servo set onder elkaar maar dan is de servo nog lang niet op zijn setpuny
paul deelen
shooter@home.nl

Berichten: 8
Geregistreerd: 07 Jan 2023, 09:55

Re: la opener

Berichtdoor Harry » 22 Jan 2023, 10:07

shooter schreef:een attach is prima in de setup en als je in de loop een detach zet loopt de servo timer niet meer en dus schiet deze naar alle kanten
en de if regel
Code: Alles selecteren
if (((time2 - time1) > 10) && ((time2 - time1) < 200)){


verder staat er servo run =false en dan gelijk een servo set onder elkaar maar dan is de servo nog lang niet op zijn setpuny


Super bedankt, regel aangepast en servo reageert nu zoals het hoort.
Dat stukje over servo run = false begrijp ik niet, als ik dit verwijder gaat de servo constant heen en weer en valt na een aantal keer stil. Maak ik (alleen) de servo even spanningsloos dan gaat het weer verder met heen en weer draaien.

Verder hoor ik toch weer om de zoveel tijd een lichte correctie van de servo (dat hoopte ik op te vangen met detach). Daar is hij dus dag en nacht mee bezig en dat voelt niet veilig. De bediening vind misschien maar 5x op een dag plaats.

Misschien is daar ook nog iets zinvols over te zeggen.

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

Re: la opener

Berichtdoor shooter » 22 Jan 2023, 11:15

detach stopt het tijdsignaal naar de servo maar de servo zelf blijft wel voeding krijgen dus of de servo dan op de positie blijft is dus maar de vraag. en het blijft een analoge ding natuurlijk die afhankelijk is van een tijdpuls en een potmeter dus af en toe wat storing is heel normaal.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 636
Geregistreerd: 15 Nov 2015, 11:54

Re: la opener

Berichtdoor Gij Kieken » 22 Jan 2023, 15:17

Wat als, je gewoonweg de voedingsspanning van de Servo onderbreekt.
Je kan dit doen met een gewone schakelaar of via een output van de arduino icm een aantal input toetsen en een relais module voor de stroom te beperken op de output.
Eventueel een timer erop zetten als de lade geactiveerd is die de voeding van de Servos uitschakelt na een bepaalde tijd.

Terug naar Forum regels

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast