Doel:€250.00
Donaties:€85.00

Per saldo:€-165.00

Steun ons nu!

Laatst bijgewerkt
op 21-04-2020
Algemeen

De stichting

Recente berichten

Bouwen van modellen bestaande uit gips door MOVisser
Vandaag om 09:32:41
Gezocht, iemand die decoders in Märklin TEE 3071 wil inbouwen (Utrecht) door Huib
Vandaag om 09:29:37
Roco Fccpps, overzicht van Roco-modellen. door Jamie
Vandaag om 09:11:08
Marklin H0 trein rijdt alleen maar achteruit door Pauldg
Vandaag om 08:54:47
Breedte nieuw op te zetten Fleischmann HO tafel afmeting door Boswachter Dirk
Vandaag om 08:54:10
Molendaal, h0-baan, Nederlands tintje, Periode III-heden. 2,6x1,4m door NS264
Vandaag om 08:52:23
Ombouw/Pimpen Bolle neuzen door bollen neus
Vandaag om 08:48:53
Frans bietenbaantje in 009 (en parallel in 0e) door Lucien
Vandaag om 08:37:03
Toon hier je nieuwe (model-) spooraanwinst(en)... door Besselspoor
Vandaag om 08:35:28
NS modelbaan Hoekdam H0 door gtw6016
Vandaag om 08:31:36
Maïsveld n spoor maken, tips? door RemcoStarter
Vandaag om 08:22:14
Projekt 083-338 door Falkenberg
Vandaag om 07:54:24
Baanbouw Bosje77 door Frycio82
Vandaag om 07:38:11
Cubana door Lucien
Vandaag om 07:32:32
Mijn eerste H0-modeltreinbaan in aanbouw door Frank 123
Vandaag om 06:28:17
BMB 00-modulebaan, Beveiliging door nighttrain1
Vandaag om 00:43:33
Raadplaatje door spoorzeven
04 juni 2020, 23:20:30
De terugkeer van het Eiland Waan door RobK
04 juni 2020, 23:07:13
Märklin 60760 locdecoder instellen in iTrain. door PkAlfisti
04 juni 2020, 23:00:54
Welke rijtuigen achter NS 1100 door piet keppel
04 juni 2020, 22:46:42
Frans loodsje et cetera door Noordernet
04 juni 2020, 22:39:03
DR5000, problemen met hoge locomotiefadressen door Karst Drenth
04 juni 2020, 22:37:14
Initiatief Tramweg Stichting voor behoud SUN-tramstel (Ut) scoort eerste succes door martijn v m
04 juni 2020, 22:32:03
Waar koop je tegenwoordig 'betaalbare' sounddecoders? door dimo1_dimo1
04 juni 2020, 21:57:42
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door HuubvG
04 juni 2020, 21:52:38
BMB 00-modulebaan, Algemeen. door St00mboy
04 juni 2020, 21:22:32
Oersik etsplaat spoor 0 van Erwin, beginnersbouwverslag door Tulpendaal
04 juni 2020, 21:15:40
Modelspoorbaan Fleischmann door bosje77
04 juni 2020, 20:54:22
Hoe groen was de groene E-loc 1000? door Bahn-AG
04 juni 2020, 20:46:01
Aankomst grootste containerschip ter wereld door FritsT
04 juni 2020, 20:45:36
  

Auteur Topic: Zonder fouten een Arduino programmeren  (gelezen 3848 keer)

Eric B

  • Online Online
  • Berichten: 3753
  • NS tijdperk III b/c
    • Obdam in H0 op Facebook
Re: Zonder fouten een Arduino programmeren
« Reactie #60 Gepost op: 01 april 2020, 13:57:36 »
Bas, geen kritiek maar gewoon een vraag.
Waarom ben je uitgegaan van maar 2 detectors per spoor in plaats van 3, zoals in het grootbedrijf?
Aan beide zijden een aanrijdsectie/detector (AD1 en AD2) en een middensectie/detector (MD).
En die dan als volgt afhandelen.

- Alles laag en actief: ruststand
- AD1 hoog: overweg gaat sluiten en AD2 wordt inactief gemaakt, maar nog wel ingelezen.
- MD hoog: onthouden maar geen verdere actie
- AD1 en MD beiden laag: overweg mag weer open
- MD en AD2 beiden laag: AD2 weer activeren
- Alles laag en actief: ruststand weer bereikt
En dat natuurlijk ook met AD1 en AD2 qua volgorde omgekeerd voor een trein in de andere richting.
Fotodijk(je)
Obdam
Als alles meeloopt hebben we morgen een optocht.

Martin Hornis

  • Offline Offline
  • Berichten: 1068
