Doel:€250.00
Donaties:€128.00

Per saldo:€-122.00

Steun ons nu!

Laatst bijgewerkt
op 16-04-2024

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

2e leven van een buitendienst gestelde Gesloten goederenwagen. door Lolke Bijlsma
Vandaag om 00:07:01
Mijn eerste H0-modeltreinbaan in aanbouw door Frank103
Vandaag om 00:06:56
Efteling spoorweg gaat elektrisch door CAW
23 april 2024, 23:51:21
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
23 april 2024, 23:06:56
Märklin Hamo mP 3000 voorzien van nieuwe motor door hmmglaser
23 april 2024, 22:48:27
Starten met messing kits door 1795
23 april 2024, 22:43:57
Ronald en Wanda's "Southern Comfort" swamp layout! door Ronald Halma
23 april 2024, 22:37:57
18 t/m 21 april Intermodellbau '24 Dortmund door Ferdinand Bogman
23 april 2024, 22:37:02
NS gaat weer thuis oefenen in klanttevredenheid door MaraNCS
23 april 2024, 22:31:45
Kleine Baan in H0 (≤ 0.5m²) door Scratchbuilt
23 april 2024, 22:30:06
Am Ende der Strecke, modulebaan op 1 M2 door Ronald69
23 april 2024, 22:14:29
Treinreizen met m'n vader door defender
23 april 2024, 21:47:13
Pools diorama H0 door Klaas Zondervan
23 april 2024, 21:44:11
19 Toen door defender
23 april 2024, 21:43:28
Station Roodeschool door Torikoos
23 april 2024, 21:43:23
Ton bouwt goederenwagens door TonM
23 april 2024, 21:33:46
Lantaarns Crafftiq op Roco Sik door Priegelman
23 april 2024, 21:15:18
Dubbelom, een boekenplankspoorbaan in H0 door Klaas Zondervan
23 april 2024, 20:59:05
weerstandje en relais door Klaas Zondervan
23 april 2024, 20:47:42
Gekke/vreemde/rare filmpjes en video's met treinen erin. door ES44C4
23 april 2024, 20:45:40
DR4024 door Michaël dB
23 april 2024, 20:11:53
Haandrecht materieel door orientexpress
23 april 2024, 20:05:43
Toon hier je nieuwe (model-) spooraanwinst(en)... door ruudns
23 april 2024, 20:04:54
Alt Wutachbahn - Sau-Schwänzle-bahn Weizen - Zollhaus - Blumberg door Eric v C
23 april 2024, 20:01:12
NS 8400 van Werps door Ivo tB
23 april 2024, 19:28:41
firm ware voor 3 D printer door jerrytrein
23 april 2024, 18:58:32
modulebaan jaren 60 door rudi van der Craats
23 april 2024, 17:30:56
Decals Star TE-5933 door Martijn193
23 april 2024, 17:12:11
GSS Jubileumbaantje (0e / 0n30) door spoorijzer
23 april 2024, 16:59:09
RhB modelbaan in Aanbouw die Scalettabahn Davos-Dürrboden door Hollandserhbfan
23 april 2024, 15:53:47
  

Auteur Topic: Arduino, aansturen servo’s voor deuren lokloods werkt niet.  (gelezen 6227 keer)

Fritsprt

  • Offline Offline
  • Berichten: 2615
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #15 Gepost op: 24 mei 2021, 22:34:10 »
Hoi Jerry,

Volgens mij begrijpen we elkaar niet. Als jij mij een sketch het niet doet dan upload ik de blinksketch op de Arduino. En dan kijk ik of het ledje op D13 knippert. M.a.w. ik kijk of de sketch werkt. Zo ja, dan is de Arduino in orde.

Hoe is het met je massa verbinding tussen Arduino en servo?
Groet Frits

