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

Pfarrerwinkel bahn door puntenglijder
Vandaag om 06:40:08
20 jaar BNLS door klusser
Vandaag om 03:15:16
Aachenau West door Ronald69
Vandaag om 00:41:57
Mijn eerste H0-modeltreinbaan in aanbouw door MichielB
02 July 2025, 23:46:25
Yet Another Servo Decoder door spock
02 July 2025, 23:19:12
D20/ 25 Bentheimer Eisenbahn in 1:32 door becasse
02 July 2025, 22:31:24
BR-18.6 Schaal-0. door FritsT
02 July 2025, 22:30:50
rommenholler gasketelwagens door ArjanB
02 July 2025, 22:29:52
Gezocht: Foto's Plan E/L postrijtuig in reizigerstreinen jaren '70 door j.ossebaar
02 July 2025, 22:05:27
Roco 290 digtaliseren door Herb73
02 July 2025, 22:05:20
The Rolling Tables… (ofwel: eten tussen de rails wordt nieuw leven ingeblazen) door Bob R.
02 July 2025, 21:58:53
NL-baan in Canada door ArjanB
02 July 2025, 21:44:10
Raadplaatje door Klaas Zondervan
02 July 2025, 19:42:38
Zaagsel? door Besselspoor
02 July 2025, 18:15:13
Modules van Kees Gorter (vervolg) door ca.gorter
02 July 2025, 17:10:05
Ervaringen met veilingsites enzo (Marktplaats, Ebay, Catawiki, etc). door Arjan6511
02 July 2025, 16:49:10
The Micro Model Railway Dispatch door Scratchbuilt
02 July 2025, 16:37:57
Piko 2025 door spoorijzer
02 July 2025, 15:42:59
MARDEC, de Multifunctionele ARduino dcc DECoder. door Bert55
02 July 2025, 15:32:28
"Kolenbakken" voor achter Railion 6400-en? door ES44C4
02 July 2025, 14:01:12
Reizigersmaterieel Twentelijn in de jaren '70 door 1200blauw
02 July 2025, 10:29:51
US diorama in H0 door Montanbahn
02 July 2025, 09:13:55
Philotrain NS6001-6006 (niet kijken als je blij met jou philotrain bent) door prutser
01 July 2025, 23:56:14
Reactiveren van de 0N30 Mumby Lumber baan (ex-JD) by Ronald door Ronald Halma
01 July 2025, 23:41:48
"Litter Bin" voor Brits spoor en Britse modelspoorprojecten door Hans van de Burgt
01 July 2025, 23:21:41
Mijn Ned. N. Spoorbaan ''Echthoven'' door Luit
01 July 2025, 23:07:31
Spin Off BentheimerEisenbahn, aanrijding in Lauenbruck door Thom
01 July 2025, 22:40:15
Een nieuw begin door bask185
01 July 2025, 22:31:23
Hornby-international 2025 door Quinzeedied
01 July 2025, 21:41:08
VERPLAATST: Zaagsel? door Duikeend
01 July 2025, 20:47:55
  

Auteur Topic: Arduino perikelen  (gelezen 876 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: 3441
    • 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: 4938
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