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

Module vliegveld Jan van Mourik door MOVisser
Vandaag om 12:29:05
De IJmuider spoorlijn - korte geschiedenis en plaatjes door Vislijn
Vandaag om 12:15:43
Aachenau West door Chris Westerduin
Vandaag om 12:12:21
Minder wissels door H0eGenaamd
Vandaag om 11:59:07
Ombouw/Pimpen Bolle neuzen door bollen neus
Vandaag om 11:52:08
De overeenkomst tussen een Ovaalramer en een Motorpost. door FritsT
Vandaag om 11:51:05
Alweer is de Weller soldeerbout defect door eichddraig
Vandaag om 11:46:57
Een Rotterdams gebouw door Dave.......
Vandaag om 11:45:47
De modeltreinen van Spoorijzer door spoorijzer
Vandaag om 11:24:57
The Summer of 69 door Eric v C
Vandaag om 11:23:46
Update: baan in de tropen door Eric v C
Vandaag om 11:19:20
De bouw van mijn modelbaan in Thailand door saskia
Vandaag om 10:43:16
Treinsamenstelling vooroorlogse D treinen door odaoda
Vandaag om 10:24:23
Vraag over aandrijving / tandwielen Roco Blokkendoos (oud) door meino
Vandaag om 10:07:49
NS 8800 in spoor 0 door BartvD
Vandaag om 09:53:28
Stalen D 4 deurs spoor 0 door 1795
Vandaag om 09:37:12
Mijn eerste baan, Hexental in ho. 380x 120cm door Paul1969
Vandaag om 09:14:35
Raadplaatje door V200-G2000
Vandaag om 08:38:48
Pfarrerwinkel bahn door Jelmer
Vandaag om 08:34:30
Toon hier je nieuwe (model-) spooraanwinst(en)... door spoorijzer
Vandaag om 08:29:04
Fleischmania Nostalgia door spoorijzer
Vandaag om 08:17:52
Modelspoorbaan van Einte door Jelmer
Vandaag om 08:11:17
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Jelmer
Vandaag om 08:06:55
LIMA IRM Cardanassen door Duikeend
Vandaag om 00:48:46
Onlangs gespot - gefotografeerd, de foto's door Dave.......
03 September 2025, 23:26:40
Mijn eerste H0-modeltreinbaan in aanbouw door Wim Vink
03 September 2025, 22:40:27
Hebden Bridge, digitale modulebaan in schaal 00. door Donny95
03 September 2025, 22:05:28
Veevervoer ss/ ns door klusser
03 September 2025, 21:49:39
Microstepper motoren voor armseinpalen door AP3737
03 September 2025, 21:42:57
Roco Plan T van DC digitaal sound naar AC digitaal sound door Jeroen Water
03 September 2025, 21:26:44
  

Auteur Topic: Arduino perikelen  (gelezen 890 keer)

TEE-RAM

  • Offline Offline
  • Berichten: 227
Arduino perikelen
« Gepost op: 28 December 2022, 19:18:57 »
Goedenavond,

Ik heb mij laten overhalen iets met arduino te gaan doen. Mijn eerste project(je) is het schakelen van 10 wisselstraten.

Daartoe heb ik gemaakt:
– een toetsenbordje (10 toetsen),
– een printje met 18x BC547 en 18x BD680 voor de aansturing van de wissels (printje had ik al in gebruik),
– een CDU voor het leveren van de benodigde stroom voor de aansturing van de wissels,
– een printje met de arduino nano,
– een printje met 3x PCF8574 via een I2C verbinding aangesloten op de arduino.

Gisteren heb ik het geheel getest en het werkte naar verwachting. Eerst getest (met een testprogramma exclusief toetsenbordje) met leds in plaats van wissels later met 1 wisselspoel (omdat voor het inbouwen op de spoorbaan nog wat aanpassingen nodig zijn is het testen met alle wissels wat lastig). Het principe werkt.
Nu mijn probleem, ik ben voor wat betreft elektronica een leek. Om de wisselspoel te testen had ik 1 PCA op het printje geprikt (dus de andere twee niet). De wisselspoel schakelde netjes zoals verwacht. Daarna heb ik de GND losgehaald (de +5 en +23 volt bleven dus aangesloten) de twee andere PCF’n erin geprikt en de GND weer aangesloten, de arduino werd warm/heet en begaf de geest.

