Doel:€250.00
Donaties:€88.00

Per saldo:€-162.00

Steun ons nu!

Laatst bijgewerkt
op 03-06-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Klein mobiel ontwerp met thema stadsmuren door Slotticar
Vandaag om 08:45:39
Edelweisz in model door C_Jabaaij
Vandaag om 07:48:05
Nederland jaren 50 op basis van mijn roots door defender
Vandaag om 06:22:19
Fleischmann Anna ombouw. door janw
Vandaag om 01:06:14
Raadplaatje door grossraumwagen
Vandaag om 00:15:10
US diorama in H0 door jan47
Vandaag om 00:07:21
BR-18.6 Schaal-0. door FritsT
10 August 2025, 23:45:43
Sfeer op je modelbaan door Floris Dilz
10 August 2025, 23:30:18
Open huis VAMES Modelspoorclub Apeldoorn door hmmglaser
10 August 2025, 23:22:18
Artikelen over de CIWL in Spoorwegjournaal door sncf231e
10 August 2025, 23:18:36
Mooi weer om buiten te spelen door sncf231e
10 August 2025, 23:09:44
Mijn eerste H0-modeltreinbaan in aanbouw door Wim Vink
10 August 2025, 22:28:23
Trix BR94 ontspoort door frederik19630
10 August 2025, 22:26:08
Vaste baan door GertW
10 August 2025, 22:24:00
Tams app door Reinout van Rees
10 August 2025, 22:20:53
Open huis VAMES Modelspoorclub Apeldoorn door GertW
10 August 2025, 22:09:16
booster vraag door maartenvdb
10 August 2025, 22:06:57
Station Roodeschool door Casmir
10 August 2025, 21:59:14
Aanpassen baanplan bestaande baan door Bjor
10 August 2025, 20:39:43
Modules van Kees Gorter (vervolg) door ca.gorter
10 August 2025, 20:33:46
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
10 August 2025, 20:29:37
Onlangs gespot - gefotografeerd, de foto's door Pommie
10 August 2025, 20:11:11
M.s.v. De Percee bouwt aan nieuwe clubbaan door J. Moors
10 August 2025, 19:31:47
ByPass Junction, een Amerikaanse modelbaan in N door RobVille
10 August 2025, 19:14:08
Module vliegveld Jan van Mourik door MOVisser
10 August 2025, 16:52:03
DDAR op basis van een Artitec DDM door Daan de leeuw
10 August 2025, 16:28:45
Br 38 Piko Superen. door puntenglijder
10 August 2025, 16:24:01
De bouw van 'Ommelanden' (H0) door Jan Pieter
10 August 2025, 16:16:18
"Litter Bin" voor Brits spoor en Britse modelspoorprojecten door Merlin674
10 August 2025, 15:57:00
EL11 NSB sound file door bellejt
10 August 2025, 15:19:30
  

Auteur Topic: Arcomora en mijn begrip van Arduino  (gelezen 8514 keer)

ron.kraaijkamp

  • Offline Offline
  • Berichten: 272
    • Mijn baan in opbouw op 2RSweb
Re: Arcomora en mijn begrip van Arduino
« Reactie #30 Gepost op: 31 August 2020, 12:42:04 »
Hallo Bas,

Ik snap wat je bezig houd. Zo'n probleem laat je niet los. Vroeger had ik een papiertje naast het bed, voor ideeen die ik 's nachts kreeg.

Ik begrijp wat je beschrijft en waarom het niet wilde werken.
Vanavond zal ik eens kijken. Ik ben net als jij aan het werk en dat kost best veel tijd ;-).
 Ik hoop over een paar jaar met vervroegd pensioen te gaan. Heb ik meer tijd.

Alweer bedankt.
mvg Ron

ron.kraaijkamp

  • Offline Offline
  • Berichten: 272
    • Mijn baan in opbouw op 2RSweb
Re: Arcomora en mijn begrip van Arduino
« Reactie #31 Gepost op: 31 August 2020, 13:18:04 »
Bas,

Na het nog een keer doorlezen van je bericht, ben ik toch verward.

Kan ik de initiele sketch gebruiken en de servoSweep (cpp en h) library moet ik opnieuw downloaden?

mvg, Ron

bask185

  • Offline Offline
  • Berichten: 5009
Re: Arcomora en mijn begrip van Arduino
« Reactie #32 Gepost op: 31 August 2020, 13:53:47 »
Ik vermoed het ja, maar ik heb het nog niet getest thuis. Dat kan ik vanavond pas doen.

Mvg,

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

bask185

  • Offline Offline
  • Berichten: 5009