Menno

  • Offline Offline
  • Berichten: 3342
    • Mijn van-alles website
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #16 Gepost op: 24 mei 2021, 22:41:28 »
Ik heb de potmeters op een stroken prin gesoldeert
de middelste baan door gekrabt
Krabben doe ik zelf niet meer aan. Dat heeft bij mij te vaak voor gelazer gezorgd omdat er dan een minuscule verbinding bleek te zijn door een kopersnipper of net niet geheel doorgekraste baan.
Een 4 mm boortje even met de hand over een gaatje halen om de boel van elkaar te scheiden werkt veel beter.
Controleer dit dus als eerste eens. Je zal de eerste niet zijn die het op het oog goedkeurt, maar in werkelijkheid last heeft van een doorverbinding die je praktisch niet kunt zien.

Ook de massa is van de arduino en de potmeters door verbonden
GOED lezen wat Fritsprt schrijft:

Heb je de massa van de servo en die van de arduino met elkaar verbonden?

Dit is een belangrijke, want de massa van de servo moet de massa van de Arduino niet 'zien': dit betekent simpelweg dat je niet de massa van je Arduino-print moet gebruiken, maar deze buiten de controller om moet leiden. Op deze manier voorkom je dat stoorpulsen je controller in de war sturen. En die kans is met servo's erg groot.

jerrytrein

  • Offline Offline
  • Berichten: 5810
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #17 Gepost op: 25 mei 2021, 21:03:04 »
Heb het werkend (deels)
Eerst bleek een voeding de geest te hebben gegeven.
Nog een voeding naar de hemelen (waren telefoonladers)
Nu 1 voeding werkend voor de servo's
En een powerpack voor het board
Heb alles nu op een bread board gemonteerd

Volgende
er werkt maar een servo(op d9)
Dit is de schets die geladen is
op de bovenste val heb ik de getallen anders gezet
deze servo beweegt,maar niet naar 0 en dan 180 (deur open,dicht)

#include <Servo.h>

Servo myservo3;

Servo myservo5;

Servo myservo6;


int potpin = 0;
int potpin2 = 1;

int potpin3 = 2;

int val = 0;
int val2 = 0;

int val3 = 0;

void setup()
{

myservo3.attach(9);
myservo5.attach(10);

myservo6.attach(11);

}

void loop()
{

val = analogRead(potpin);
val = map(val, 0, 180, 0 , 176);

myservo3.write(val);

delay(25);

val2 = analogRead(potpin2);
val2 = map(val2, 0, 360, 0, 176);

myservo5.write(val2);

delay(25);

val3 = analogRead(potpin3);
val3 = map(val3, 3, 1023, 0, 175);

myservo6.write(val3);

delay(25);

}

NL-modelspoor

  • Offline Offline
  • Berichten: 991
    • Windhoven
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #18 Gepost op: 25 mei 2021, 21:45:06 »
Snap je wel wat de map functie doet? De analogeRead geeft een waarde tussen 3 en 1023 welke door de map functie wordt omgezet naar 0 tot 176 graden van de servo.
Wat probeerde je te bereiken met het aanpassen van de waardes?
Johan

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #19 Gepost op: 25 mei 2021, 22:46:20 »
Zet de code tussen [ code]... [ /code] tags, dan is het beter leesbaar.
Gebruik const voor 'potpin', niet int.
Waarom 3 variabelen voor 'val'? 1 kan ook, het kan zelfs zonder, in 1 myservo.write(....) regel.
Waarom die 'delay(25)'?

Een deur draait maar 90°, waarom moet een servo dan 180° draaien?
« Laatst bewerkt op: 25 mei 2021, 23:25:00 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

jerrytrein

  • Offline Offline
  • Berichten: 5810
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #20 Gepost op: 25 mei 2021, 23:10:10 »
Johan
ik ben een leek met deze materie,en heb zoals in het begin aangegeven de schets gewoon overgenomen
Sonett
Kan je bij de eerste tussen + aangeven wat je waar bedoelt+
de ene servo bewoog heen en weer,en nu is de slag groter
ik probeer enkel de servo met de pot meter van 0 naar 90 graden te draaien

moet snachts werken dus welterusten
reageer morgen weer