Ik heb vandaag wat metingen uitgevoerd:
– ik sluit het geheel volgens onderstaand schema aan (overigens zonder geplaatste arduino en PCF’n en zonder toetsenbordje),
– ik meet overal de verwachte spanning,
– ik haal de GND los (de +5 en +23 volt bleven dus aangesloten),
– op de arduino aansluiting ontstaat vervolgens een negatieve spanning (zelfs tot -11 volt, wel kort).
Mijn conclusie is dat het loshalen/weer aansluiten van de GND de arduino vernietigd heeft maar een verklaring daarvoor heb ik niet. Is mijn conclusie juist en zo ja wat is de oorzaak hiervan (gaat er een stroom lopen vanuit de CDU naar de aansluiting van de Arduino??).

N.b.: ongetwijfeld zijn er betere/andere/makkelijkere oplossingen dan die ik gekozen heb maar dat doet er voor mij op dit moment niet toe. Ik wil, voordat ik er een nieuwe nano in prik. weten wat de oorzaak is waarom de arduino de geest gaf.









Menno

  • Offline Offline
  • Berichten: 3454
    • Mijn van-alles website
Re: Arduino perikelen
« Reactie #1 Gepost op: 28 December 2022, 19:52:46 »
Zonder interne schema's van de onderdelen is het gissen naar het waarom, maar over het algemeen is het hartstikke fout om de massa/0V van een schakeling te onderbreken en voedingsspanningen juist aangesloten te laten. Alles gebeurt 'ten opzichte van iets': er staat 5 Volt en 23 Volt ten opzichte van massa (0 Volt). Die 0 Volt is ook voor ingangen en uitgangen een referentieniveau en vooral ingangen kunnen heel raar gaan doen zonder dat referentieniveau.

Op die manier kan er, zeker via digitale electronica, via interne verbindingen die gewoon nodig zijn voor de werking ván die digitale electronica, stroom gaan lopen via wegen die daar niet voor bedoeld zijn. Bijvoorbeeld omdat digitale ingangen vaak ESD-beveiligingen hebben (dat zijn dan vaak zogenaamde clamping-diodes). Zowel naar massa als Vcc zitten dan diodes in tegengestelde richting aangesloten. Haal massa weg en zeker bij twee verschillende voedingsspanningen gaat het dan al snel mis.

Beste les: onderbreek je voedingsspanningen, niet de massa. Nog beter is het om gewoon je gehele voeding uit te schakelen als je iets wijzigt, zodat je bij een vergeten verbinding niet alsnog iets sloopt.

Verder vind ik het gebruik van een CDU bij dit soort elektronica totaal overbodig: zorg gewoon voor een hoge spanning en een voeding die een beetje stroom kan leveren. Je werkt met electronica, laat die het verder afhandelen. Een CDU is moeilijk naar mijn mening.

TEE-RAM

  • Offline Offline
  • Berichten: 227
Re: Arduino perikelen
« Reactie #2 Gepost op: 29 December 2022, 12:47:52 »
Menno bedankt  voor jouw reactie.
De reden dat ik CDU wil gebruiken is dat ik oude roco wissels gebruik met eindafschakeling. De eindafschakeling werkt niet altijd even goed (de contacten in de wissel zijn slecht/niet schoon te maken). Ook blijkt dat de spanning benodigd om de spoelen te laten reageren nogal varieert (zo tussen de 16 en 20 volt bij ongeveer 1,2 A). De eindafschakeling heb ik overbrugd maar daardoor kan, als er te lang spanning op de spoelen blijft staan, de spoel doorbranden. Ik weet dat de schakeltijd met de arduino in te stellen is maar ik bouw graag een extra zekerheid in. Ik ga echter wel proberen of het zonder CDU kan met een schakeltijd van 10/20 ms (misschien iets langer).

bask185

  • Offline Offline
  • Berichten: 5027
Re: Arduino perikelen
« Reactie #3 Gepost op: 29 December 2022, 13:32:47 »
Ik weet dat de schakeltijd met de arduino in te stellen is maar ik bouw graag een extra zekerheid in.