Re: Arcomora en mijn begrip van Arduino
« Reactie #33 Gepost op: 31 August 2020, 13:58:43 »
ik vergeet iets te zeggen!

De originele sketch moet je uitbreiden met een call naar servo1.begin()  en servo2.begin() (of hoe jij je motoren genoemd heb) aan te roepen in de void setup()

#include "ServoSweep.h"

const int interval = 3000 ;
const int inputButton = 12 ;
const int servoPin = 13 ;

unsigned long prev ;
byte state ;

//                   pin   min max speed (bigger speed = slower movement ;
ServoSweep servo1(servoPin, 10, 30, 50) ; // als je hier een 5e getal toevoegt, dan is dat getal het pinnummer van je puntstuk relais.

void setup() {
    servo1.begin() ; <-- dit toevoegen voor elke motor
}

void loop() {
 
  servo1.sweep(); // de sweep moet continu aangeroepen worden

  if( digitalRead( inputButton ) ) servo1.setState( 1 ) ; // door setState aan te roepen met een 1 of een 0, kan je motor laten bewegen
  else                             servo1.setState( 0 ) ;
 
}
« Laatst bewerkt op: 31 August 2020, 14:00:22 door bask185 »
Train-Science.com
Train-Science github
It ain't rocket science ;-)

ikbenerevenniet

  • Offline Offline
  • Berichten: 379
Re: Arcomora en mijn begrip van Arduino
« Reactie #34 Gepost op: 31 August 2020, 17:40:03 »
Wat je niet mag doen in deze constructor is ook hardware dingen initialiseren. De constructor wordt namelijk uitgevoerd voordat de init() functie wordt uitgevoerd.

Hee, weer wat geleerd, thnx!   (y)

Heb al veel geleerd van mijn eigen fouten, maar die van anderen helpen daar ook bij. ;-) Ik lees ook mee op het Arduino forum, dat is vooral heel leerzaam omdat daar problemen aan de orde komen waarover je in de handleidingen niets vindt!
« Laatst bewerkt op: 31 August 2020, 17:46:44 door Erik Baas »

bask185

  • Offline Offline
  • Berichten: 5009
Re: Arcomora en mijn begrip van Arduino
« Reactie #35 Gepost op: 31 August 2020, 20:09:53 »
Ja je raakt nooit uitgeleerd.

Volgens mij oscilloscoop lijkt deze sketch te werken...

#include "ServoSweep.h"

const int inputButton1 = 11 ;
const int inputButton2 = 12 ;
const int servoPin1 = 2 ;
const int servoPin2 = 3 ;

unsigned long prev ;
byte state ;

//                   pin   min max speed (bigger speed = slower movement ;
ServoSweep servo1(servoPin1, 0, 180, 20, 13) ; // led 13 is puntstuk output
ServoSweep servo2(servoPin2, 0, 180, 50) ;

void setup() {
    Serial.begin( 115200 ) ;
    pinMode( inputButton1, INPUT_PULLUP ) ;
    pinMode( inputButton2, INPUT_PULLUP ) ;

    servo1.begin() ;
    servo2.begin() ;
}

void loop() {
 
    servo1.sweep(); // de sweep moet continu aangeroepen worden
    servo2.sweep(); // de sweep moet continu aangeroepen worden

    char b = Serial.read() ;

    if( digitalRead( inputButton1 ) ) servo1.setState( 1 ) ; // door setState aan te roepen met een 1 of een 0, kan je motor laten bewegen
    else                              servo1.setState( 0 ) ;

    if( digitalRead( inputButton2 ) ) servo2.setState( 1 ) ; // door setState aan te roepen met een 1 of een 0, kan je motor laten bewegen
    else                              servo2.setState( 0 ) ;
 
}
..met de libraries die nu op github staan. Het puntstuk polarisatie outputje die jij wss niet nodig heb, die werkt ook  (y)

Mvg,

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

ron.kraaijkamp

  • Offline Offline
  • Berichten: 272
    • Mijn baan in opbouw op 2RSweb
Re: Arcomora en mijn begrip van Arduino
« Reactie #36 Gepost op: 31 August 2020, 21:23:39 »
Hallo Bas,

Het werkte in een keer. Dat had je al gezegd omdat je het getest had.
Je hebt de input nu anders gemaakt. En er kan nu met een tuimelschakelaar gewerkt worden.

Ik hoor de servo's nog wel een beetje rommelen. Dan komt waarschijnlijk omdat ze rommel oppikken op de servo pin.
Ik zal een test of dat te verhelpen is met een weerstand 4k7 van de servo pin naar de 5 volt te leggen.

Bij eerdere testen had ik detach gebruikt. Dan hield het ook op. Is dat hier ook te gebruiken? Ik twijfel namelijk omdat detach voor alle servo's tegelijk werkt.