RobGood

  • Offline Offline
  • Berichten: 155
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #21 Gepost op: 25 mei 2021, 23:12:29 »
delay?? Een delay in de loop? Dat kan gewoon never nooit niet....

MOVisser

  • Offline Offline
  • Berichten: 6172
    • Modelbouw in't algemeen. 3D printen etc..
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #22 Gepost op: 25 mei 2021, 23:44:39 »
Volgens mij zijn de getallen die bij de servo hoek zijn opgenomen niet juist/verdienen aanpassing

Een delay is inderdaad in dit geval niet nodig.
Tenzij je de draai-snelheid van de servo wil beïnvloeden, maar dan staan ze niet op de juiste plaats en niet goed gedefinieerd.

Ronald Visser
Je kunt me vinden op diverse treinenbeurzen. Houten 18 mei sta ik er weer. Ook met N-schaal.

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #23 Gepost op: 25 mei 2021, 23:45:25 »
Zoiets:
#include <Servo.h>
Servo myservo3;
Servo myservo5;
Servo myservo6;

const int potpin1 = A1;    // analoge invoerpinnen voor potmeters
const int potpin2 = A2;
const int potpin3 = A3;

const int servopin3 = 9;  // digitale uitvoerpinnen voor servo's
const int servopin5 = 10;
const int servopin6 = 11;

int val;
// ---------------------------------
void setup() {
  pinMode(potpin1,INPUT);       // maak invoer voor potmeters
  pinMode(potpin2,INPUT);
  pinMode(potpin3,INPUT);
  pinMode(servopin3,OUTPUT); // maak uitvoer voor servo's
  pinMode(servopin5,OUTPUT);
  pinMode(servopin6,OUTPUT);

  myservo3.attach(servopin3);
  myservo5.attach(servopin5);
  myservo6.attach(servopin6);
}
// ---------------------------------
void loop() {
  val = analogRead(potpin1);          // val = 0..1023
  val = map(val, 0, 1023, 0 , 180);   // val = 0..180
  myservo3.write(val);   // draai servo naar hoek 'val'
  delay(25);

  val = analogRead(potpin2);
  val = map(val, 0, 1023, 0, 180);
  myservo5.write(val);
  delay(25);

  val = analogRead(potpin3);
  val = map(val, 0, 1023, 0, 180);
  myservo6.write(val);
  delay(25);

// of in één regel per servo
  myservo3.write(map(analogRead(potpin1), 0,1023,0,180));
  myservo5.write(map(analogRead(potpin2), 0,1023,0,180));
  myservo6.write(map(analogRead(potpin3), 0,1023,0,180));
// delay is niet nodig
}
« Laatst bewerkt op: 26 mei 2021, 11:31:14 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

spock

  • Offline Offline
  • Berichten: 653
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #24 Gepost op: 25 mei 2021, 23:57:06 »

Dit is een belangrijke, want de massa van de servo moet de massa van de Arduino niet 'zien': dit betekent simpelweg dat je niet de massa van je Arduino-print moet gebruiken, maar deze buiten de controller om moet leiden. Op deze manier voorkom je dat stoorpulsen je controller in de war sturen. En die kans is met servo's erg groot.

Bedoel je echt dat je zwevende nullen wilt introduceren om storingen te voorkomen?
Ik zit pas 40 jaar in de electronica, maar dit is een nieuw gegeven.

mvg spock


Fritsprt

  • Offline Offline
  • Berichten: 2615
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #25 Gepost op: 26 mei 2021, 01:14:59 »
Ik bedoelde juist te zeggen dat de massa's aan elkaar moeten omdat de stuurpuls anders zweeft en de servo nooit zal gaan draaien. Maar dat heeft TS inmiddels begrepen.
Groet Frits

