servo verder dan "val" bewegen

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 49
Geregistreerd: 09 Mei 2015, 15:57

Re: servo verder dan "val" bewegen

Berichtdoor doebi » 04 Aug 2016, 22:01

kan het zelf niet testen, maar zoals shooter reeds aangaf plaats haakjes rond val+pos<180 dit wordt dan (val+pos)<180 en doe hetzelfde met die andere if.

Advertisement

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen

Berichtdoor john33 » 07 Aug 2016, 15:29

Helaas, ook na het aanpassen van de code werkt het nog niet goed.
De servo verplaatst zich na het het drukken op de knop op pin 9.
Maar bij loslaten draait de servo weer terug naar de waarde val van de potmeter.

Druk ik op de knop op pin 8 dan gebeurt er helemaal niets...
code:
Code: Alles selecteren
#include <Servo.h>


Servo myservo;
int potpin = 3;     // analog pin used to connect the potentiometer
int val;            // variable to read the value from the analog pin

#define leftPin 8
#define rightPin 9
int pos = 90;
int delayPeriod = 10; // increasing this slows down the servo movement



void setup()
{
myservo.attach(4); // attaches the servo on pin 4 to the servo object
myservo.write(pos); // center the servo
pinMode(leftPin, LOW);
pinMode(rightPin, LOW);
}


void loop()
{
val = analogRead(potpin);         // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180);  // scale it to use it with the servo (value between 0 and 180)
myservo.write(val);               // sets the servo position according to the scaled value
delay(delayPeriod);

if ((digitalRead(leftPin) == HIGH)&& ((val+pos) < 180))
{
++pos;
myservo.write(val+pos);
}
else if ((digitalRead(rightPin) == HIGH) && ((val+pos) > 0))
{
--pos;
myservo.write(val+pos);
delay(delayPeriod);
}
}

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

Re: servo verder dan "val" bewegen

Berichtdoor shooter » 09 Aug 2016, 22:14

haal die else eens weg want daar staan geen {} bij.
en ik mis een delay bij leftpin
en erboven staat nog een myservowrite teveel.
er mag maar een write in het hele prog staan.
paul deelen
shooter@home.nl

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen

Berichtdoor john33 » 26 Aug 2016, 07:55

Met wat hulp van het Amerikaanse Arduino platform is het opgelost:

Ik heb de setup etc even weg gelaten, en alleen de loop geplaatst maar,
zo werkt het:
Code: Alles selecteren
void loop()
{
    if ((digitalRead(leftPin) == HIGH)
    {
        ++pos;
    }
    else if ((digitalRead(rightPin) == HIGH)
    {
        --pos;
    }
    val = analogRead(potpin);          // reads the value of the potentiometer (value between 0 and 1023)
    val = map(val, 0, 1023, 0, 180);  // scale it to use it with the servo (value between 0 and 180)
    int servoMove = val + pos;
    if (servoMove > 180) {
        servoMove = 180;
    }
    if (servoMove < 0) {
        servoMove = 0;
    }
    myservo.write(servoMove); // sets the servo position according to the scaled value
    delay(delayPeriod);

}


hiermee kun je de servo met de potmeter bewegen, maar met de drukknoppen beweegt de servo ook vanaf het punt waar je met de potmeter bent gestopt, en vanaf het punt waar je met de knop bent gestopt komt de potmeter weer in.
Voor mijn project werkt dit, het is geslaagd !!!!

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen (opgelost)

Berichtdoor john33 » 26 Aug 2016, 07:56

opgelost!

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen

Berichtdoor john33 » 01 Nov 2016, 21:08

Helaas, nog net niet helemaal opgelost....
Het werkt, dat wel.
Maar, en er is heel vaak een maar:

Ik heb in de code de maximale servo standen aangegeven, 35 en 140 graden, dus niet zoals in de laatste posting van mij 0 tot 180 graden.
Dit gaat ook goed, de servo stopt op het juiste moment.

Waarom dan toch nog een probleem, wel het volgende kwam boven water:
Bij het inhouden van de knop links of rechtsom draaien stopt de servo op de aangeven positie, maar als je de knop dan IN blijft vasthouden, zeg 5 seconden nadat de servo de eindpositie (35 of 140 graden) heeft bereikt dan duurt het ook weer circa 5 seconden voordat de servo weer gaat bewegen.
En dat is een minder fijne bijkomstigheid.

dus kort gezegd: knop links IN, servo draait naar positie links, stopt op 35 graden, ik houd de knop nog 5 seconden langer vast.
Nu druk ik de knop Rechts in, het duurt circa 5 seconden voordat de servo gaat bewegen en dan beweegt deze naar het andere software matige eindpunt, 140 graden.
Ik houd de knop daarna nog 10 seconden langer in, bij het linksom bewegen moet ik dan weer circa 10 seconden wachten en dan gaat de servo weer bewegen.

Het is net alsof de Arduino intern "door telt" als de knoppen langer worden ingedrukt dan nodig is.
Enig idee hoe dit eventueel aan te pakken is ?

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

Re: servo verder dan "val" bewegen

Berichtdoor nicoverduin » 01 Nov 2016, 22:49

klopt.pos krijgt een hele grote waarde die je eigenlijk gelijk op nul moet zetten als je buitenhet bereik ben.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen

Berichtdoor john33 » 02 Nov 2016, 07:47

Oké Nico, dat is weer een Weetje er bij.

Maar dan de volgende vraag, hoe verwerk je dit in de code?

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

Re: servo verder dan "val" bewegen

Berichtdoor nicoverduin » 02 Nov 2016, 12:34

John,
Dit
cpp code
if (servoMove > 180) {
servoMove = 180;
}
if (servoMove < 0) {
servoMove = 0;
}


Wordt:
cpp code
if (servoMove > 180) {
servoMove = 180;
pos = 180 - val; // mocht je bijv op 178 zitten dan wordt pos 2
}
if (servoMove < 0) {
servoMove = 0;
pos = 0 - val;
}


Wat je doet is dat op het moment dat je buiten het bereik dreigt te komen van de servo, die knoppen eigenlijk geen functie meer hebben. Dus zet je ze iedere keer op het verschil tot het uiterste. Binnen het gebied blijf je gewoon goed gaan.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 16 gasten