BeneluxSpoor.net forum

Vraag en antwoord => Elektronica en analoog => Topic gestart door: jerrytrein op 24 May 2021, 18:11:37

Titel: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 24 May 2021, 18:11:37
Ben al een week aan het proberen
Ik wil mijn locloods 3 deuren met een servo open en dicht doen
Ik begon met een uno
Uit arduino een schets gezocht servo met knop
werkte niet
Een andere gezocht deze
 https://www.instructables.com/Controlling-3-servo-motors-with-3-potentiometers-a/#:~:text=%20Controlling%203%20Servo%20Motors%20With%203%20Potentiometers,Potentiometer%201.%20This%20diagram%20shows%20what...%20More%20
alles exact stap voor stap gedaan
werkt niet en de uno is ook defect
Toen op een nano gezet
Werkt ook niet
Toen een schets voor 1 servo, en 2 nano 's
Werkt ook niet

Ik heb nog 2 nano ,deze
Nano 3.0 controller compatible for CH340 USB driver 16Mhz NANO V3.0 Atmega328

en deze
MEGA2560 MEGA 2560 R3 ATmega2560-16AU CH340G AVR USB board Development board MEGA2560 for arduino

wie kan mij op weg helpen met een werkend iets
Ik heb al diverse schetses geprobeerd ook  met 1 servo
de servos maken wel geluid,maar reageren dus niet op de potmeter(s)
Titel: Re: arduino word er dol van
Bericht door: HansQ op 24 May 2021, 18:17:43
Je wilt de positie van de servo afhankelijk maken van de potmeter? Die schets van Instructables zou dan moeten werken...
Heb je ales wel goed aangesloten? Hoe doe je de voeding van de servos? Met 4x 1,5V batterijen zoals in die schets?