Ik heb daarvoor ooit een simpel lapje code gemaakt. Ik noem het 'coilDriver'.

2 bestandjes: CoilDrive.cpp
#include "CoilDrive.h"

CoilDrive::CoilDrive()
{
}

void CoilDrive::begin( uint8_t _pinA, uint8_t _pinB, uint32_t _switchTime )
{
    pinA = _pinA ;
    pinB = _pinB ;
    switchTime = _switchTime ;   
    pinMode( pinA, OUTPUT ) ;
    pinMode( pinB, OUTPUT ) ;
    digitalWrite( pinA, LOW ) ;
    digitalWrite( pinB, LOW ) ;
}

void CoilDrive::setState( uint8 _state )
{
    prevTime = millis() ;
    set = true ;

    if( _state ) digitalWrite( pinA, HIGH ) ;
    else         digitalWrite( pinB, HIGH ) ;
}

void CoilDrive::update()
{
    if( set == true && (millis() - prevTime) >= switchTime )
    {   set  = false ;
       
        digitalWrite( pinA, LOW ) ;
        digitalWrite( pinB, LOW ) ;
    }
}

En het header bestand CoilDrive.h
#include <Arduino.h>

class CoilDrive {

public:
    CoilDrive() ;
    void setState( uint8_t );
    void update() ;
    void begin(uint8_t, uint8_t, uint32_t) ;

private:
    uint32  switchTime ;
    uint32  prevTime ;
    uint8   pinA ;
    uint8   pinB ;
    bool    set ;
} ;

Hoe te gebruiken?

#include "CoilDrive.h"

const int nWissels = 4 ;

CoilDrive wissel[ nWissels ] ; // maak array van 4 dubbel spoelige wissels

void setup()
{
    wissel[0].begin( 1, 2, 50 ) ; // pin1, pin2, schakeltijd in milliseconde
    wissel[1].begin( 3, 4, 50 ) ;
    wissel[2].begin( 5, 6, 50 ) ;
    wissel[3].begin( 7, 8, 50 ) ;
}

void loop()
{
    for( int i = 0 ; i < nWissels ; i ++ )
    {
        wissel[i].update() ; // zet beide pinnen uit als de schakeltijd is verstreken, continu aanroepen
    }

    if(      event1_0 ) { wissel[0].setState( 0 ) ; }  // event moet je zelf invullen en koppelen aan je knopjes
    else if( event1_1 ) { wissel[0].setState( 1 ) ; }  // 1x aanroepen, niet oneindig vaak.

    if(      event2_0 ) { wissel[1].setState( 0 ) ; }
    else if( event2_1 ) { wissel[1].setState( 1 ) ; }

    if(      event3_0 ) { wissel[2].setState( 0 ) ; }
    else if( event3_1 ) { wissel[2].setState( 1 ) ; }

    if(      event4_0 ) { wissel[3].setState( 0 ) ; }
    else if( event4_1 ) { wissel[3].setState( 1 ) ; }
}

Als je je elektronica werkend heb, heb je er misschien iets aan  ;)

Mvg,

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

TEE-RAM

  • Offline Offline
  • Berichten: 227
Re: Arduino perikelen
« Reactie #4 Gepost op: 29 December 2022, 20:05:19 »
Bas bedankt voor jouw informatie.
Ik heb reeds een werkend programma, waarschijnlijk niet het kortste en/of het meest logische. Ik heb overal vandaan allerlei informatie verzameld en aan elkaar gekoppeld met een beetje logisch nadenken. In de loop der tijd leer ik waar ik mee bezig ben maar kan nog lang niet alles doorgronden. Gezien mijn leeftijd denk ik dat dat ook niet meer lukt maar tot nu toe ben ik best tevreden (ik kan nu 10 wisselstraten met 9 wissels, 4 uitgaande sporen (naar 1 spoor) en 1 inkomend spoor (naar 4 sporen) instellen met een weergave, leds, op een schakelbord). Dit alles als natuurlijk ook de hardware goed functioneert. Ik ga in ieder geval proberen jouw code te doorgronden.
Wim