Re: Zonder fouten een Arduino programmeren
« Reactie #61 Gepost op: 01 april 2020, 14:06:24 »
Zie mijn aanvulling: Nu ik er even over nadenk, besef ik dat dit schema voor volledige detectie geldt -> zoals het Märklin-systeem.
Märklin K-rails met boogstralen > 500 mm; NS-lichtseinen met cijferbak: 4, 6 en 8 in één bak; iTrain; Intellibox I; OC32; eigen treindetectiesysteem aangesloten op OC32; controleprogramma's voor iTrain en OC32.

Martin Hornis

  • Offline Offline
  • Berichten: 1068
Re: Zonder fouten een Arduino programmeren
« Reactie #62 Gepost op: 01 april 2020, 14:10:26 »
- AD1 hoog: overweg gaat sluiten en AD2 wordt inactief gemaakt, maar nog wel ingelezen.
Gevaarlijk -> als er van de andere kant ook een trein komt?... De klap op de overweg is groot. ;D
Märklin K-rails met boogstralen > 500 mm; NS-lichtseinen met cijferbak: 4, 6 en 8 in één bak; iTrain; Intellibox I; OC32; eigen treindetectiesysteem aangesloten op OC32; controleprogramma's voor iTrain en OC32.

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #63 Gepost op: 01 april 2020, 14:18:40 »
@Eric B

Nou Eric, heel simpel.
A, ik had niet echt een idee hoe het groot bedrijf functioneert.
B. Deze constructie leek mij te volstaan
C. 4 contacten is minder dremel en soldeer werk dan 6

En zoals ik al zei, het is mogelijk om de buitenste detectors parallel aan te sluiten op 1 input en de middelste detector kan op de andere input. Dus ik was mezelf een stapje voor hehe  ;D

Maar deze state-machines zijn uitermate flexibel, ik wil best een nieuwe state-diagram maken en het net zo doen als het grootbedrijf. Kleine moeite immers   ;)

Mvg,

Bas

Eric B

  • Online Online
  • Berichten: 3753
  • NS tijdperk III b/c
    • Obdam in H0 op Facebook
Re: Zonder fouten een Arduino programmeren
« Reactie #64 Gepost op: 01 april 2020, 16:45:04 »
Gevaarlijk -> als er van de andere kant ook een trein komt?... De klap op de overweg is groot. ;D
Dan is er is structureel mis met je beveiliging/blokstelsel, dat los je niet op met de aansturing van je overweg  ;D


Bas, bij enkelspoor heb je aan beide zijden van de overweg aanrijdsecties.
Bij dubbel enkelspoor dus 2 x het zelfde naast elkaar.
In het verleden waren er ook dubbelsporige trajecten die alleen ingericht waren voor Verkeerd Spoor rijden, de overwegen werden bij VS rijden niet automatisch gesloten, omdat de aanrijdsectie in die richting niet aanwezig was.
De machinist reed dus op zicht en moest met de 1e as van de trein de middensectie berijden om de overweg alsnog te sluiten.
Fotodijk(je)
Obdam
Als alles meeloopt hebben we morgen een optocht.

luutjelewis

  • Offline Offline
  • Berichten: 48
  • Alles zuiver!!!
Re: Zonder fouten een Arduino programmeren
« Reactie #65 Gepost op: 01 april 2020, 17:49:33 »

Ik zelf nog geen overgang gebouwd. De software stuurt serieel feedback over alles wat het doet. Zo kon ik bevestigen dat het goed werkt desondanks ik nog geen servo daadwerkelijk heb aangestuurd. Ik kan eventueel een filmpje maken van de seriele monitor, maar je kan ook zelf het programma in een arduino stoppen en de detectors nabootsen met een draadje.
[/quote]

Hoi Bas ik heb het een en ander geprobeerd maar ik krijg de servo's niet aan het werken , terwijl de serieel monitor wel alles aangeeft evenals de leds en sensors
doen serieel hun werk het knippert en stopt knipperen op het juiste moment , alleen de servo's reageren niet , getest met een servo tester werken ze wel ;-)
Evenzo heb ik de grnd vd servo's nagekeken de is ook aangesloten op de grnd vd arduino.

Hoop dat je voor mij een oplossing hebt  (y)
Groeten Dennis

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #66 Gepost op: 02 april 2020, 07:09:54 »
Ik zal vanavond ff kijken met een oscilloscoop of de Servo signalen goed zijn.

In het aller ergste geval is er een conflict tussen de hardware timers. Dit is in ieder geval oplosbaar. Dit heb je wel eens met Arduino libraries.