Weer bedankt voor je moeite die je erin gestoken hebt.

mvg Ron

ron.kraaijkamp

  • Offline Offline
  • Berichten: 272
    • Mijn baan in opbouw op 2RSweb
Re: Arcomora en mijn begrip van Arduino
« Reactie #37 Gepost op: 31 August 2020, 22:41:52 »
De pull up op de servo pin hielp niet.
Nu slapen. Half zes weer op.


Verzonden vanaf mijn iPhone met Tapatalk

spock

  • Offline Offline
  • Berichten: 764
Re: Arcomora en mijn begrip van Arduino
« Reactie #38 Gepost op: 31 August 2020, 23:05:02 »
Hoi,

Dat rommelen van de servo ga je niet oplossen door een pullup weerstand.
Het rommelen wordt veroorzaakt omdat de aanstuurpuls van de servo softwarematig wordt gegenereerd en dit niet exact constant is bij een arduino.

mvg spock

ron.kraaijkamp

  • Offline Offline
  • Berichten: 272
    • Mijn baan in opbouw op 2RSweb
Re: Arcomora en mijn begrip van Arduino
« Reactie #39 Gepost op: 01 September 2020, 07:54:25 »
Dat dacht ik ook Spock, was het proberen waard. Had het ergens in een draadje gelezen.

Ik ga vanavond maar eens kijken of dat met een detach goed gaat.

bask185

  • Offline Offline
  • Berichten: 5009
Re: Arcomora en mijn begrip van Arduino
« Reactie #40 Gepost op: 01 September 2020, 08:02:16 »
Dat moet sowieso werken omdat je dan de pulsentrein stopt. Ik kan dat wel toevoegen aan de library. Dan hoef jij alleen maar de library weer te update ;)

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

RobGood

  • Offline Offline
  • Berichten: 158
Re: Arcomora en mijn begrip van Arduino
« Reactie #41 Gepost op: 01 September 2020, 08:58:01 »
Als je het goed doet dan is die puls super stabiel. Probleem is hier dat er een library wordt gebruikt. Lijkt slim maar voor een eenvoudig stukje hardware als een servo die alleen maar een tussen 1 en 2 mseconde regelbaar pulsje nodig heeft is dat een olifantengeweer gebruiken voor een veldmuis.
Veel beter 1 van de drie timers gebruiken op een interupt. Omdat die puls van die ene ms slechts een 50tal keer per seconde hoeft te worden gegeven blijft er een zee van tijd over om wel tot 16 servo met die ene timer aan te sturen. Jawel dat is de truck van dat adafruit printje.
Wel is er dan een schuifregister story nodig om de seriele aansturing van de servoos parallel te maken. Das niet zo een grote uitdaging....Succes..... Rob

bask185

  • Offline Offline
  • Berichten: 5009
Re: Arcomora en mijn begrip van Arduino
« Reactie #42 Gepost op: 01 September 2020, 09:35:34 »
Citaat
Lijkt slim maar voor een eenvoudig stukje hardware als een servo die alleen maar een tussen 1 en 2 mseconde regelbaar pulsje nodig heeft is dat een olifantengeweer gebruiken voor een veldmuis.
Welkom in de wereld van C++ en OO programmeren. Collega Meino gebruikte zelfs een eigen library om de stand van een input uit te lezen terwijl hij het volgens mij afkon met digitalRead(), maar nogmaals, dat is C++ voor je.

Ik vind je analogie met library en olfifantengeweer wel wat vergezocht, een classe of een library is eigenlijk niet veel dan een geupgrade struct.

Dat adafruit printje werkt trouwens met I2C, daar heb je geen schuifregister voor nodig. Ik weet niet waar je dat vandaan heb? ander printje?

Ik weet wel dat je met een decade counter wel 10 servo's kan aansturen met een IO pin. Maar dat is weer wat anders.

Ik weet niet precies hoe die arduino library precies werkt. Ik weet alleen dat hij drie servo's op willekeurige IO kan laten draaien. Ik weet alleen niet hoe hij dat doet.

Arduino libraries zijn allemaal OO (object orientated) geschreven en dan heb je dus dit soort dingen. Ik vind het al knap dat hun library zo werkt zoals het nu doet.

Wat ik zelf wel eens gedaan heb, is om inderdaad zelf via een timer ISR meerdere servo's aan te sturen. Dat zag er ongeveer zo uit:

ISR(TIMER1_COMPA_vect) { // set at every 5us
    static uint16_t counter = 0 ;

    if( counter == 0 ) {
        PORTB |= ( 1 << motor1.pin ) | ( 1 << motor2.pin ) | ( 1 << motor3.pin ) ; // turn on all pwm pins
    }

    if( counter == motor1.pos ) PORTB &= ~ (1 << motor1.pin ) ; // turn them off when it is their time
    if( counter == motor2.pos ) PORTB &= ~ (1 << motor2.pin ) ;
    if( counter == motor3.pos ) PORTB &= ~ (1 << motor3.pin ) ;

    counter ++ ;
    if( counter == 3600 ) counter = 0 ;
}

Even gauw in elkaar geflanst. De interval tijd zou hier 5.55556us moeten zijn omdat ( 2000us - 1000us) / 180 posities = 5.55556us per graad.
Na 3600 cycles is er dan precies 20ms gepasseerd en begint het weer opnieuw.
Probleem is alleen dat dit niet werkt met de standaard Arduino macro's een OO manier van programmeren. Volgens mij vreet deze methode ook meer performance, maar daar ik niet weet hoe hun library werkt, weet ik het zeker.
Train-Science.com
Train-Science github
It ain't rocket science ;-)

ron.kraaijkamp

  • Offline Offline
  • Berichten: 272
    • Mijn baan in opbouw op 2RSweb
Re: Arcomora en mijn begrip van Arduino
« Reactie #43 Gepost op: 01 September 2020, 11:45:37 »
Dat moet sowieso werken omdat je dan de pulsentrein stopt. Ik kan dat wel toevoegen aan de library. Dan hoef jij alleen maar de library weer te update ;)

Bas
Graag dan.
Had zelf al zitten proberen. En kwam erachter dat het via de library moest.
Werd te laat.
Mvg Ron


Verzonden vanaf mijn iPhone met Tapatalk

bask185

  • Offline Offline
  • Berichten: 5009
Re: Arcomora en mijn begrip van Arduino
« Reactie #44 Gepost op: 01 September 2020, 13:21:43 »
Ik heb de code aangepast en dit wordt de nieuwe sketch. Je moet op de github pagina ook even zoeken naar de debounceClass.cpp en .h  die heb je nu ook nodig omdat:

Om de servo sweep te laten attachen, moest ik dit doen in de functie setState. Tot op heden, riepen wij deze functie eigenlijk continu aan. De debounce class is gemaakt om precies dit soort problemen op te vangen. De schakelaars worden gefiltered van ruis en inputs kennen nu behalve de states ON en OFF ook een RISING en een FALLING state.

Als we dit in de sketch implementeren:

#include "ServoSweep.h"
#include "debounceClass.h"

const int pin5 = 5 ;
const int pin6 = 6 ;

Debounce btn1( pin5 ) ;
Debounce btn2( pin6 ) ;

unsigned long prevTime = 0 ;

byte state1 = 1;
byte state2 = 1;

ServoSweep servo1(3, 10, 180, 20, 1, 13 ); // de 1 is nieuw en geeft aan dat we detach willen gebruiken
ServoSweep servo2(4, 6, 10, 1, 20 );

unsigned long prev ;

void setup() {
    Serial.begin(115200) ;
    Serial.println("hello world");
}

void loop() {

    unsigned long currTime = millis() ;

    if( currTime > prevTime ) {
        prevTime += 20 ;        // debounce interval is 20ms

        btn1.debounceInputs();
        btn2.debounceInputs();
    }

    uint8_t btnState = btn1.readInput() ;
    if( btnState == RISING ) {
        servo1.setState( 1 );
        Serial.println("motor 1 is true") ;
    }
    if( btnState == FALLING ) {
        servo1.setState( 0 );
        Serial.println("motor 1 is false") ;
    }

    btnState = btn2.readInput() ;
    if( btnState == RISING ) {
        servo1.setState( 1 );
        Serial.println("motor 2 is true") ;
    }
    if( btnState == FALLING ) {
        servo1.setState( 0 );
        Serial.println("motor 2 is false") ;
    }

   
    servo1.sweep( );
    servo2.sweep( );
}
Het is natuurlijk ongetest en mijn pauze is weer voorbij ;D dus het is nog experminenteel. Maar ik heb er vertrouwen in  (y)

De debounce code heb ik getest en werkt:
hello world
motor 1 is true
motor 2 is true
motor 1 is false
motor 1 is true
motor 2 is false
motor 2 is true

De code in de library heeft nu deze toevoeging in setState
if( turnOff ) servo.attach( servoPin ) ;

en in sweep staat:
if( ( pos == servoMax || pos == servoMin ) && turnOff == 1 ) servo.detach( ) ;
Dus de sweep functie detacht, en de setState attacht, mits turnOff gelijk is aan 1 en die wordt in de constructor gezet.

Mvg,

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