bask185

  • Offline Offline
  • Berichten: 4058
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #26 Gepost op: 26 mei 2021, 08:42:46 »
delay?? Een delay in de loop? Dat kan gewoon never nooit niet....
Het enige wat never nooit niet kan, is beklaag doen zonder ook met een alternatief te komen. Jerry heeft al tig keer aangegeven dat dit allemaal nieuw is voor hem. Dus om dan alleen maar te zeggen: "delay is fout" daar is hij niet bij geholpen.

+ een delay in de loop kan hartstikke prima maar dat hangt van de applicatie af. Als je arduino niks meer en niks minder hoeft te doen dan 1 enkel lampje te laten knipperen dan is delay() een prima oplossing. Het is immers minder tik werk dan die hele millis() constructie.

Citaat
ik probeer enkel de servo met de pot meter van 0 naar 90 graden te draaien
Omdat te doen, moet je de waardes in je map functie aanpassen je doet namelijk een waarde van 0-1023 om'map'pen naar 0-90. Dat is hoe de functie werkt.
val = map( val, 0, 1023, 0, 90) ;

Citaat
Gebruik const voor 'potpin', niet int.
Leg dan ook even uit waarom...

Citaat
Waarom 3 variabelen voor 'val'? 1 kan ook, het kan zelfs zonder, in 1 myservo.write(....) regel.
Waarom die 'delay(25)'?

Een deur draait maar 90°, waarom moet een servo dan 180° draaien?
Omdat hij niet beter weet. Je kan dit ook anders verwoorden. Je hebt het waarschijnlijk niet door, maar de manier waarop je je vragen stelt, suggereert eigenlijk maar een ding en dat is: 'je doet het niet goed, punt'. Je kan ook uitleggen waarom een delay() niet nodig is en je kan ook nog uitleggen waarom je normaliter geen delay zou moeten gebruiken en wat je in plaats van een delay wel kan gebruiken.

@Jerry.
Ik heb een library gemaakt voor precies dit soort use-cases. Wat je nu nog misschien niet weet, is dat je straks de deuren langzamer wilt laten bewegen en dat je het servo signaal wilt uitschakelen nadat de deuren goed gaan om zo schuddende en jitterende deurtjes te voorkomen.

Mijn library doet precies die 2 dingen voor je toevoegen. Dan hoef je zelf niet aan te klooien.
Ik heb ook een simpele debounce library gemaakt, om je te helpen bij het inlezen van een schakelaar. Een schakelaar kan tijdens het schakelen gaan denderen, de library lost dat op. Deze library zorgt er ook voor dat je je programma kan laten reageren op de momenten dat je je schakelaar beweegt.

Ik heb overigens een alternatief voor je delay gemaakt. Een delay wordt normaliter als 'kwaadaardig' beschouwd omdat je feitelijk je arduino forceert om helemaal niks te doen. Als je arduino niks anders te doen heb, maakt het niet uit. Moet je Arduino nog meer taken doen, dan pas vormt het een probleem. Om dat probleem op te lossen, gebruikt men vaak de millis() functie. Daar kan je meer over lezen hier. Ik heb zelf 2 macro's gemaakt die gebruik maken van millis().

De sketch met deze libraries ziet er dan zo uit.
#include "servoSweep.h"
#include "Debounce.h"


// alle code wat je tussen REPEAT_MS() en END_REPEAT zet wordt om de x ms uitgevoerd zonder programma te blokkeren.
#define REPEAT_MS(x)    {
                            static uint32_t previousTime ;
                            uint32_t currentTime = millis() ; \
                            if( currentTime - previousTime >= x ) \
                            {   \
                                previousTime = currentTime ;
                         
#define END_REPEAT          } \
                        }


const int swPin1 = 3 ;
const int servoPin1 = 5 ;
const int servoPin2 = 6 ;

Debounce sw1( swPin1 ) ;
//                   servoPin,min,max,off,speed (grotere speed = langzamere beweging)
ServoSweep myServo1( servoPin1, 0 , 90, 1, 30 ) ;
ServoSweep myServo2( servoPin2, 0 , 90, 1, 30 ) ;


void setup()
{
    myServo.begin() ;
}