Of wil je gewoon 1 servo met een schakelaar voor open en dicht?
Titel: Re: arduino word er dol van
Bericht door: 72sonett op 24 May 2021, 18:25:48
Je wilt een servo met een potmeter laten draaien? Neem dan een servotester.
(https://images-na.ssl-images-amazon.com/images/I/61NTk3uwd3L._AC_SL1500_.jpg)
Titel: Re: arduino word er dol van
Bericht door: HansQ op 24 May 2021, 18:34:42
Kijk naar dit voorbeeld, dit is met een draaiknop/potmeter. Als je dit werkend hebt, kun je het uitbreiden naar 3 servo's.
Belangrijk bij servos is een flinke 5V voeding, bij 3 servos zou ik een 2A 5V voeding gebruiken, niet de 5V vanaf de Arduino.

https://www.arduino.cc/en/Tutorial/Knob
Titel: Re: arduino word er dol van
Bericht door: AP3737 op 24 May 2021, 18:45:23
Heb je Mobatools al geprobeerd: https://github.com/MicroBahner/MobaTools (https://github.com/MicroBahner/MobaTools)
Bij onze oosterburen (Stummiforum) vind je daar veel discussies en ervaring: https://www.stummiforum.de/viewtopic.php?t=127899 (https://www.stummiforum.de/viewtopic.php?t=127899).
Verder kan het volgende interessant zijn: https://stummiforum.de/viewtopic.php?t=178411 (https://stummiforum.de/viewtopic.php?t=178411)

Krijg je de arduino’s overigens wel aan de praat met simpele testjes zoals “blink”. Sommige Chinese  varianten zijn niet helemaal standaard, en vereisen wat meer moeite om ze aan de praat te krijgen. Dus ligt het aan je arduino’s, of aan de servo software.

Groet, Aiko
Titel: Re: arduino word er dol van
Bericht door: Hans1963 op 24 May 2021, 18:48:36
Een zeer uitgebreide uitleg van servo's en voorbeelden van sketches en de toepassingen kun je hier vinden. (incl. gebruik van potmeters)
Ook het gebruik van de PCA9685 voor het aansturen van 16 servo's komt aan bod.


https://www.youtube.com/watch?v=kUHmYKWwuWs&t=2165s (https://www.youtube.com/watch?v=kUHmYKWwuWs&t=2165s)
Titel: Re: arduino word er dol van
Bericht door: jerrytrein op 24 May 2021, 18:50:18
sonett ,dat kan ook,maar ik wil ook wissels met servo's bedienen

Hans q
ik heb een voeding 6 volt op de servo's ,en afgetakt ook op de arduino.
potmeter 10K op een stukje printplaat
Links op de plus,rechts op de min en midden op A0 van de arduino
D9 op de oranje draad vd servo
en de rode en bruine vd servo op plus en min
 ???
aiko
Ik kijk dagelijks op stummi en ook de verschillende arduino posts

Hans daar ga ik eens lekker in snuffelen
Titel: Re: arduino word er dol van
Bericht door: bask185 op 24 May 2021, 19:19:44
..ik heb een voeding 6 volt op de servo's ,en afgetakt ook op de arduino..
Heb je op de arduino hiervoor de Vin pin of de 5V pin gebruikt? Als het antwoord #2 is, is je waarschijnlijk arduino overleden. En ook niet alle servo's zijn 6V tollerant.

Maar Jerry eerste even wat anders. Ik herinner me nog goed je vorige arduino draadje toen je een ledstrip wilde aansturen met PWM. Nadat we je 3x hadden verteld niet de analoge pinnen te gebruiken, had je alsnog de analoge pinnen gebruikt.
https://forum.beneluxspoor.net/index.php?topic=90339.msg3222065391#msg3222065391 (https://forum.beneluxspoor.net/index.php?topic=90339.msg3222065391#msg3222065391)

Nadat we je daarna nog 2 keer vertelden welke je wel moest gebruiken, gebruikte je nog steeds de analoge pinnen. Ik had je toen nog gevraagd of je een foto kon maken van je schakeling, maar ik kreeg er niet eens antwoord op.
https://forum.beneluxspoor.net/index.php?topic=90339.msg3222066324#msg3222066324 (https://forum.beneluxspoor.net/index.php?topic=90339.msg3222066324#msg3222066324)

En op het einde van de rit, heb je niet eens verteld of het je nu wel of niet gelukt was.

Als verschillende mensen die je proberen te helpen 5x precies hetzelfde tegen je zeggen wat je moet doen en je doet het dan vervolgens alsnog steeds niet dan houdt de hulp ook een keer op. Je had toen gewoon concreet niet geluisterd naar alles wat we je vertelden en ik voelde me zelf nog gewoon keihard genegeerd.

Dus ik geef je nu als advies: Koop een kant en klare oplossing, de Mardecs van Nico Teering doen wat je wilt, volgens mij heeft digikeijs ook DCC apparaten, en op conrad kan je ook dit soort servo dingen kopen, succes verder.

Bas
Titel: Re: arduino word er dol van
Bericht door: 72sonett op 24 May 2021, 19:22:57
... ik wil ook wissels met servo's bedienen
Met de servotester bedien je een servo die een wissel omzet.
Titel: Re: arduino word er dol van
Bericht door: NL-modelspoor op 24 May 2021, 19:28:47
En geef anders aan wat er niet werkt. Krijg je het programma wel goed geladen?
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 24 May 2021, 19:47:19
BASK sorry daarvoor
Ik had er zo de balen van ,alles in een doos gegooid en dacht komt wel weer eens ooit

sonnet
Dat is wel zo en ook simpel,Maar ik wil toch wel eens verder met arduino

NL modelspoor
ik krijg wel de schets op de uno en mini geladen
De servo's brommen zelfs
Maar met de pot meter willen ze niets verder doen
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: Fritsprt op 24 May 2021, 20:47:58
Wat ik meestal doe als iets niet werkt is even de blink sketch uploaden naar de Arduino. Knippert het ledje, dan is het uploaden en de Arduino dus in orde. Dan wordt het tijd om verder te zoeken. Heb je de massa van de servo en die van de arduino met elkaar verbonden?

Gr. Frits
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: meino op 24 May 2021, 21:05:47
Ik heb voor Kranenberg een draaischijf d.m.v. een Arduino geautomatiseerd, Maar in de zelfde schets stuur ik ook 2 servo's aan om de deuren van een locloods open of dicht te doen. Dat doe ik door in de schets een servo langzaam van de open positie naar de gesloten positie te laten gaan of visa-versa. De schets zelf is waarschijnlijk niet direct bruikbaar (te veel ander spul zoals de Canbus), maar ik zou een uittreksel daarvan kunnen maken zodat je een idee hebt hoe het werkt.

Groet Meino
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: Hennik op 24 May 2021, 21:40:19
Een andere gezocht deze
 https://www.instructables.com/Controlling-3-servo-motors-with-3-potentiometers-a/#:~:text=%20Controlling%203%20Servo%20Motors%20With%203%20Potentiometers,Potentiometer%201.%20This%20diagram%20shows%20what...%20More%20
alles exact stap voor stap gedaan

Dit is op zich wel een mooie uitgebreide tutorial. Als het hiermee niet lukt, dan weet ik niet met wat wel.. ware het niet dat er volgens mij in de sketch een foutje is geslopen.
Vervang dit:
int potpin = 0;
int potpin2 = 1;
int potpin3 = 2;

door dit:
int potpin = A0;
int potpin2 = A1;
int potpin3 = A2;

En daarna werkt deze prima (net zelf even getest met een Nano).


Edit.. ik merk net dat het voor een analogRead niet uitmaakt of je pin 0 of pin A0 invult.... dus niks mis met die tutorial!

Als je servo's brommen dan vermoed ik dat je ze verkeerd hebt aangesloten, of de potmeter zit niet goed.
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 24 May 2021, 22:25:37
Frits
met uploaden knippert het ledje op de arduino

Meino
Ik wil graag om te leren de schets
Mag hier en of pm

Hennik
Ik heb de potmeters op een stroken prin gesoldeert
de middelste baan door gekrabt
en daar de draad van de A 0,1 en 2 op gezet
Ook de massa is van de arduino en de potmeters door verbonden
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: Fritsprt op 24 May 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?
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: Menno op 24 May 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.
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 25 May 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);

}
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: NL-modelspoor op 25 May 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?
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: 72sonett op 25 May 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?
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 25 May 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
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: RobGood op 25 May 2021, 23:12:29
delay?? Een delay in de loop? Dat kan gewoon never nooit niet....
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: MOVisser op 25 May 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
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: 72sonett op 25 May 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
}
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: spock op 25 May 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

Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: Fritsprt op 26 May 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.
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: bask185 op 26 May 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 (https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay). 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 (https://github.com/bask185/State-Machine-Scripts/tree/master/modules). 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



Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: 72sonett op 26 May 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.
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: 72sonett op 26 May 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.
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: Hennik op 26 May 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.
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: bask185 op 26 May 2021, 13:07:19
Zou die potmeter niet tijdelijk zijn om een beetje de feeling van servo's te krijgen? Het lijkt mij, dat als je de bediening onder de knie heb, dat je dan de deuren met een schakelaartje om wilt kunnen zetten of kan toggelen met een knopje ofzo. Maar daarvoor moeten we op Jerry's antwoord wachten.

Bas
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: 72sonett op 26 May 2021, 15:09:05
Zeker weten deed ik het ook niet...
Je hebt gelijk, blijkbaar 'snapt' de Arduino dat als je een analogRead doet, dat ook altijd op een analoge pin is en analogRead (0) wordt gecompileerd als analogRead (A0)
Citaat
Ik zou ook adviseren om gewoon A0 te gebruiken. Veel duidelijker.
Ja, mee eens.
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: MOVisser op 26 May 2021, 15:31:45
Start met het maken van een juist schema.
Maak de voedingen naar de servo’s apart van de voeding naar de arduino.
Maak de servo/servo’s pas vast aan de deur/deuren als deze juist is/zijn ingesteld (op de locatie van 0, is de beginstand)
Plaats de potmeters op een vaste plaats evenals de arduino (na uploaden van de sketch.)
Bedenk hoe snel je de servo wil laten draaien, of gewoon met de knop mee bewegend.


Schema van de aansluiting van 1 servo direct op arduino
Geel geeft het signaal naar de servo.  Rood en zwart zijn de voeding.

(https://images.beneluxspoor.net/bnls/servo-1-60ae4b97030d9.jpg) (https://images.beneluxspoor.net/bnls/servo-1-60ae4b97030d9.jpg)


Schema van de aansluiting van 1 servo direct op arduino
Geel geeft het signaal naar de servo.  Rood en zwart zijn de voeding. 
De sketch leest de waarde van de potmeter blauw en geeft dat door via de gele draad.

(https://images.beneluxspoor.net/bnls/servo-2-60ae4b9718a2c.jpg) (https://images.beneluxspoor.net/bnls/servo-2-60ae4b9718a2c.jpg)



Voeding voor 3 servo’s niet doen vanuit de arduino, maar apart.
Aansluiten servo’s  op pin 9, 10 en 11. 
De middelste aansluiting potmeter ( 10.000  Ohm) op A0, A1 en A2.

(https://images.beneluxspoor.net/bnls/fig-1-60ae4b9703ccf.jpg) (https://images.beneluxspoor.net/bnls/fig-1-60ae4b9703ccf.jpg)

Werking: Sketch leest af de waarde aan pin A0, A1 en A2.
Draai je de pot. naar links dan is de waarde geheel + (= 5V), geheel naar rechts is – (= 0V).
Daarmee bepaal je de stand van de servo.

PAS OP:  de waarden val1, val2 en val3 zijn 0 in het begin>> servo stelt zich in op de beginstand
(zie ook de eerdere opmerking) dus op stand 0 van de servo zijn of deuren open of deuren dicht.

Schrijf je sketch en upload deze naar de arduino (deze is getest en werkt)

#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;
int potpin1=A0;
int potpin2=A1;
int potpin3=A2;
int val1=0;
int val2=0;
int val3=0;

void setup()
{
myservo1.attach(9);
myservo2.attach(10);
myservo3.attach(11);
}
void loop()
{
val1 = analogRead(potpin1);
val1 = map(val1, 0, 1023, 0, 180);
myservo1.write(val1);
delay(25);
val2 = analogRead(potpin2);
val2 = map(val2, 0, 1023, 0, 180);
myservo2.write(val2);
delay(25);
val3 = analogRead(potpin3);
val3 = map(val3, 0, 1023, 0, 180);
myservo3.write(val3);
delay(25);
}

Ronald Visser

EDIT:
wellicht handig om na het stoppen van het "spel" de potmeters op de 0 stand te zetten.
Om dan de eerst volgende keer weer vanuit de basis stand te starten
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: Fritsprt op 26 May 2021, 15:41:55
Voor de volledigheid:
Citaat
Voeding voor 3 servo’s niet doen vanuit de arduino, maar apart.

Denk er dan wel aan om de massa's (min, 0V) van de Arduino voeding en de servo voeding met elkaar te verbinden.

(https://images.beneluxspoor.net/bnls/Massa-servo-arduino-60ae4ff8bc0ad.jpg) (https://images.beneluxspoor.net/bnls/Massa-servo-arduino-60ae4ff8bc0ad.jpg)

Gr. Frits
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: MOVisser op 26 May 2021, 15:48:55
Is volgens mij niet nodig, maar zou kunnen.
Altijd goed. (y)

Ronald Visser
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: 72sonett op 26 May 2021, 15:50:35
PAS OP:  de waarden val1, val2 en val3 zijn 0 in het begin>> servo stelt zich in op de beginstand
Nee, de beginwaarden van val1, val2 en val3 worden meteen overschreven met de analogRead.

Citaat
Schrijf je sketch en upload deze naar de arduino (deze is getest en werkt)
zet code tussen codetags;
#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;
int potpin1=A0;
int potpin2=A1;
int potpin3=A2;
int val1=0;
int val2=0;
int val3=0;

void setup()
{
myservo1.attach(9);
myservo2.attach(10);
myservo3.attach(11);
}
void loop()
{
val1 = analogRead(potpin1);
val1 = map(val1, 0, 1023, 0, 180);
myservo1.write(val1);
delay(25);
val2 = analogRead(potpin2);
val2 = map(val2, 0, 1023, 0, 180);
myservo2.write(val2);
delay(25);
val3 = analogRead(potpin3);
val3 = map(val3, 0, 1023, 0, 180);
myservo3.write(val3);
delay(25);
}
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 26 May 2021, 16:56:05
@Sonett Mo Visser en Frits
Ik heb aangesloten als de 3e van mo
Tijdens het vergelijken met Mo zijn schets zie ik wel een aantal verschillen
val zie ik al het verschil in het aangeven van de pinnen,Ao ipv 0

Heb ik een leken vraag
analoog read snap ik lees de pin
write snap ik ook nog
VAL is dat de waarde of zie ik dat verkeerd
Ik probeer het en beetje te doorgronden

Ik denk weer een beetje aan LOTUS van vroeger
kan je niet vergelijken ,maar daar moest je ook op de haakjes tags en komma's letten
En ik begrijp uit het bovenstaande van jullie ,dat als de pot meters niet op 0 staan bij starten de werking anders wordt
klopt dat
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: bask185 op 26 May 2021, 17:10:07
val is idd de waarde. analogRead() retourneert een waarde en die waarde wordt in val opgeslagen. Deze waarde ligt ergens tussen de 0 en 1023.

Die map functie schaalt dat om naar 0 tot 90 voor het gebruik voor je servo motors.

Er is trouwens nog een interessant feitje. Het is wel degelijk nodig dat er tenminste 1 delay (of andere manier van timing) in de loop staat. Ik weet van de atmel chips het fijne er niet van, maar bij een analoge meting zijn vaak interrupts betrokken. En als je in je loop continu analogRead te snel aanroept zonder iets van een delay, kan je programma vast lopen. Ik denk dat de kerel van de instructable, daarom kleine delays heeft geplaats tussen de metingen. Een analogRead duurt 100 micro seconde.

Bovendien is het ook een beetje puntloos om zoveel metingen en servo updates te doen per seconde. Als je je potmeters 10x per seconde in leest dan zit je ook wel goed.

Mvg,

Bas
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: Fritsprt op 26 May 2021, 17:12:54
Ik heb aangesloten als de 3e van mo

Dan gaat je servo nooit draaien. De stuurpuls zweeft immers t.o.v. massa. Je moet altijd de massa's (van de twee voedingen) met elkaar verbinden.

Gr. Frits
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: MOVisser op 26 May 2021, 17:30:25
Het advies blijft de de beginstand te eerbiedigen.
Dus op 0 eindigen en op 0 starten.
(y) (y)

Dus de servo van te voren in de 0 stand zetten. Dan vastmaken aan de deur.

Er staat A0 en niet Ao  Let dus goed op...

Ja, lees de waarde VAL.    intval1=0 etc.  de integer val1 wordt gedefinieerd en gelijk op een waarde gezet :  0

Mijn ervaring is wat 72sonett zegt. Maar weet Arduino dat ook??
Echter je kan beter fouten voorkomen dan ze mogelijk introduceren.
Dus zet de potmeter aan het eind op de beginstand.
De technici zijn naar huis en de deuren van de loodsen zijn gesloten.

Citaat
"Die map functie schaalt dat om naar 0 tot 90 voor het gebruik voor je servo motors".
nee 0 tot 1023  wordt omgeschaald naar 0 tot 180 (in dit geval in de sketch).

Ronald Visser
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 26 May 2021, 18:11:37
 (y) (y) (y) (y)
Het werkt
Nog een klein ding/vraagje
De pot meters (ze werken anders om als gedacht)
Maar deze werken dus tot ongeveer de helft van de draaing van de potmeter
Kan je dit met VAL  = MAP aanpassen

En de voeding van de NANO gaat nu via een usb
Als ik een voeding gebruik ,moet ik dan de VIN gebruiken en de ground (mijn gedachte Volt IN gang
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: bask185 op 26 May 2021, 18:17:12

nee 0 tot 1023  wordt omgeschaald naar 0 tot 180 (in dit geval in de sketch
wellus* want Jerry heeft als eis gesteld dat de motors maar 90 graden hoeven te draaien. Vandaar de 90  :P

Als je wilt dat ze andersom werken kan je de 0 en de 90 omwisselen in de map functie. Dus
Val = map( val, 0, 1023, 90, 0 ) ;

Ben iig blij dat het werkt   (y)

Bas
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: MOVisser op 26 May 2021, 18:42:03
Het werkt.  (y)
Ik sluit af.

Ronald Visser
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt.
Bericht door: 72sonett op 26 May 2021, 18:47:15
(y) (y) (y) (y)
Het werkt
Dat is mooi!
Citaat
Nog een klein ding/vraagje. De potmeters (ze werken andersom als gedacht)
Dan kun je de + en - aansluitingen van de potmeter omwisselen.

Citaat
Maar deze werken dus tot ongeveer de helft van de draaing van de potmeter
Dat zou niet moeten.

Citaat
En de voeding van de NANO gaat nu via een usb. Als ik een voeding gebruik, moet ik dan de VIN gebruiken en de ground (mijn gedachte Volt IN gang

Op Vin sluit je 12 V= aan, de 5 V wordt dan een uitgang.
USB geeft 5 V, kun je aansluiten op de 5 V van de Arduino (dat wordt dan een ingang). De 5 V (als uitgang) van de Arduino moet je niet gebruiken voor de servo's, die trekken te veel stroom met kans op defecte spanningsregelaar in de Arduino of inzakken van de 5V spanning waardoor de Arduino uitvalt of reset.

De variabele 'Val' is niet nodig.
Als je ergens komma's of haakjes e.d. vergeet, krijg je vanzelf een compileerfout.
Citaat
... als de potmeters niet op 0 staan bij starten de werking anders wordt
Nee, de werking blijft precies hetzelfde. Bij inschakelen draaien de servo's/deuren naar de stand die de potmeters aangeven, of dat 0 (nul) is of wat anders maakt niet uit.

Nog een keer de code, met logische nummers;
#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;

const int potpin1 = A1;   // analoge 'IN' pinnen om potmeters in te lezen
const int potpin2 = A2;
const int potpin3 = A3;

const int servopin1 = 11; // digitale 'OUT' pinnen voor servo's
const int servopin2 = 12;
const int servopin3 = 13;

// -------------------
void setup() {
  pinMode(potpin1,INPUT);  // maak potmeterpinnen invoer
  pinMode(potpin2,INPUT);
  pinMode(potpin3,INPUT);
 
  pinMode(servopin1,OUTPUT); // maak servopinnen uitvoer
  pinMode(servopin2,OUTPUT);
  pinMode(servopin3,OUTPUT);
 
  myservo1.attach(servopin1); // koppel servo's aan I/O pinnen
  myservo2.attach(servopin2);
  myservo3.attach(servopin3);
}
// ------------------
void loop() {
 
// in één regel per servo;
//   lees potmeterwaarde 0..1023,
//   verschaal naar hoek 0..90 graden (je kunt van die 90 ook een constante maken),
//   stuur hoek naar servo

  // voor servo 1
  myservo1.write(map(analogRead(potpin1),0,1023,0,90));
  delay (50);              // omdat bask185 het zegt

  // voor servo 2
  myservo2.write(map(analogRead(potpin2),0,1023,0,90));
  delay(50);

  // voor servo 3
  myservo3.write(map(analogRead(potpin3),0,1023,0,90));
  delay(50);
}
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 26 May 2021, 20:24:30
Dus een lader van 9 of 12 volt als voeding kan op de VIN en gnd worden aangesloten
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt.
Bericht door: 72sonett op 26 May 2021, 20:46:29
Ja, 7-12 V= op Vin.
De 5 V wordt dan een uitgang, levert spanning voor de potmeters en de analoge ingangen.
Voor de servo's gebruik je een aparte 5 V voeding met voldoende vermogen, b.v. een USB van 2 A.
De Gnd (-) is gemeenschappelijk.
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 26 May 2021, 21:33:52
Ok
Allen bedankt voor de hulp(les)
Ga weer verder lezen en proberen
Bij problemen en of vragen meld ik me weer
En weer even bij china wat dingen bestellen
 (y)
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: Hennik op 26 May 2021, 22:01:07
Pas op! Dat arduino-geknutsel is verslavend..  8) bijna net zo verslavend als onze gezamenlijke treinenhobby
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 26 May 2021, 22:13:08
 ;D
Ik kreeg dingen werkend die werden gedaan met een paar schetsjes
led je aan uit
afstand meter
servo heen en weer continu
Maar toen ik iets wilde wat ik gebruiken kon nada
Heb toen alles in een doos gedaan en laten staan
nu weer zin om eens te proberen veel lezen , en gelijk veel vragen
Ben nu hier weer prima ondersteund en gemotiveerd om toch weer dingen te proberen
en danwil je alles weer aanvullen
(2 boards verknald) dus china ordertje
gelijk wat voedingen erbij
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: RobGood op 26 May 2021, 23:20:29
Hi Jerry, Je moet je niet laten ontmoedigen...mee eens, maar om met arduino's zelf sketches te maken moet je gewoon bij het begin beginnen. Aansturen van servo's is echt niet het begin. Kijk, 1 servo aansturen met een arduino is eenvoudig, je kan dan gebruik maken van het werk van een ander...dus ergens een library vinden en die gebruiken. Helemaal top maar voor iedere servo heb je een arduino nodig. Om meerdere servo's met 1 arduino aan te sturen wordt het lastiger. Maar zeker kan dat, als je er verder op studeert kom je ongeveer uit op een max van 500 servo's met 1 arduino. Hoe kom ik daaraan? nu een servo heeft een puls nodig tussen de 1ms en 2 ms. Een servo reageert direct op die puls, ook al stuur je die puls maar 1x in de seconde in dat extreme geval kun je die ene seconde dus in 500 stukjes van 2ms opdelen.
Praktisch is dit natuurlijk niet wat moet je nu met 500 servo's en waar haal je 500 pinnen vandaan die aangesloten moeten worden op de puls ingang van de servo. Nee een praktisch bruikbare waarde is max 16 servo's, dat adafruit printje  PCA9685 dus..... Maar dat printje is eigenlijk niks bijzonders dat zijn gewoon twee schuifregisters op een printje met servo aansluitingen. Die schuifregisters geven dus die 16 pinnen die je nodig hebt voor de puls aansluiting van de 16 servo's. De library die de heren en dames van Adafruit hebben gemaakt stuurt de boel aan. Alleen je moet natuurlijk ook nog knopjes hebben of nog beter een DCC decoder die de servo's aanstuurt en dat zal allemaal ook in die ene arduino moeten werken. Dat adafruit library...helaas dat zit daar niet in. Zelf heb ik dit hele verhaal gemaakt in een project voor 8 servo's met drukknoppen en gekleurde leds en jawel ook nog een dcc decoder erin.... ik heb de hele cursus van Dr. Robert Paz ( https://www.youtube.com/watch?v=9Q-3c0gQcok&list=PLifLftIJFUm-1iIAEPWvuSJTA50YKYD7J) helemaal door geploeterd en dit project heeft me toch nog een goede 4  maanden gekost om te maken. Meer info op mijn hobbysite wisselmotor.nl.   Maar laat je niet ontmoedigen.... gewoon bij het begin beginnen  ledjes en schakelaartjes...das een goed begin    succes
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: NTeering op 27 May 2021, 10:24:10
Hallo Jerry,

Wist je dat er gratis software beschikbaar is om servo's aan te sturen.
Kijk op www.arcomora.com/Mardec (http://www.arcomora.com/Mardec)
Dat scheelt een hoop frustratie.

mvg
Nico
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 27 May 2021, 17:48:03
Ik ben niet snel gefrustreerd,maar heb soms even genoeg als het niet lukt.
Dan gaat het aan de kant ,en zie ik later wel als er weer eens een beetje zin is
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 28 May 2021, 11:02:29
Heb nog een vraag
(heb ik weer)
alles opgezet als eerst werkend van de week
12 V op de nano vin en ground
PLOF stuk
Andere nano en op de powerpack
en nu staan de servo,s te bewegen als een gek,en reageren totaal niet op de potmeters
Kan dit komen door te lange draden van de servo,s naar het board toe
Ik soldeer alles.
Dus van de nano naar de potmeters
Van de nano naar de servo,s
de draden van de servos zijn wel ruim 80 cm naast elkaar en de 5 volt voeding (die van de week ook zo gebruikt is)
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: spock op 28 May 2021, 16:00:57
Het lijkt erop dat de voeding van de nano in elkaar stort als de servos's worden aangesproken en daardoor de nano weer gaat rebooten (en dat blijft zich herhalen).

Weer een paar vragen:
1) gebruik je een aparte 5 Volt voeding voor de servo's. Zo ja, hoeveel stroom (Ampere) kan deze voeding leveren.
2) Indien je een aparte voeding gebruikt. Zijn de GND van de arduino en de GND van de 5V voeding verbonden?
3) Indien je een aparte voeding gebruikt. Is de +5V van de arduino en de +5V  van de 5V voeding verbonden?

Misschien ten overvloede, maar je kunt de servo's niet voeden vanuit de 5 Volt van de nano.

mvg spock
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 28 May 2021, 16:40:48
NANO zit op een powerpack net als de test opstelling
de servo's op een aparte voeding (die ook in de test opstelling is gebruikt)
Dus eigen lijk is de testopstelling losgehaald van de bread board met de arduino draden
en bij de baan weer opgebouwd mmet als enig verschil dat de draden van de servo's langer zijn ,even als de voeding voor de servo's
daarom de vraag,kan het daar aan liggenen zou het twisten van deze draden wat uitmaken
En als ik de nano bij de servo's plaats in de loods en de draden van / naar de potmeters lang(er) maak
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: spock op 28 May 2021, 17:16:08
Het is altijd beter om de draden van de servo's zo kort mogelijk te maken om storing te voorkomen.

Je verteld echter dat de servo's totaal niet reageren op de potmeters. Dan is er iets anders aan de hand dan alleen lengte van de servodraden.
Ik vertrouw nog steeds niet de voeding van de nano.

Ik zou zelf het volgende doen:

1) Met een spanningsmeter de spanning van de +5V meten op de Arduino (blijft deze constant 5V of zak deze?).
2) In de sketch een paar Serial.println() commando's zetten.
Aan het begin van het begin van setup()
Aan het Einde van setup()
Aan het begin vaan loop()

Dan kun je zien of de nano ongecontroleerd aan het resetten is.

Misschien is het handig om eerst de vragen te beantwoorden die je worden aangedragen voordat je weer vragen begint te stellen over oplossingen die je zelf verzint.
Klinkt misschien niet leuk, maar dan komt er wel wel structuur in het oplossen van jouw probleem.

mvg spock
Titel: Re: Arduino, aansturen servo’s voor deuren lokloods werkt niet.
Bericht door: jerrytrein op 28 May 2021, 20:49:24
Heb alles weer opgemeten
De voeding blijft stabiel 6,29 volt onbelast en 5,25 belast
Ik had servo's op een latje genaakt en passend in de loods
Alles opnieuw opgebouwd,alleen de servo draden kort gehouden,en de potmeter draden langer
blijkt dus 1 servo te blijven draaien
Deze vervangen en alles werkt nu weer naar behoren
Dus weer een les,korte draden tussen het board en de servo,s(de digitale draden )
Die zijn dus super gevoelig voor storingen van buiten af