EDIT:
ben op werk, en heb het al gevonden. Ik ben de servo attachments vergeten. Echte rookie mistake hier  ;D. De wijziging staat al op internet, maar je kan ook de regels zelf toevoegen. In railCrossing.cpp staat op regel 39 deze functie:

// FUNCTIONS
extern void railCrossingInit(void) {
state = beginState;
arm1.attach(servoPin1); // <--deze toevoegen
arm2.attach(servoPin2); // <-- deze toevoegen
arm1.write(openPos);
arm2.write(openPos);
}
« Laatst bewerkt op: 02 april 2020, 07:54:31 door bask185 »

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4670
Re: Zonder fouten een Arduino programmeren
« Reactie #67 Gepost op: 02 april 2020, 12:43:19 »
Als je de .attach() en .write() even omdraait scheelt dat een power spike ;)

Ennuh, arrays ;D


Timo
Verzonden vanaf mijn desktop met Firefox

tuurtje

  • Offline Offline
  • Berichten: 3369
    • Lacus Flevo
Re: Zonder fouten een Arduino programmeren
« Reactie #68 Gepost op: 02 april 2020, 13:03:14 »
Hoi Timo,

Probeer als iemand die alleen maar poke en peek geleerd heeft dit te begrijpen
Wat bedoel je met een power spike?

Groetjes

Arthur
A live performance so the whole world will see
I'm aligning the stars
Universal in art
See the god in me

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #69 Gepost op: 02 april 2020, 13:35:58 »
Hij bedoelt een piekje in de servo motor aansturing.

wat gebeurt er nu?

Op het moment dat ik de servo attach aan een pin, ga ik direct servo signalen op die pin zetten.  Ik heb op dat punt nog geen waarde (hoek) opgegeven met servo.write()

Als de servo dan fysiek op 90 graden staat. En ik attach hem zonder hem eerst naar 90 graden te sturen met servo.write. Dan probeert de arduino de servo waarschijnlijk naar 0 graden toe te sturen. Als ik dan met servo.write() een waarde opgeef van 90 dan draait hij weer terug naar 90. Hierbij worden grote stromen gebruikte voor de aanloopstromen van de motoren. Echter omdat de instructies direct onder elkaar staan, duurt het sturen naar positie 0 slechts enkele microsecondes. En daarom spreekt Timo van een Power Spike. Een kortbondig momentje waarop de servo's heel veel stroom trekken.

Als ik nu de write boven de attachment zet, dan stuur ik de servo eerst naar 90 graden voordat ik de signalen op de pin zet.

@Timo ik vind een array voor 2 servo's een beetje overkill. Er door heen loop'en kost meer performance en je bespaart er ook niet significant veel geheugen mee. Of zou je iets anders in een array willen stoppen?

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4670
Re: Zonder fouten een Arduino programmeren
« Reactie #70 Gepost op: 02 april 2020, 14:57:02 »
De kans dat het inderdaad een spike geeft is wel klein, toegegeven. Maar attach() zonder signal uit bestaat niet, ook niet zonder .write(). Er zal dan de default van 90 gebruikt worden. Dient dus meer als "best practice" voor als je er in de toekomst wel wat tussen zet. Bijvoorbeeld omdat je een vertraging tussen de .attach()'s gaat zetten om de power spike (vermogenspiek) van meerdere servo's koppelen te drukken.

Ik vind het geen overkill ;D Jij probeert steeds de compiler te slim af te zijn en kleine zaken te optimaliseren voor runtime. Ik zou zeggen, laat dat aan de compiler over. 8) Vertrouw je die niet hebben we nog assembler ;D De compiler kan best nog wel eens zien dat je simpelweg over twee items loopt en dat al optimaliseren als losse calls. En met array's is dan loopen over de array wel een logische stap, verplicht is het natuurlijk niet. Maar ben wel van mening dat als je dan toch dingen nummert, je dit beter kunt doen op een manier doet dat de compiler er ook van op de hoogte is :) Bijkomend voordeel is weer consistentie, immers doe je het dan altijd hetzelfde. Of je dan gaat loopen of ze gewoon individueel aanroept. Maar met arrays en loopen is het wel opeens kinderspel om de overweg uit te breiden met extra slagbomen :angel:


Timo
Verzonden vanaf mijn desktop met Firefox

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #71 Gepost op: 02 april 2020, 15:43:17 »
Je kan ook 4 motors op een IO pin aansluiten, dan heb je ook 4 bomen  (y)