void loop()
{
    REPEAT_MS( 20 ) ;
    sw1.debounceInputs() ;                      // doe dit elke 20ms, ont'dentert de schakelaar.
    END_REPEAT
   
    byte buttonState = sw1.readInput() ;        // doe dit continu, lees knopje in
   
    if( buttonState == RISING )
    {
        myServo1.setState( 1 ) ;                // stuur naar 90 graden
        myServo2.setState( 1 ) ;
    }
    if( buttonState == FALLING )
    {
        myServo1.setState( 0 ) ;                // stuur naar 0 graden
        myServo2.setState( 0 ) ;
    }
    //N.B. je zou de deuren ook kunnen laten toggelen met een drukknopje
   
    myServo1.sweep() ;                          // stuurt de servo's aan met opgegeven snelheid en..
    myServo2.sweep() ;                          // .. schakelt ze af als ze hun eindposities bereikt hebben.
}

Voordat je dit kan compileren, moet je eerst m'n libraries downloaden. Je vindt ze hier. Je moet de servoSweep.cpp, ServoSweep.h, debounceClass.cpp en debounceClass.h downloaden en in dezelfde folder plaatsenals waar je .ino staat.

Deze sketch gebruikt 1 schakelaar als input om 2 servo's mee aan te sturen. Nogmaals, de servo's kan je hierbij regelen in snelheid. En ze worden keurig afgeschakeld nadat ze hun positie bereikt hebben.

Mvg,

Bas



Train-Science.com
Train-Science github
It ain't rocket science ;-)

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #27 Gepost op: 26 mei 2021, 10:14:22 »
... de manier waarop je je vragen stelt, suggereert eigenlijk maar een ding en dat is: 'je doet het niet goed, punt'.
Ik weet niet wat de overwegingen waren om het te doen zoals het gedaan is, daarom vraag ik waarom.

Als je iemand iets duidelijk wil maken is het beter om vragen te stellen dan om hem te vertellen wat/hoe het gedaan moet worden.
El Carrilet
"te dom om te poepen"
MH

72sonett

  • Team encyclopedie
  • Offline Offline
  • Berichten: 2083
    • El Carrilet
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #28 Gepost op: 26 mei 2021, 10:42:19 »
... ik merk net dat het voor een analogRead niet uitmaakt of je pin 0 of pin A0 invult.
Weet je dat zeker?  Pin 0 is een andere dan A0, voor het compileren maakt het niet uit, een analogRead van een digitale pin geeft geen compileerfout, maar bij uitvoeren van het programma zal het niet goed gaan, pinnen 0 en 1 zijn RX en TX.

De snelheid waarmee de servo's en daarmee de deuren bewegen, bepaal je zelf door de snelheid waarmee je aan de potmeters draait, daar is geen delay voor nodig. De servo's/deuren bewegen synchroon met de potmeters. Ik zou daarom ook helemaal geen Arduino gebruiken maar servotesters.

Een locloods heeft doorgaans twee deuren per spoor, die deuren zullen tegelijk open/dicht gaan, je hebt dus ook twee servo's per spoor nodig. Voor het programma maakt dat niet uit, je kunt twee servo's parallel op één uitgang aansluiten en die verdraaien dan tegelijkertijd.
« Laatst bewerkt op: 26 mei 2021, 15:12:53 door 72sonett »
El Carrilet
"te dom om te poepen"
MH

Hennik

  • Offline Offline
  • Berichten: 155
Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
« Reactie #29 Gepost op: 26 mei 2021, 12:28:31 »
Zeker weten deed ik het ook niet, maar het stond zo in de tutorial uit de eerste post en heb empirisch vastgesteld dat het kan (in mijn geval met 4 en A4)
En hier vind ik er een artikeltje over: https://electronics.stackexchange.com/questions/67087/analogread0-or-analogreada0
Ik zou ook adviseren om gewoon A0 te gebruiken. Veel duidelijker.
« Laatst bewerkt op: 26 mei 2021, 12:34:16 door Hennik »