Doel:€250.00
Donaties:€50.00

Per saldo:€-200.00

Steun ons nu!

Laatst bijgewerkt
op 03-01-2024

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

De overeenkomst tussen een Ovaalramer en een Motorpost. door BartvD
Vandaag om 09:32:19
Onze Nederlandse Stoomlocomotieven (nieuwe druk) door R v/d Hoven
Vandaag om 09:24:48
Mijn eerste H0-modeltreinbaan in aanbouw door Wim Vink
Vandaag om 09:16:55
Hengelo in 1981-1982, maar dan anders: Kassenberg in N door Jeroen Water
Vandaag om 08:53:16
Internationale Spoor 0 en 1 dagen in Gießen, 23 en 24 maart, 2024 door bernhard67
Vandaag om 08:42:53
Variaties op Station Zetten Andelst in HO door tothebeach
Vandaag om 08:21:31
US diorama in H0 door Jelmer
Vandaag om 08:19:18
De Hondsrugbaan door mass am see
Vandaag om 08:15:11
Pfarrerwinkel bahn door Jelmer
Vandaag om 08:00:19
M.s.v. De Percee bouwt aan nieuwe clubbaan door J. Moors
Vandaag om 01:00:05
30 maart Modelspoorbeurs Houten & HCC Kennisdag door WimM
Vandaag om 00:42:50
Raadplaatje door Magic
27 maart 2024, 23:27:03
Ronald en Wanda's "Southern Comfort" swamp layout! door Ronald Halma
27 maart 2024, 23:17:30
Rio Grande Southern - Lizard Head Pass door Rody v. G.
27 maart 2024, 23:03:46
Al mijn goede ideeën... door MartinRT
27 maart 2024, 22:57:39
Bouw van materieel 40 treinstellen door Pauldg
27 maart 2024, 22:45:06
Martijn's rariteitenkabinet door Martijn193
27 maart 2024, 22:30:17
Beekdaelen in H0 door Link
27 maart 2024, 22:17:23
Les Billards du Vivarais door Hans1963
27 maart 2024, 22:08:52
"Litter Bin" voor Brits spoor en Britse modelspoorprojecten door BrightonBelle
27 maart 2024, 21:57:24
Bauarbeiten im gange door puntenglijder
27 maart 2024, 21:57:02
Kleine Baan in H0 (≤ 0.5m²) door Jack Black (NS1220)
27 maart 2024, 21:47:16
Lima Koploper ombouwen door Menno 1846
27 maart 2024, 21:31:51
Piko NS 2015 stroomafname probleem door brutus
27 maart 2024, 21:16:45
Zwederbaan door nighttrain1
27 maart 2024, 20:44:09
opbouw treinbaan weer opgepakt door teun van drunen
27 maart 2024, 19:21:25
NTM P1 in Schaal-1 door FritsT
27 maart 2024, 18:59:12
PB models: koplopers (voorbespreking) door Marnit
27 maart 2024, 18:58:04
Aachenau West door 741230
27 maart 2024, 18:55:45
Gebruik je Arduino zonder te "programmeren" ;) door bask185
27 maart 2024, 18:22:53
  

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

Eric B

  • Offline Offline
  • Berichten: 6810
  • NS tijdperk III (a)b/c
    • Obdam in h0
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.
Fotodijkje en fotodiorama
Obdam
Als alles meeloopt hebben we morgen een optocht.

Martin Hornis

  • Offline Offline
  • Berichten: 1413
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 voor OC32.

Martin Hornis

  • Offline Offline
  • Berichten: 1413
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 voor OC32.

bask185

  • Offline Offline
  • Berichten: 4003
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
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Eric B

  • Offline Offline
  • Berichten: 6810
  • NS tijdperk III (a)b/c
    • Obdam in h0
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.
Fotodijkje en fotodiorama
Obdam
Als alles meeloopt hebben we morgen een optocht.

luutjelewis

  • Offline Offline
  • Berichten: 60
  • Niets is zo waardevol als wijze raad
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)
Groet Dennis

bask185

  • Offline Offline
  • Berichten: 4003
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 »
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
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: 4495
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: 4003
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?
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
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: 4003
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
Train-Science.com
Train-Science github
It ain't rocket science ;-)

luutjelewis

  • Offline Offline
  • Berichten: 60
  • Niets is zo waardevol als wijze raad
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)
Groet Dennis

Sven

  • Offline Offline
  • Berichten: 7832
  • 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: 4003
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 »
Train-Science.com
Train-Science github
It ain't rocket science ;-)