Je kan sws nog meer werk verrichten aan verbeteringen voor dit programma... als je dat wilt. Als ik dat stuk van Eric B lees, kan je bijvoorbeeld die state-machines voor de bezetmelding de deur uit trappen en vervangen door een paar simpele if-statements. Je kan ook denken aan idd 4 servo IO met elk hun unieke open en sluit posities. Je kan nu net zo makkelijk een servo signaal vertakken naar 4 servo motors. Je kan het geheel misschien via de terminal configureerbaar maken, on the fly een servo positie of een tijd aanpassen en dat in de EEPROM stoppen. Ik heb nu een simpele config.h toegevoegd, maar bij elke wijziging die je maakt, moet je opnieuw programma compileren en uploaden.

Voor de huidige toepassing volstaat het programma. En mensen kunnen waarschijnlijk zelf meer servo's toevoegen als ze dat willen. Er gaan er 4 op een timer dacht ik. Bovendien is het leuk voor mensen om zelf te knutselen aan een programma, het leren moet ergens beginnen. :police:

En ik ben niet echt bezig met compiler optimalisatie. Ik had simpelweg niet bedacht dat er misschien meer bomen bij zouden komen  ;D. Daarom vond ik een array van 2 items niet echt interessant om te doen. Bijna net zo veel tik werk.

Bas

luutjelewis

  • Offline Offline
  • Berichten: 48
  • Alles zuiver!!!
Re: Zonder fouten een Arduino programmeren
« Reactie #72 Gepost op: 02 april 2020, 17:22:16 »

ben op werk, en heb het al gevonden. Ik ben de servo attachments vergeten. Echte rookie mistake hier  ;D. De wijziging staat al op internet, maar je kan ook de regels zelf toevoegen. In railCrossing.cpp staat op regel 39 deze functie:

// FUNCTIONS
extern void railCrossingInit(void) {
state = beginState;
arm1.write(openPos);
arm2.write(openPos);
arm1.attach(servoPin1); // <--deze toevoegen
arm2.attach(servoPin2); // <-- deze toevoegen

}

Top Bas dank je  (y)
Groeten Dennis

Sven

  • Offline Offline
  • Berichten: 6412
  • Eton Wick, UK
    • Ga naar de Tramfabriek
Re: Zonder fouten een Arduino programmeren
« Reactie #73 Gepost op: 02 april 2020, 18:27:23 »
A, ik had niet echt een idee hoe het groot bedrijf functioneert.
Even terugkomend op de "Engelse ziekte". Die laat zich door het Coronavirus niet verdringen. Hier een prachtig voorbeeld hoe het in het Nederlands echt wel uitmaakt om het aan elkaar te schrijven, omdat het een andere betekenis krijgt.  ;D  ;)
Backer & Rueb stoomtrams in 1:87 op www.tramfabriek.nl.
Volg mijn bouwactiviteiten op Facebook.

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #74 Gepost op: 22 april 2020, 13:33:11 »
Ik ben afgelopen weken kapot aan het gaan op kooihoorts. De medicatie helpt niet echt goed met mijn ogen. Ik heb er thuis al helemaal veel last van. Als ik mn filmpje af heb, kan ik het laatste deel releasen.

In ieder geval wilde ik wat zinnigs mededelen. Ik had namelijk een productieve pauze deze week. En ik heb een Weistra module gemaakt. Dus voor de analoog rijdende mensen die hun baan willen automatiseren:

Syntax is eenvoudig gehouden conform de Arduino Library Guidelines.
#include "weistra.h"

#define potPin A0

Weistra regelaar(13); // maak het object en gebruik pin 13

void setup()
{
    regelaar.begin(); // initialiseert de regelaar
}

void loop() {
    regelaar.update(); // moet elke cyclus worden aangeroepen omdat we gebruik maken van SW timing.

    byte currentTime = millis() & 0xff;
    static byte previousTime = 0;

    if(currentTime - previousTime >= 200) { // 5 updates per seconde
        previousTime = currentTime;

        byte throttle = map( analogRead(potPin), 0, 1023, 0, 100); // neem ADC sample en schaal om naar 0-100

        regelaar.setSpeed( throttle ); // zet de snelheid
    }
}
Het mooie is dat je hiermee elke pin kan gebruiken en je kan meerdere regelaars door elkaar heen gebruiken. Het zou ook op alle Arduino boards moeten werken.

Ik heb de SW alleen getest met de onboard led en de seriele monitor, maar de resultaten vallen binnen de verwachtingen (deze keer :P )

Ik wil in de toekomst nog een soort veiligheids/overloop feature toevoegen dat je de regelaars met elkaar kan synchroniseren. Dan kan je een trein van het ene blok naar het andere blok laten rijden zonder dat je een (te lange) kortsluiting maakt. En als er wensen zijn voor de Permaloog regeling van meneer Zondervan, let me know.

Veel rijplezier!

Bas
« Laatst bewerkt op: 22 april 2020, 13:35:25 door bask185 »