H0 Modelspoor Forum

Modelbaanbesturing => Elektronische en digitale techniek => Topic gestart door: Pierre op 13 juli 2018, 12:36:23

Titel: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 13 juli 2018, 12:36:23
Zoals iedereen weet hier op het forum ben ik een behoorlijk analoge modelspoorder. En daardoor in de digitale wereld ook echt een holbewoner. Ik weet er echt 0 van maar wat is er gebeurd ….

Rob heeft mijn nieuwsgierigheid gewekt met zijn Arduino tsjoek-tsjoek geluiden in een analoge trein. En dat vind ik nou weer wel leuk. Ik heb begrepen dat je dan wel je treinen op puls breedte besturing moet hebben lopen en ... laat ik dat nu al hebben. Een bofje dus. Nou heb ik van de week een beetje rommel aangeschaft en een plek gereserveerd om een startje met Arduino te maken. 8)

(https://myalbum.com/photo/Cfxgo3iV5TCg/720.jpg)

(https://myalbum.com/photo/9d2zZQcPqlCa/720.jpg)

In de eerste plaats een Arduino starterkit aangeschaft. Daar zitten een heleboel spullen in waarvan ik geen moer begrijp maar dat komt vast nog wel (hoop ik). Daar zou een beschrijving bij moeten zitten maar dat was dus niet zo. Kortom die heb ik opgezocht op internet en de Nederlandse manual kunnen downloaden. Gelukkig voor mij want deze holbewoner spreekt ook geen Engels.

Dan nog 4 Digisparks en wat BC547B transistoren. Andere componenten zoals weerstanden, Elco’s, potmeters en andere rommel daar heb ik wel aardig wat van in huis.

Verder heb ik begrepen dat je het programma Arduino IDE nodig hebt en dat heb ik dan ook gedownload en geïnstalleerd op mijn computer. Om niet helemaal onbeslagen ten ijs te komen liep ik ook nog tegen een Arduino voor dummies aan die ik maar gekocht heb. Ook heeft Rob mij toegezegd een helpende hand uit te steken in mijn Arduino uitspattingen. Kortom … laat de show maar beginnen en eens kijken wat ik er van ga bakken.... ;)


Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Wim Corduwener op 13 juli 2018, 13:17:04
Nou @Pierre je hebt behoorlijk wat ingeslagen.
Qua kennis van moeilijke dingen is mijn bandbreedte (laat ik iets digitaals noemen) nauwelijks meetbaar, maar volgens mijn beperkte inschattingsvermogen op dit gebied heb je dit toch niet allemaal nodig om een tsjoeketsjoek-geluid te maken? Ik zie bijvoorbeeld een stappenmotor liggen en ik ben wel nieuwsgierig wat je daarmee gaat aanvangen; een H0e-draaischijf?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 13 juli 2018, 13:42:11
Ik heb een starterskit besteld Wim en daar zit het meeste van dit spul in. Ik heb het misschien niet allemaal nu nodig maar je weet bij mij nooit wat er in mijn hoofd opkomt. Ik weet niet eens wat het allemaal is. Misschien als ik het een beetje onder de knie heb ontspruit er een speciaal project uit.  ;D Eerst maar eens even knoeien met de basis zodat ik het een beetje ga begrijpen. Dat wordt denk ik al heftig genoeg voor mij. :-\
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: SuperSylvester op 13 juli 2018, 14:08:25
Nou Pierre, dan gaat er een (nieuwe) wereld voor je open. Als je de basis eenmaal een beetje onder de knie hebt
dan werkt dat spul als een tierelier... (of tjoeketjoek zo je wilt) en ga je vanalles verzinnen wat je ermee zou
kunnen doen. Met jouw fantasie kan daar iets heel moois uitkomen...


Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 13 juli 2018, 19:17:32
Nou Pierre,

Je hebt voortvarend ingeslagen.
Leuk, hoor, dat je ook met geluid aan de slag gaat.

Je schrijft dat je al pulsbreedte besturing hebt. Weet je ook op welke frequentie deze draait? En wat de maximale spanning is?
Mijn pulsbreedtebesturing is 490 Hz op zo'n 10 a 11 volt. Als jouw spanning aanmerkelijk hoger is moeten misschien de spanningsdelers iets anders worden. Kwa frequentie moet het aardig goed komen zolang je onder de 2000 Hz zit, denk ik.

Ondertussen ga ik gewoon alvast wat huiswerk opgeven  ;D

Ik zie dat je een Arduino Uno hebt. Daar kun je mooi mee beginnen om een programma'tje te uploaden en een speakertje aan te sluiten (als je die hebt).
Onderstaande code laat eindeloos een optrekkende en afremmende stoomtrein horen. Ik heb de ruis op de pin gezet, waar ook de ingebouwde LED van de Arduino is aangesloten (pin D13). Dan kun je het 'puffen' ook zien. Vooral handig als er om een of andere reden geen geluid is te horen.

/*
 * RUISGENERATOR STOOMTREIN
 * Stoomtrein geluiden: "puffen" van ruis in verschillend tempo
 */

// --- DEFINITIES ----

// pin definities
#define Ruispin       13               // pin voor aansturen van speaker: pin 1 of 0 (0 = 5 sec. vertraging)

//geluidsdefinities
  //lok 1
  // definities voor slagen BR91: 1e wat hoger, laatste wat lager dan de 2 middelste slagen (tsjie, tsja, tsja, tsjoe)
  #define Startfreq1  1950             // laagste frequentie ruis slag 1
  #define Eindfreq1   4350             // hoogste frequentie ruis slag 1
  #define Startfreq2  1800             // laagste frequentie ruis slag 2
  #define Eindfreq2   4000             // hoogste frequentie ruis slag 2
  #define Startfreq3  1800             // laagste frequentie ruis slag 3
  #define Eindfreq3   4000             // hoogste frequentie ruis slag 3 
  #define Startfreq4  1750             // laagste frequentie ruis slag 4
  #define Eindfreq4   3900             // hoogste frequentie ruis slag 4
  // berekening snelheid
  #define pulsbreedtestil   26         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    84         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       800         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        71         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)

// algemene geluidsdefinities
#define pauze         0.25             // factor puf/pauze (elke slag heeft voor een deel stilte)
#define SisLaag    4000                // frequentiebereik voor sisgeluid
#define SisHoog    5500

// --- CONSTANTES ---

const float sqrtpbstil = 100*sqrt(pulsbreedtestil);
const float sqrtpbmax  = 100*sqrt(pulsbreedtemax);

// ---- VARIABLEN ----

// puf-geluid variabelen: 4 slagen (is tweezijdige tweecylinder loc)
unsigned int ruisStartFreq[] {Startfreq1, Startfreq2, Startfreq3, Startfreq4};  // hoogste frequentie puf-ruis per slag
unsigned int ruisEindFreq[]  {Eindfreq1,  Eindfreq2,  Eindfreq3,  Eindfreq4 };  // laagste frequentie puf-ruis per slag
int slag = 0;

float pulsbreedte = pulsbreedtestil;  // pulsbreedte in %
float pbtoename = 2;

unsigned int  puf;                    // lengte puf-slag (ms)
unsigned long pze;                    // pauze tot aan klok stand(ms)

// --- FUNCTIES ---

// Functie: maak puf geluid (één slag)
// Geeft ruis voor een deel van de opgegeven lengte en stil voor de resterende tijd (factor definitie)
// De ruisfrequentie neemt langzaam af om enigszins de volume afname te simuleren.
// input: lengte van de slag (in ms)
//        laagste frequentie van de ruis
//        hoogste frequentie van de ruis
// output: tijd tot einde pauze van de puf
  unsigned long maakPuf(int lengte, unsigned int laag, unsigned int hoog) {
  unsigned int  freq;
  unsigned long mils;
  float factor = 1 - (0.09/lengte);
  mils = millis() + (1-pauze) * lengte;
  while (millis() < mils) {
    freq = random (laag, hoog);
    tone (Ruispin,freq);
    laag = laag*factor;
    hoog = hoog*factor;
  }
  noTone(Ruispin);
  return millis() + (lengte * pauze);                         // pauze tijd tussen de puffen
}

// Functie: Afspelen van ruis.
// Gebruikt voor sissen en remgeluid. Constant ruis-geluid gedurende de opgegeven lengte (in ms).
// input: lengte van de slag (in ms)
//        laagste frequentie van de ruis
//        hoogste frequentie van de ruis
void speelRuis(unsigned int lengte, unsigned int laag, unsigned int hoog) {
  unsigned int  freq;
  unsigned long mils;
  mils = millis() + lengte;
  while (millis() < mils) {
    freq = random (laag, hoog);   
    tone (Ruispin,freq);
  }
  noTone(Ruispin);
}

// --- HOOFDPROGRAMMA ---

// functies bij starten
void setup() {
  Serial.begin(9600);
  Serial.println("Ruisgenerator start.");
  pinMode     (Ruispin,OUTPUT);
  speelRuis (3150, SisLaag,SisHoog);               // sissen bij opstarten
}

// --- hoofdlus (loopt eindeloos door) ---
void loop() {
  if (millis() > pze) {                   // lok rijdt en er is nu geen puf-pauze of vrijloop
 
    // Pulsbreedte bepalen
    pulsbreedte = pulsbreedte + pbtoename;
    Serial.print("pulsbreedte: ");
    Serial.println(pulsbreedte);
    // rijgeluid
    // tweecylinder = 4 puf slagen met verschil in de slagen (volgens definities van de loc)
    // puf slag berekenen
    if (pulsbreedte > pulsbreedtemax) {
      pulsbreedte = pulsbreedtemax;
      pbtoename = -2;
    }
    if (pulsbreedte < pulsbreedtestil) {     
      pulsbreedte = pulsbreedtestil;
      pbtoename = 2;     
    }
    puf = map(100 * sqrt (pulsbreedte), sqrtpbstil, sqrtpbmax, langstePuf, kortstePuf);  // reken pulssbreedte % om naar puf-tijd
    pze = maakPuf(puf, ruisStartFreq [slag], ruisEindFreq [slag]);         // maak puf-ruis. Functie geeft resterende pauze-tijd terug
    // volgende puf-slag (volgnummer 0-3)
    if (slag < 3) {
      slag++;
    }
    else {
      slag = 0;
    }
  }                                                   
}                                                       // einde hoofd-lus


Om de code op de Arduino te zetten:
- Aansluiten op de USB van de computer, even wachten tot de installatie is gedaan.
- Arduino IDE starten
- In "hulpmiddelen" board Arduino/Genuino Uno hiezen en daarna de Poort kiezen (als het goed is is er precies één).
- Nieuwe sketch openen
- Code knippen en plakken
- Upload starten

De Arduino op de computer aangesloten laten. Als het goed is kun je daarna de ingebouwde LED zien knipperen

Vervolgens kun je de speaker nog aansluiten:
De collector van de BC547B op de 5V, de basis met een weerstand van 220 ohm (iets meer mag ook) op pin D13  en de emitter op de speaker. De andere draad van de speaker op de ground.

(http://www.xs4all.nl/~robvd/Forum/SchemaModuleRuisTestUno.jpg)


Met de breadboards en de jumper kabeltjes kun je snel de aansluitingen maken. En dan zou er al iets te horen moeten zijn....
Je kunt in dit stadium de USB aansluiting als voeding gebruiken.

Succes!
Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: iTom op 13 juli 2018, 19:28:55
Zo, zo, @Pierre , dit is een kleine stap voor Pierre maar een grote voor zijn toekomst.  :D :D

Ga dit draadje volgen want heb hier ook nog wat dingen liggen van Arduino en wil daar zeker verder mee, iets voor het najaar.
Dus kom maar op met je ontwikkelingen, zal binnenkort ook dat boek eens aanschaffen, lijkt me wel handig.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Cor op 13 juli 2018, 20:17:46
Zoals altijd knap werk Pierre.
Gelukkig ben ik niet de enige digibeet, maar jij hebt al een stap genomen met Arduino.
Ik ben nog zoekende, al heb ik al wel goede informatie van Rob gehad. Maar als je bij tante Ali kijkt heb je zoveel mogelijkheden dat het alleen maar moeilijker wordt.
Maar ik blijf je volgen hoe het bij jou gaat.

  Groet Cor 
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 13 juli 2018, 21:02:09
Ho .. ho .. je gaat wel heel erg snel Rob.  :o Ik moet eerst mijn straatje afmaken anders blijft er weer een project liggen. ;D

Om toch even terug te komen op je vraag over de impulsbreedte besturing die ik heb: Weet ik niets van :-\ Het is een besturing van Modelcraft met 2 aparte circuits. Ik heb deze ooit gekocht in Houten en hem ingebouwd in mijn bedieningspaneel. Er zat een gebruiksaanwijzing briefje bij dan de printvoeding 15 tot 18 volt moest bedragen. Het geheel staat op 16 volt en werkt goed maar de uitgaande spanning kan ik niet lezen met een universeelmeter. Op internet is er ook niets meer te vinden van deze snelheidsmeter. (erg oud)

Verder heb ik er nog één en die komt ooit bij Conrad vandaan (ongeveer 18 jaar geleden) en dat is een bouwpakketje geweest van H-Tronic (printnr: HB 497). Deze staat ook op 16V.

Dit heb ik er van gevonden:

Technische Daten
Betriebsspannung . . .: 14 - 18 V AC/DC
max. Fahrstrom . . . . .: 1,5 Ampere
Fahrspannung . . . . . .: 0 - 16 V AC
Ansteuerung . . . . . . .: Pulsweitenmodulation (PWM)
Anzeigen . . . . . . . . . .: je eine LED für vorwärts/rückwärts und
Not-Aus
Abmessungen . . . . . .: 100 x 135 mm (Platine)
105 x 175 x 55 mm (im Gehäuse [BxTxH])
Zubehör für Bausatz .: passendes Gehäuse, gebohrt
Best.-Nr. 11 64 16.
passende Frontplattenfolie, bedruckt
Best.-Nr. 11 64 24.

Maar om nou een lang verhaal kort te maken. Het voltage is toch hoe ver je de potmeter open zet? Of ga je uit van het ingaande voltage?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 13 juli 2018, 21:05:01
Ach Cor ... Ik heb eigenlijk helemaal niets met digitaal maar die Rob maakt me helemaal gek met zijn geluidjes. :D En dat vind ik nou weer wel leuk dus ....
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 13 juli 2018, 21:19:37
Rustig aan, hoor Pierre. Het huiswerk hoeft morgen niet af te zijn. ik dacht alleen: dan ligt het alvast klaar :)

Nog even over de pulsbreedte besturing: Laten we maar uitgaan van 16V. Dat betekent alleen dat je straks de weerstanden voor de rijstroommeting ongelijk moet maken. Op de pinnen wil je maximaal 5 volt hebben en dat bereik je met zogenaamde spanningsdelers. In plaats van 10V te halveren, zoals in mijn situatie, moet je de 16 V in drieën delen. Dus laten we zeggen 470 ohm van de rijstroom naar de pin en 220 ohm van de pin naar de ground. Met deze verdeling is die iets minder dan 1/3 van de 16V (dus laten we zeggen: 5).

De rijstroom frequentie kun je vrij eenvoudig meten met de Arduino als die op de computer is aangesloten. Dat komt dan wel t.z.t. Op zich maakt de frequentie niet heel veel uit: het programma'tje rekent de pulsbreedte zelf uit op basis van de verhouding "hoog" en "laag". Alleen als de frequentie heel hoog is (dus de pulsen heel kort), kan de Arduino/DigiSpark het niet goed bijhouden.

Het idee van de pulsbreedtebesturing is dat de spanning altijd maximaal is, maar dan alleen een deel van de tijd. Dus bij een pulsbreedte van 25% is er maar een kwart van de tijd de maximale spanning en driekwart van de tijd is deze 0. Voor een motor ziet het er uit als 4V in plaats van 16V, maar de elektronica is snel genoeg en gaat toch echt die 16V merken.

Eerst maar straatje schilderen....

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 13 juli 2018, 21:27:39
Ik denk dat ik het snap Rob. Dus eigenlijk is pulsbreedte besturing ook een soort van digitale voeding?

Eerst maar straatje schilderen....

Precies. ;D
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 13 juli 2018, 21:38:35
Hoi Pierre,

Dus eigenlijk is pulsbreedte besturing ook een soort van digitale voeding?

Inderdaad, een soort van. En daarom kan zo'n Arduino of DigiSpark er vrij makkelijk mee uit de voeten.

Schilder ze!

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: mark mms op 14 juli 2018, 18:48:52
Nou Pierre dat is een grote stap voor een analoge spoorder.

Begin met wat basis projecten ledjes en een servo bijvoorbeeld.
Dan langzaam naar geluid enz.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 14 juli 2018, 20:24:11
Nou Pierre dat is een grote stap voor een analoge spoorder.

Echt wel! 8)

Maar ik heb een goede leermeester ;) (ik ben alleen nog niet aan mijn huiswerk begonnen)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: arend65 op 15 juli 2018, 09:42:20
Spannend Pierre, ik ben benieuwd ::)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Wim Corduwener op 15 juli 2018, 10:10:35
Ik ben woest aan het schilderen en popel om de soldeerbout te pakken. Ik moet me beheersen. ;D
Dat vind ik nou weer knap van je @Pierre: dat je jezelf kunt beheersen en eerst het ene project afmaakt voordat je met het volgende begint. IJzeren discipline!  :D
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 15 juli 2018, 13:54:06
Tja ... dat doe jij toch ook altijd. ::)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Wim Corduwener op 15 juli 2018, 14:28:40
Tja ... dat doe jij toch ook altijd. ::)
Nee, ik ben bezig met het één en in m'n hoofd alweer bezig met het volgende project.  ::)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 15 juli 2018, 17:00:52
Ach ja ... in mijn hoofd spookt ook van alles rond maar het mag er pas uit als het daar tijd voor is. ;D
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 16 juli 2018, 14:38:34
Het gaat al gelijk mis Rob.  :( Ik heb gewoon je rijtje afgewerkt.

- Aansluiten op de USB van de computer, even wachten tot de installatie is gedaan.
- Arduino IDE starten
- In "hulpmiddelen" board Arduino/Genuino Uno hiezen en daarna de Poort kiezen (als het goed is is er precies één).
- Nieuwe sketch openen
- Code knippen en plakken
- Upload starten

Maar als ik dan de upload start zie je de balk lopen en dan krijg ik dit scherm.

(https://myalbum.com/photo/N8pk6MyWqCX8/1k0.jpg)

Op de Arduino brand een groen ledje en er knippert een oranje ledje. Uit de luidspreker klinkt een soort "getik" :-\
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 16 juli 2018, 14:57:17
Herstel Rob. Het werkt wel. Er zijn twee poorten en ik had de verkeerde gekozen. ;D

Het werkt goed. Volgende opdracht.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 16 juli 2018, 19:41:29
Hee Pierre,

Mooi dat het werkt. Dat is toch een grote digitale mijlpaal voor een analoge modelspoorder!

Volgende wordt dan de pulsbreedte meting. Als we iets weten over de frequenties en bij welke pulsdbreedte de loc gaat rijden dan is dat later handig bij het instellen van de software die aan boord komt. Heb je al een eerste loc op het oog waar geluid in komt?

Oeps, nou moet ik weer aan de bak. Even alle onderdelen bij elkaar verzamelen. Komt later vanavond.

Rob

Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 16 juli 2018, 21:51:34
Rustig aan maar Rob. Morgenochtend ben ik in het ziekenhuis en in de middag wil ik in mijn garage aan de gang. Op z'n vroegst woensdagmiddag weer aan de knutsel met draadjes.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 16 juli 2018, 22:14:59
OK Pierre.

Ik zet toch een en ander alvast neer, het kan wel even duren voor ik anders weer tijd heb. Dan ligt het wederom alvast op de plank...

Dus nu eerst kijken of de Arduino (DigiSpark) jouw pulsbreedte kan "zien".


Daarvoor is dit aansluitschema nodig met een bruggelijkrichter en 4 weerstanden. De weerstanden zullen in jouw geval de rijstroom in 3-en moeten delen, dus bijvoorbeeld 470 ohm van de rijspanning naar de Arduino en 220 ohm van de Arduino naar ground. Als je geen 470 ohm hebt, kun je ook 2 van 220 in serie zetten.

(http://www.xs4all.nl/~robvd/Forum/SchemaModulePulsTestUno.jpg)


De rijstroom pinnen zijn nu D12 en D11. De + van de gelijkrichter hoeft nog niet aangesloten te worden; de Arduino haalt de stroom uit de USB aansluiting.

Op de Arduino zet je dit programma'tje


/* GELUIDSMODULE TESTER
 * Testprogramma voor geluidsmodules voor analoge h0 trein
 * Geeft aan welke signalen door de module worden herkend.
 * Meet de puls op 2 pinnen verbonden met de rijstroom.
 * Programma wacht op herkenbaar signaal op een van de pinnen.
 * Bij herkenbaar signaal wordt de rijpin, pulsbreedte in % en
 * frequentie weergegeven.
 * Output op de seriële (USB) poort. Waarden zijn uit te lezen met
 * de serial monitor op de computer.
 *
 * Alleen als de pulsbreedte-waarde verandert wordt een nieuwe regel
 * met informatie 'geprint'.
 */
 // ==> Geef hier de 2 pinnen op waarmee de rijstroom wordt gemeten <==
#define rijpin1 11
#define rijpin2 12

// --- DEFINITIES ----
#define pullup               false     // geeft aan of de interne pullup weerstand gebruikt moet worden
#define maxpulsperiode       5000     // hoe lang wachten (minimaal 2x periode)

#define pulsruis                40    // maximaal verschil in gemeten Periodes (ruis)
#define minhoog                200    // minimaal "hoog" signaal

#define elcoLaadtijd          1000    // oplaadtijd van de Elcos (ms) = tijd tot stabiele pulsmeting

// ---- VARIABLEN ----

int rijpin[] {rijpin1, rijpin2};

// pulse meting variabelen: lengte 'hoog', 'laag' en trillingstijd (periode). Alle tijden in us.
double pulsbreedteHoog;
double pulsbreedteLaag;
double pulsPeriode;
double pulsbreedteHoog2;
double pulsbreedteLaag2;
double pulsPeriode2;

int vooruit = 1;                    // richting: bepaalt welke pin wordt uitgelezen voor de rijstroom puls
int pulsbreedte = 0;                // pulsbreedte in %
int vorigePulsbreedte = 0;          // vorige pulsbreedte om verandering vast te stellen
unsigned int pulsfrequentie = 0;    // speciale functie frequentie gemeten
unsigned int vorigeFrequentie = 0;


void setup() {
   
  pinMode     (rijpin[0],INPUT);
  digitalWrite(rijpin[0],pullup);
  pinMode     (rijpin[1],INPUT);
  digitalWrite(rijpin[1],pullup);

  Serial.begin(9600);
  Serial.println("Geluidsmodule gestart.");

  delay(elcoLaadtijd);       // wacht op stabiele puls (na opladen Elco)

  getSignaal();              // zoek naar signaal op de pinnen
}

void loop() {
// lees de huidige rijpin uit
  pulsbreedteHoog = pulseIn(rijpin[vooruit], HIGH, maxpulsperiode);
  pulsbreedteLaag = pulseIn(rijpin[vooruit], LOW, maxpulsperiode );
  pulsbreedteHoog2 = pulseIn(rijpin[vooruit], HIGH, maxpulsperiode);
  pulsbreedteLaag2 = pulseIn(rijpin[vooruit], LOW, maxpulsperiode );
  pulsPeriode = pulsbreedteHoog + pulsbreedteLaag;
  pulsPeriode2 = pulsbreedteHoog2 + pulsbreedteLaag2;

// beoordeel het signaal
  if (pulsPeriode < pulsruis ) {
  // geen herkenbaar signaal meer
    getSignaal();             // zoek naar signaal op een van de rijpinnen
    vorigePulsbreedte = 0;    // forceer weergave zodra signaal gevonden
  } else
  // herkenbaar signaal
  {

// bepaal welk signaal (frequentie) is ontvangen en voer resultaten uit
 
    // normale rijstroom: bereken pulsbreedte (in %)
    pulsbreedte = 100 * pulsbreedteHoog / pulsPeriode;
    pulsfrequentie = 1000000 / pulsPeriode;
     
    // resultaten weegeven als er iets is veranderd.
    if (abs(vorigePulsbreedte - pulsbreedte) > 0) {
      // meer dan 1% pulsbreedte verschil of functietoets ingedrukt
      Serial.print ("Rijpin: ");
      Serial.print (vooruit + 1);
      Serial.print (" || Pulsbreedte: ");
      Serial.print (pulsbreedte);
      Serial.print("% ");
      Serial.print (" || Frequentie: ");
      Serial.print(pulsfrequentie);
      Serial.println(" Hz");
      delay(10);
      vorigePulsbreedte = pulsbreedte;
      vorigeFrequentie = pulsfrequentie;
    }   
  }
}

// SIGNAAL ZOEKEN
// functie om te wachten op een herkenbaar signaal op een van de rijpinnen.
void getSignaal() {
  Serial.println ("Module wacht op herkenbaar signaal.");
 
  // zolang geen rijstroom periode en geen "hoog"  signaal is gevonden
  // blijft deze lus om-en-om op elk van de rijpinnen meten.
  do {
    vooruit = (!vooruit);                   // wissel van rijpin
    pulsbreedteHoog = pulseIn(rijpin[vooruit], HIGH, maxpulsperiode);
    pulsbreedteLaag = pulseIn(rijpin[vooruit], LOW , maxpulsperiode);
    pulsPeriode = pulsbreedteHoog + pulsbreedteLaag;
    delay(50);
    Serial.print(".");                      // elke poging: "."
    delay(200);
  } while ( pulsbreedteHoog < minhoog);

  // Signaal gevonden. Geef dit aan op de seriële bus
  Serial.println("!");
  Serial.print("Herkenbaar signaal gevonden op rijpin ");
  Serial.print(vooruit+1);
  Serial.println(".");
}


// --- einde ---


Na het uploaden van het programma laat je de Arduino op de computer aangesloten. De rijstroom draden sluit je aan op de pulsbreedtebesturing (rails).

Start daarna de Seriële monitor in de Arduino IDE (hulpmiddelen - Seriële monitor). Als het goed is zie je hier de tekst "Geluidsmodule gestart." en dat er gewacht wordt op een herkenbaar signaal. Als je nu aan de rijstroom knop draait, moet, als het goed is, de gemeten pulsbreedte en frequentie te lezen zijn. De ene kant op staat het signaal op rijpin 1 (= pin D11) en de andere kant op rijpin 2 (= D12).

Als dit werkt, kun je ook een loc op de rails zetten en zien bij welke pulsbreedte deze gaat rijden en waneer een plausibele maximumsnelheid wordt bereikt. Deze twee pulsbreedte percentages heb je straks nodig om de geluidsmodule in te regelen.

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: SuperSylvester op 16 juli 2018, 22:42:10
@Pierre, ga je ook zelf met de software 'oan de geng' na verloop van tijd of laat je dat over aan de programmeurs?



Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 17 juli 2018, 09:53:17
Ik ga er eens mee aan de slag Rob. Dank je wel. Ik hou je op de hoogte. ;)


@Pierre, ga je ook zelf met de software 'oan de geng' na verloop van tijd of laat je dat over aan de programmeurs?

Ik weet het nog niet Jack maar ik denk dat ik dat helemaal niet zo boeiend vind en het lekker overlaat aan de echt handige jongens zoals Rob. Ik leun daar wel een beetje op. ;D Eerst maar eens even kijken wat ik hier van bak. Dit is voor mij volkomen nieuw.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 17 juli 2018, 19:47:34
Ik heb vandaag toch nog even een testopstelling gemaakt met een rollenbankje Rob. Dat werkt net even makkelijker dan op mijn baan.

(https://myalbum.com/photo/SDAxL42uJtWc/720.jpg)

 Ook de Arduino aangesloten en de waarde gemeten. Als het locje net gaat rijden geeft hij aan pulsbreedte 100% - 611.   Bij "max" snelheid  100% - 2900.

Wat moet ik hier mee? :-\
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 17 juli 2018, 20:29:58
Hoi Pierre,

Ik denk dat de spanningsdelers nog niet goed zijn ingeregeld. Ik vermoed dat de spanning van je pulsbreedte hoger is dan 16V...
Als dat zo is dan kan de Arduino de "geen spanning" niet goed meten.
Kun je een voltmeter op de ingangsspanning zetten bij voluit?

Ik vermoed dat de frequentie rond de 3000Hz zit en dat de loc bij 20% pulsbreedte gaat rijden. Nu alleen nog kijken hoe we dat kunnen meten. Je zou kunnen proberen de 470 ohm weerstanden te vergroten tot bijvoorbeeld 1k ohm.
Heb je bij voor- en achteruit hetzelfde resultaat?

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 17 juli 2018, 21:08:53
Je hebt gelijk Rob. De ingangsspanning is bijna 17 volt. Ik zal morgen nog eens een poging wagen met een 13V trafo. Als het goed is moet daar de pulsbreedte voeding ook nog net op werken. Ook de weerstanden neem ik wat hoger.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Wim Corduwener op 18 juli 2018, 09:55:48
Ondanks dat deze materie ver buiten mijn bevattingsvermogen gaat lees ik toch mee en heb ik een vraagje zodat ik ook meteen weet of ik er ook maar iets van begrijp: een MSF-trafo van bijvoorbeeld Fleischmann, is dat een transformator met pulsbreedtemodulatie waar jullie het hier over hebben?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 18 juli 2018, 10:42:07
Ondanks dat deze materie ver buiten mijn bevattingsvermogen gaat lees ik toch mee en heb ik een vraagje zodat ik ook meteen weet of ik er ook maar iets van begrijp: een MSF-trafo van bijvoorbeeld Fleischmann, is dat een transformator met pulsbreedtemodulatie waar jullie het hier over hebben?

Ik zou je hier geen antwoord op kunnen geven Wim.




Rob,
Ik heb de twee weerstanden vergroot naar 1K. De voeding heb ik teruggebracht naar 13V maar het werkt nog steeds niet lekker.

Als ik (hulpmiddelen - Seriële monitor) start dat geeft hij inderdaad aan Geluidsmodule gestart en dat er gewacht wordt op een herkenbaar signaal. Als ik nu aan de draaiknop een klein stukje draai geeft hij geeft hij aan pin1 of pin2 en een regeltje met Pulsbreedte: 100%  Frequentie: 1602 en Module wacht op herkenbaar signaal. Dit regeltje blijft hij herhalen. Als ik dan aan de knop draai (maakt niet uit hoe hoog en welke kant op ) dan zegt hij: Herkenbaar signaal gevonden op rijpin 1 of 2.  Module wacht op herkenbaar signaal. Gevolgd door een hele zwik lopende puntjes met een ! er achter. Ook deze regel blijft hij maar herhalen. Als ik de knop hoger draai krijg ik steeds meer puntjes.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 18 juli 2018, 11:40:05
Hoi Wim,

Die Fleischmann MSF was even een opzoekvraag.

"MSF“ - Multi Sensible Feinsteuerung - bietet im gekennzeichneten „MSF“-Bereich langsamste Rangierfahrten durch kontinuierlichen Übergang von Halbwellen- über Mischwellen zur Vollwellen-Gleichrichtung. "

Oef.

Als ik het goed begrijp doet deze iets met de gelijkrichting van de (sinus) wisselstroom en afkappen daarvan. Ook hier is het idee dat je beter een hoge spanning kunt geven, maar dan niet de hele tijd. De reden hiervoor is dat een elektromotor meer koppel heeft bij een hoge spanning dan bij een lage. Door steeds kort een hoge spanning te geven is er meer koppel bij lage snelheid, en dus gaat langzaam rijden beter.

Dat lijkt wel op pulsbreedte besturing, maar is niet hetzelfde. Laat ik een uitleg proberen.

"Normale" analoge gelijkstroom is dubbel gelijkgerichte wisselstroom. Je regelt de snelheid door de spanning te varieren, dus de 'golven' worden hoger. Je kunt ook enkele gelijkrichting toepassen, dan gebruik je slechts de helft van de wisselspanning. Gevolg is dat er dus de helft van de tijd geen stroom is, de spanning hoger moet zijn in de tijd dat er wel stroom is en daarmee het koppel in de motor al beter is.
Als ik het goed begrijp, doet MSF enkele geljkrichting (Halbwellen), maar ook nog iets in het 'rangeerbereik'' door halve golven slechts voor een deel te gebruiken.
Dus zoiets als de enkelvoudige deelgolf hieronder.

(http://www.xs4all.nl/~robvd/Forum/SchemaGolven.JPG)


Pulsbreedte besturing werkt niet met 'ronde' golven, maar met 'hoekige'. Voor het rijden maakt dat niet zo heel veel uit, maar voor de geluidsmodules wel. De meting van de pulsbreedte in de Arduino of DigiSpark werkt door de tijd tussen de 'flanken' van de gollf te meten. Bij een hoekige golf gaat dit lekker digitaal, bij een ronde golf zit je steeds een hele tijd in digitaal niemandsland en is de meting onnauwkeurig of ronduit willekeurig.


Kortom: voor het rijden allemaal hetzelfde principe: koppel van de motor vergroten door steeds kort een hoge spanning te geven. Voor interpreteren van de snelheid op basis van de pulsbreedte is MSF niet geschikt.

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 18 juli 2018, 11:49:40
een MSF-trafo van bijvoorbeeld Fleischmann, is dat een transformator met pulsbreedtemodulatie waar jullie het hier over hebben?

Nee. Dat is "gewoon" een analoge trafo, maar met een handigheidje bij lage railspanningen waardoor een motortje eerder in beweging komt en beter trekt. Het is een trafo zonder actieve elektronica. Een PWM regelaar is juist volledig elektronisch.

Wat technischer: MSF doet "op volle snelheid" hetzelfde als een gewone trafo, namelijk volledige gelijkrichting. Bij spanningen onder de 50% gebruikt de MSF enkelvoudige gelijkrichting. Het maximale vermogen is dan wel een stuk lager, maar door maar de helft gelijk te richten moet de andere helft een hogere spanning hebben, en daarmee wordt de zogenaamde ankerkleef veel eerder overwonnen.

Ankerkleef is het verschijnsel dat het anker van de motor een hogere spanning nodig heeft om in beweging te komen, dan om te blijven draaien wanneer hij eenmaal in beweging is.

@Rob: Bij metingen aan mijn eigen MSF trafo heb ik overigens nooit iets van deelgolven kunnen zien.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 18 juli 2018, 11:54:52
Pulsbreedte besturing werkt niet met 'ronde' golven, maar met 'hoekige'. Voor het rijden maakt dat niet zo heel veel uit, maar voor de geluidsmodules wel.

De frequentie bij PWM is gewoonlijk ook beduidend hoger. Is een gelijkgerichte wisselspanning een signaal van 100Hz, de meeste PWM regelaars gaan daar ruim boven zitten, tot 20.000Hz. Voor de geluidsmodule kan dat ook een groot verschil uitmaken: bij hogere frequenties zijn alle pulsen veel smaller, maar er zijn er ook veel meer in dezelfde tijd.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 18 juli 2018, 11:56:15
Hoi Pierre.

Tsja, in dit soort uitdagingen raak je snel verzeild... Gelukkig nog niets in elkaar gesoldeerd.
We komen er vast wel uit, hoor.

Ik heb de twee weerstanden vergroot naar 1K. De voeding heb ik teruggebracht naar 13V maar het werkt nog steeds niet lekker.

Als ik (hulpmiddelen - Seriële monitor) start dat geeft hij inderdaad aan Geluidsmodule gestart en dat er gewacht wordt op een herkenbaar signaal. Als ik nu aan de draaiknop een klein stukje draai geeft hij geeft hij aan pin1 of pin2 en een regeltje met Pulsbreedte: 100%  Frequentie: 1602 en Module wacht op herkenbaar signaal. Dit regeltje blijft hij herhalen. Als ik dan aan de knop draai (maakt niet uit hoe hoog en welke kant op ) dan zegt hij: Herkenbaar signaal gevonden op rijpin 1 of 2.  Module wacht op herkenbaar signaal. Gevolgd door een hele zwik lopende puntjes met een ! er achter. Ook deze regel blijft hij maar herhalen. Als ik de knop hoger draai krijg ik steeds meer puntjes.
Dat is in ieder geval een verandering ten opzichte van gisteren....
Nu moet ik even denken, hoor....
Heb je ook al een meting gedaan zonder de loc op de rollerbank?
En je had 2 pusbreedte besturingen, toch? Heb je die andere ook al geprobeerd?

Ik heb nog ergens een programma'tje die precies laat zien wat er gemeten wordt. Die zoek ik even op. Dan is het misschient iets makkelijker te duiden wat er nu gebeurt....

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 18 juli 2018, 11:59:43
Hoi Dirk.

Duidelijke uitleg, die "ankerkleef".

Bij metingen aan mijn eigen MSF trafo heb ik overigens nooit iets van deelgolven kunnen zien.
Ah, ik probeerde de term "Mischwellen" te interpreteren. Blijkbaar is dat iets anders...

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 18 juli 2018, 12:10:58
Pierre,

Hierbij een ander pulsbreedte testprogramma'tje.

Deze laat op de seriële monitor zien wat de gemeten tijdsduur is van "hoog" en "laag" op elk van de pinnen.

/* PULS METEN
 * Hulpprogramma bij geluidsmodules voor analoge h0 trein.
 * Meet de puls op 2 pinnen waarmee de rijstroom wordt gemeten
 * en print deze op de seriële poort, en daarme op de USB poort.
 * Waarden zijn uit te lezen met de serial monitor op de computer.
 */
 // Geef de 2 pinnen op waar de rijstroom wordt gemeten
#define rijpin1 11
#define rijpin2 12

#define pullup false

// --- variabelen ---
double channel1;
double channel2;
double channel3;
double channel4;
double frequentie1;
double frequentie2;


void setup() {
  // rijpinnen initialiseren: input en interne pullup weerstand gebruiken
  pinMode(rijpin1,INPUT);
  pinMode(rijpin2,INPUT);
  digitalWrite(rijpin1,pullup);
  digitalWrite(rijpin2,pullup);
  // start de seriele communicatie (USB)
  Serial.begin(9600);
  Serial.println("Pulsmeting gestart. Alle waarden in micro seconden (us)");
}

void loop() {
  // meet de tijdspanne voor "hoog" en "laag" op beide pinnen
  channel1 = pulseIn(rijpin1,HIGH);
  channel2 = pulseIn(rijpin1,LOW);
  channel3 = pulseIn(rijpin2,HIGH);
  channel4 = pulseIn(rijpin2,LOW);

  // geef de meetwaarden weer
  Serial.print("Pin 1 periode: ");
  Serial.print(channel1 + channel2);
  Serial.print(" - hoog/laag: ");
  Serial.print(channel1);
  Serial.print(" / ");
  Serial.print(channel2);
  Serial.print("  || Pin 2 periode: ");
  Serial.print(channel3 + channel4);
  Serial.print(" - hoog/laag: ");
  Serial.print(channel3);
  Serial.print(" / ");
  Serial.println(channel4);
 
  delay (200);                       // even wachten...
}
// --- einde ---

Daar kun jij misschien niets mee, maar ik hoop dat ik er chocola van kan maken.
Ik hoor het wel.

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 18 juli 2018, 12:16:25
En eventueel kun je de uitvoer van de seriële monitor hier even posten.
Oh, en ik denk dat de 470 ohm in de spanningsdelers beter was dan de 1k. Het lijkt er op dat de "hoog" met 1k niet meer goed wordt gemeten.
 
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 18 juli 2018, 12:25:39
eerde de term "Mischwellen" te interpreteren. Blijkbaar is dat iets anders...

Tja, het is dan ook geen technische term maar een Fleischmann term. Volgens mij bedoelen ze met "gemengde golven" de situatie tussen 50% spanning en 100% spanning. Het is jaren geleden dat ik het met een scoop gemeten heb, dus ik moet even diep graven in mijn geheugen. Maar dit is wat ik me herinner.

Tussen 0% en 50% is alleen de "eerste helft" van de sinusgolf aanwezig. Oftewel, om de spanning van 0% tot 50% te regelen wordt de eerste helft van de sinus van 0% tot 100% geregeld.  Vanaf 50% trafospanning blijft die eerste helft van de sinus op 100% maximaal, maar nu komt de andere helft van de sinus erbij. Ook die begint bij 0% (voor trafospanning=50%) en loopt op tot 100% voor trafospanning = 100%.

Een uitgangsspanning van 75% bestaat dan uit eerste helften op 100% en tweede helften op 50%. Dat ziet er op de scoop een beetje bijzonder uit: hoge toppen en lage toppen wisselen elkaar af. Ik vermoed dat Fleischmann dat bedoelt met Mischwellen of gemengde golven.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 18 juli 2018, 12:30:56
Dirk,
Ik vind deze Mischwellen beschrijving heel erg plausibel. Maar ik laat mijn tekeningetje even voor wat het is  :D
Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Anne W op 18 juli 2018, 23:28:40
Geen geheimpje: elke digitale decoder levert een pulsbreedte gestuurde gelijkspanning aan de motor.

Groet, Anne W
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 26 juli 2018, 22:08:33
Hoi Pierre,

Ik ben wel benieuwd... Heb je al iets aan de pulsbreedte kunnen meten met het laatste programma'tje en dat weer met de 470/220 ohm spanningsdeler?

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 27 juli 2018, 11:23:45
Ha Rob ... weer thuis van de daagjes lekker kanoën.

Ik had een beetje een dipje laten we maar zeggen. Bij het opstarten van de pulsbreedte voeding ... poef! ... veel rook en stank en een stuk print weggeslagen. Overleden dus! Er bleek een moertje onder de print te liggen die de sluiting veroorzaakte. Eigen schuld .. dikke bult. ;D Moet je de rotzooi maar opruimen. ::)

De andere pulsbreedte besturingen zitten zover ingebouwd dat ik het niet zag zitten die te demonteren. Ik heb een beetje gezocht  in mijn eigen winkeltje (was helemaal vergeten dat ik dit nog had) en ben nog wat tegen gekomen. Een keurig bouwpakketje van meneer Conrad.

(https://myalbum.com/photo/Q5ObZyEXfrm9/720.jpg)

Op een "koele" avond maar eens even in elkaar gesoldeerd.

(https://myalbum.com/photo/4UKss6kqrq1H/720.jpg)

(https://myalbum.com/photo/eC8ypPFyxkSs/720.jpg)

De trafo met de laagste spanning die ik had waar toch de pulsbreedte regelaar nog op werkt gaf gelijkgericht 12,9 volt. Lager werkt niet. Ik heb goede hoop dat we met deze pulsbreedte regelaar wat meer succes hebben dan met de vorige. Ik denk dat de vorige wat problemen gaf omdat er ook een rem en optrek regeling op zat die de boel aan het foppen was.

(https://myalbum.com/photo/TZLtOWfgYzha/720.jpg)

Ik heb verder nog niets gedaan met de Arduino maar dat komt wel. Ik ga over een uurtje of zo ook op stap voor een paar dagen maar neem mijn laptop mee.

Ook nog een vraagje Rob. Als je iets nieuws op een Arduino gaat zetten moet je dan het oude er af halen of kan je hem gewoon overschrijven met een nieuwe code?





Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 27 juli 2018, 13:24:10
Hoi Pierre,

Jammer van die oude pulsbreedte besturing. Maar bij mij doet ook wel eens iets "poef". Alles dubbel controleren en dan alsnog verkeerd aansluiten omdat je tussendoor wordt afgeleid. Dat overkomt mij af en toe. En dan inderdaad weer even tijd nodig om te herpakken...
Maar deze nieuwe pulsbreedtebesturing ziet er wel solide uit en met 5A output heb je ruim voldoende vermogen. De uitgangsspanning zal wel ergens rond de 12V liggen (ik neem aan dat deze bedoeld was voor 12V halogeenlampen). Ben wel benieuwd of/hoe de richting geregeld wordt.

Op de Arduino kun je gewoon nieuwe software laden: de oude hoeft er niet eerst af.

Goede reis!

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 27 juli 2018, 15:00:00
deze nieuwe pulsbreedtebesturing ziet er wel solide uit en met 5A output heb je ruim voldoende vermogen. De uitgangsspanning zal wel ergens rond de 12V liggen (ik neem aan dat deze bedoeld was voor 12V halogeenlampen).

Ben wel benieuwd of/hoe de richting geregeld wordt.

Er stond geloof ik ergens in de beschrijving dat de schakeling was om kleine boormachines traploos te laten draaien. Maar echt zeker weten doe ik dat niet.

In principe rijden alle treinen bij mij gewoon vooruit dus over de rijrichting maak ik me niet zo druk. De enige plek waar de treinen beide kanten op rijden is bij de draaischijf en locloods. Maar dit hele gebied staat op een heel andere trafo.

Is de draairichting niet te regelen door gewoon de draden om te wisselen met b.v. een schakelaar?  Het blijft toch gelijkstroom?

Op de Arduino kun je gewoon nieuwe software laden: de oude hoeft er niet eerst af.

Mooi ... da's dan simpel.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 27 juli 2018, 15:21:45
Is de draairichting niet te regelen door gewoon de draden om te wisselen met b.v. een schakelaar?  Het blijft toch gelijkstroom?
Dat werkt ook. Voor het geluid in beide richtingen is een rijrichting wissel wel nodig om te testen.

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 27 juli 2018, 16:57:11
Als ik weer thuis ben ga ik aan de slag  ;D
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 30 juli 2018, 17:40:42
Vandaag weer thuis en ik ben gelijk in mijn Arduino verhaal gekropen. Even vanaf 0 weer begonnen. De Arduino schakeling opnieuw opgezet (met de 470 ohm weerstanden) en de voeding voorzien van een omkeerschakelaar zodat nu alles getest moet kunnen worden. Een nieuwe testopstelling met de nieuwe voeding gemaakt en ....

(https://myalbum.com/photo/g0IEcyGuhiVa/720.jpg)

... potverdorie ... 't werkt! :o

Even kijken of je wat kan met deze gegevens Rob.

De Arduino leest af dat de voeding werkt met ongeveer 2900 Hz.

Bij 42% gaat mijn locje pas lopen

Bij 95% krijg ik de kreet "wacht op bruikbaar signaal" en als ik iets terug ga pakt hij de draad weer op.

Deze gegevens zijn beide kanten op het zelfde en de wisseling van de pinnen wordt keurig aangegeven.

Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 30 juli 2018, 18:16:47
Kijk, dat is een bruikbaar resultaat!
Soms is het niet verkeerd om weer even van vooraf aan te beginnen (het is alleen niet zo leuk als dat voor je wordt bepaald).

Dat er vanaf 95% geen signaal meer is te lezen, komt omdat de 'laag' dan te kort wordt, denk ik. Dat hoeft geen probleem te zijn als je niet helemaal voluit rijdt (meestal racen de locs dan toch al sneller dan Max).

Dan wordt het nu tijd om rijstroom afhankelijk geluid te gaan maken. Eerst maar gewoon op de Arduino. Ik zoek even een programma'tje op....

Aansluitschema wordt de combinatie van de eerste en de tweede, dus de rijstroom op pinnen 11 en 12 (die kun je gewoon laten zitten), en de transistor op pin 13 (basis met weerstand van 220 of 470 ohm).

Bij welke pulsbreedte heeft de loc een redelijke schaal topsnelheid?

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 30 juli 2018, 18:56:16
Hoi Pierre.

Hier het programma'tje. Ik heb even de geluiden voor m'n verse BR64 als basis genomen. Geluid start bij 42% en bereikt maximale puf-snelheid bij 90%. Als het goed is kun je gewoonweg de snelheidsregelaar helemaal voluit draaien en zakt de tsjoek-tsjoek snelheid weer als je onder de 90% komt....


  /*
 * RUISGENERATOR STOOMTREIN
 * Stoomtrein geluiden met rijstroom afhankelijk "puffen" van ruis. Voor analoog rijden met geluid.
 * Rijstroom met pulsbreedtebesturing is nodig: de pulsbreedte wordt omgerekend naar puf-snelheid.
 *
 * Eenvoudige extra geluidsfuncties:
 * 1: fluitje (lijkt meer op een telefoon)
 * 2: sissen
 * 3: remmen
 * 4: stilte (vrijloop)
 * Functies werken redelijk bij langzaam rijden en goed bij stilstand en snel rijden
 *
 * versie 1.1 - 29 jul 2018
 */


// --- DEFINITIES ----

// kies de loc om te compileren: zet precies één definitie op 'true'
#define LocPierre true
#define BR64      false
#define BR70      false
#define BR91      false

#define Ruispin       13               // pin voor aansturen van speaker: pin 1 of 0 (0 = 5 sec. vertraging)
#define rijpin1       12               // rijstroom meting
#define rijpin2       11               // rijstroom meting

//geluidsdefinities per type loc

#if LocPierre
  // definities voor slagen BR64. ("paa tsjie paa tsjoe...")
  #define Startfreq1  1000             // laagste frequentie ruis slag 1
  #define Eindfreq1   3000             // hoogste frequentie ruis slag 1
  #define Startfreq2  1300             // laagste frequentie ruis slag 2
  #define Eindfreq2   5500             // hoogste frequentie ruis slag 2
  #define Startfreq3  1000             // laagste frequentie ruis slag 3
  #define Eindfreq3   3000             // hoogste frequentie ruis slag 3 
  #define Startfreq4   940             // laagste frequentie ruis slag 4
  #define Eindfreq4   2500             // hoogste frequentie ruis slag 4
  // berekening snelheid
  #define pulsbreedtestil   42         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    90         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       190         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        60         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)
  // opstart geluid
  #define BeginSis         930         // lengte van het sisgeluid bij starten (en korte stroomonderbrekingen)
#endif

#if BR64
  // definities voor slagen BR64. ("paa tsjie paa tsjoe...")
  #define Startfreq1  1000             // laagste frequentie ruis slag 1
  #define Eindfreq1   3000             // hoogste frequentie ruis slag 1
  #define Startfreq2  1300             // laagste frequentie ruis slag 2
  #define Eindfreq2   5500             // hoogste frequentie ruis slag 2
  #define Startfreq3  1000             // laagste frequentie ruis slag 3
  #define Eindfreq3   3000             // hoogste frequentie ruis slag 3 
  #define Startfreq4   940             // laagste frequentie ruis slag 4
  #define Eindfreq4   2500             // hoogste frequentie ruis slag 4
  // berekening snelheid
  #define pulsbreedtestil   32         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    56         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       190         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        60         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)
  // opstart geluid
  #define BeginSis        3530         // lengte van het sisgeluid bij starten (en korte stroomonderbrekingen)
#endif

#if BR70
  // definities voor slagen BR70 ("tsjoe, tsjie, tsjoe, tsjie")
  #define Startfreq1  1700             // laagste frequentie ruis slag 1
  #define Eindfreq1   3900             // hoogste frequentie ruis slag 1
  #define Startfreq2  2000             // laagste frequentie ruis slag 2
  #define Eindfreq2   4100             // hoogste frequentie ruis slag 2
  #define Startfreq3  1720             // laagste frequentie ruis slag 3
  #define Eindfreq3   3930             // hoogste frequentie ruis slag 3 
  #define Startfreq4  1980             // laagste frequentie ruis slag 4
  #define Eindfreq4   4050             // hoogste frequentie ruis slag 4
  // berekening snelheid
  #define pulsbreedtestil   28         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    65         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       375         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        50         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)
  // opstart geluid
  #define BeginSis        1150         // lengte van het sisgeluid bij starten (en korte stroomonderbrekingen)
#endif

#if BR91
  // definities voor slagen BR91: 1e wat hoger, laatste wat lager dan de 2 middelste slagen ("tsjie, tsja, tsja, tsjoe")
  #define Startfreq1  1950             // laagste frequentie ruis slag 1
  #define Eindfreq1   4350             // hoogste frequentie ruis slag 1
  #define Startfreq2  1800             // laagste frequentie ruis slag 2
  #define Eindfreq2   4000             // hoogste frequentie ruis slag 2
  #define Startfreq3  1800             // laagste frequentie ruis slag 3
  #define Eindfreq3   4000             // hoogste frequentie ruis slag 3 
  #define Startfreq4  1750             // laagste frequentie ruis slag 4
  #define Eindfreq4   3900             // hoogste frequentie ruis slag 4
  // berekening snelheid
  #define pulsbreedtestil   26         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    84         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       800         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        71         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)
  // opstart geluid
  #define BeginSis        1750         // lengte van het sisgeluid bij starten (en korte stroomonderbrekingen)
#endif

// algemene geluidsdefinities
#define pauze         0.33             // factor puf/pauze (elke slag heeft voor een deel stilte)
#define RemLaag    3200                // frequentiebereik voor remgeluid
#define RemHoog    3800
#define SisLaag    3000                // frequentiebereik voor sisgeluid
#define SisHoog    5500

// definities voor de meting van de rijstroom
#define pullup               false     // geeft aan of de interne pullup weerstand gebruikt moet worden
#define maxpulsperiode       5000      // hoe lang wachten (minimaal 2x periode rijstroom PWM)

// Frequenties (Periodes) op de rijstroom
#define rijPeriode            2020     // rijstroom puls in us
#define functie_01_Periode    1500     // Periode (freq.) functie 1
#define functie_02_Periode    1250     // Periode (freq.) functie 2
#define functie_03_Periode     990     // Periode (freq.) functie 3
#define functie_04_Periode     790     // Periode (freq.) functie 4
#define functie_05_Periode     590     // Periode (freq.) functie 5 - niet gebruikt
#define functie_06_Periode     490     // Periode (freq.) functie 6 - niet gebruikt
#define pulsruis               100     // maximaal verschil in gemeten Periodes (ruis)
#define minhoog                200     // minimaal "hoog" signaal

// --- CONSTANTES ---

const float sqrtpbstil = 100*sqrt(10);
const float sqrtpbmax  = 100*sqrt(10+pulsbreedtemax-pulsbreedtestil);


// ---- VARIABLEN ----

// puf-geluid variabelen: 4 slagen (is tweezijdige tweecylinder loc)
unsigned int ruisStartFreq[] {Startfreq1, Startfreq2, Startfreq3, Startfreq4};  // hoogste frequentie puf-ruis per slag
unsigned int ruisEindFreq[]  {Eindfreq1,  Eindfreq2,  Eindfreq3,  Eindfreq4 };  // laagste frequentie puf-ruis per slag
int slag = 0;

// rijstroom variabelen
int rijpin[] {rijpin1, rijpin2};
int vooruit = 1;                      // richting: bepaalt welke pin wordt uitgelezen voor de rijstroom puls
double pulsbreedteHoog;
double pulsbreedteLaag;
double pulsPeriode;
float pulsbreedte = 0;                // pulsbreedte in %
int functie = 0;                      // speciale functie frequentie gemeten

unsigned int  puf;                    // lengte puf-slag (ms)
unsigned long pze;                    // pauze tot aan klok stand(ms)


// --- FUNCTIES ---

// Functie: maak puf geluid (één slag)
// Geeft ruis voor een deel van de opgegeven lengte en stil voor de resterende tijd (factor definitie)
// De ruisfrequentie neemt langzaam af om enigszins de volume afname te simuleren.
// input: lengte van de slag (in ms)
//        laagste frequentie van de ruis
//        hoogste frequentie van de ruis
// output: tijd tot einde pauze van de puf
unsigned long maakPuf(int lengte, unsigned int laag, unsigned int hoog) {
  unsigned int  freq;
  unsigned long mils;
  float factor = 1 - (0.09/lengte);
  mils = millis() + (1-pauze) * lengte;
  while (millis() < mils) {
    freq = random (laag, hoog);
    tone (Ruispin,freq);
    laag = laag*factor;
    hoog = hoog*factor;
  }
  noTone(Ruispin);
  return millis() + (lengte * pauze);                         // pauze tijd tussen de puffen
}

// Functie: Afspelen van ruis.
// Gebruikt voor sissen en remgeluid. Constant ruis-geluid gedurende de opgegeven lengte (in ms).
// input: lengte van de slag (in ms)
//        laagste frequentie van de ruis
//        hoogste frequentie van de ruis
void speelRuis(unsigned int lengte, unsigned int laag, unsigned int hoog) {
  unsigned int  freq;
  unsigned long mils;
  mils = millis() + lengte;
  while (millis() < mils) {
    freq = random (laag, hoog);   
    tone (Ruispin,freq);
  }
  noTone(Ruispin);
}

// Functie: Afspelen van een 'fluitje'
// Afwisselend een hoge en lage frequentie met een kleine frequentie variatie.
// input: lengte (in ms)
void speelFluitje(unsigned int lengte) {
  unsigned int  freq;
  unsigned long mils;

  mils = millis() + lengte;
  while (millis() < mils) {
    tone (Ruispin,random (2100,2120));
    delay (20);
    tone (Ruispin,random (2400,2430));
    delay (18);
  }
  noTone(Ruispin);
}

void meetPuls() {
  // puls meting variabelen: lengte 'hoog', 'laag' en trillingstijd (periode). Alle tijden in us.
  pulsbreedteHoog = pulseIn(rijpin[vooruit], HIGH, maxpulsperiode);
  pulsbreedteLaag = pulseIn(rijpin[vooruit], LOW, maxpulsperiode );
  pulsPeriode = pulsbreedteHoog + pulsbreedteLaag;
}

// HERKEN FUNCTIE-FREQUENTIE
// functie voor het checken van functie-frequenties
// op de puls (functietoets).
int getFunctie () {
  int f = 0;
 
  if (abs (pulsPeriode - functie_01_Periode) < pulsruis) { f = 1;}
  if (abs (pulsPeriode - functie_02_Periode) < pulsruis) { f = 2;}
  if (abs (pulsPeriode - functie_03_Periode) < pulsruis) { f = 3;}
  if (abs (pulsPeriode - functie_04_Periode) < pulsruis) { f = 4;}

  return f;
}

void setup() {
  pinMode     (Ruispin,OUTPUT);
 
  pinMode     (rijpin[0],INPUT);
  digitalWrite(rijpin[0],pullup);
  pinMode     (rijpin[1],INPUT);
  digitalWrite(rijpin[1],pullup);
  speelRuis (BeginSis, SisLaag,SisHoog);               // sissen bij opstarten
}

void loop() {
  // Pulsbreedte bepalen
  vooruit = !vooruit;                             // wissel de pin waarop de rijstroom wordt gemeten
  meetPuls(); 
  pulsbreedte = 100 * pulsbreedteHoog / pulsPeriode;
/* 
  functie = getFunctie();
 
  // speciale geluidsfunctie gevonden
  if (functie) {
    // als speciale functie is gevonden, controleer de functie frequentie nogmaals.
    // Hiermee wordt onterecht meten voorkomen (door bijvoorbeeld storing op de stroomopname).
    meetPuls();
    if (functie == getFunctie()) {                     // nog steeds dezelfde funtie op de rijstrrom
      switch (functie) {                               // speel functie 1, 2, 3 of 4.
        case 1:
          speelFluitje(1800);                          // fluitje afspelen, 1,8 sec.
        break;
        case 2:
          speelRuis (3000, SisLaag,SisHoog);           // sissen, 3 sec.
        break;
         case 3:
          speelRuis (3600, RemLaag,RemHoog);           // remgeluid 3,6 sec.
        break;
         case 4:
          pze = millis()+ 4500;                        // 4,5 sec. stilte = vrijloop
        break;
      }
    }
  }
  else {                                               // geen speciale functie, dan rij-geluid
*/
    // rijgeluid
    // tweecylinder = 4 puf slagen met verschil in de slagen (volgens definities van de loc)
    if (pulsbreedte > pulsbreedtestil && millis() > pze) {                   // lok rijdt en er is nu geen puf-pauze of vrijloop
      // puf slag berekenen
      if (pulsbreedte > pulsbreedtemax) {
        pulsbreedte = pulsbreedtemax;
      }
      puf = map(100 * sqrt (10+pulsbreedte-pulsbreedtestil), sqrtpbstil, sqrtpbmax, langstePuf, kortstePuf);  // reken pulssbreedte % om naar puf-tijd
      pze = maakPuf(puf, ruisStartFreq [slag], ruisEindFreq [slag]);         // maak puf-ruis. Functie geeft resterende pauze-tijd terug
      // volgende puf-slag (volgnummer 0-3)
      if (slag < 3) {
        slag++;
      }
      else {
        slag = 0;
      }
    }
//  }                                                     // einde functie spelen / rijgeluid
}                                                       // einde hoofd-lus

Hierbij ook het volledige aansluitschema. Na het laden van het programma kun je eventueel de Arduino van de computer loskoppelen. Als het goed is haalt de Arduino dan voldoende uit de rijstroom zelf.

(http://www.xs4all.nl/~robvd/Forum/SchemaModulePulsRuisUno.jpg)


Belangrijk aan de voeding: de Elco van 47uF of meer over de + en - van de gelijkrichter. De + gaat op de VIN (ingang spanning van de Arduino, deze maakt daar zelf 5V van). De collector van de transistor gaat ook op de + van de gelijkrichter: dan heeft de speaker wat meer vermogen.

Het geluid begint met een sis van bijna een seconde zodra de Arduino is opgestart. De tsjoek-tsjoek begint vanaf 42% pulsbreedte.

Succes!

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 30 juli 2018, 19:53:26
Ik heb toch nog een vraagje Rob:

Kan ik deze code ook op een Digispark zetten?
Ik zal je verklaren waarom ik dit vraag. Ik heb stiekem vanmiddag het schema van je gemaakt met een Digispark. ::)

(http://www.xs4all.nl/~robvd/Forum/SchemaModuleRuis2.jpg)

(https://myalbum.com/photo/yMJyjwCF7qL9/720.jpg)

En dat ziet er volgens mij praktisch het zelfde uit.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 30 juli 2018, 21:09:32
Hoi Pierre,

Dat kan, maar dan moet je eerst nog de DigiSpark toevoegen aan de Arduino IDE. Als het goed is werkt deze procedure:

In de Arduino IDE:
1. Ga naar "bestand" - "voorkeuren".
Voeg daar deze URL toe aan "Aditionele Board URLs": http://digistump.com/package_digistump_index.json (http://digistump.com/package_digistump_index.json)
2. Ga naar "Hulpmiddelen" - "Board". Bovenaan de lijst "Board Beheer"
3. Je krijgt dan een lijst met pakketten. Kies "Installeer" voor de "DigiStump AVR Boards by DigiStump"
Als het goed is gaat dan iets geïnstalleerd worden
Als je een windows pop-up krijgt om de drivers te installeren, druk op "volgende" om de drivers ook te installeren.
4. Na alle installaties kun je, als het goed is, onder aan de lijst met Boards (let op het pijltje onder om te scrollen) "DigiSpark (Default 16.5 MHz)" selecteren.

In het programma'tje vervang je deze
#define Ruispin       13               // pin voor aansturen van speaker: pin 1 of 0 (0 = 5 sec. vertraging)
#define rijpin1       12               // rijstroom meting
#define rijpin2       11               // rijstroom meting

Door deze:
#define Ruispin        0               // pin voor aansturen van speaker: pin 1 of 0 (0 = 5 sec. vertraging)
#define rijpin1        1               // rijstroom meting
#define rijpin2        2               // rijstroom meting

Dat zijn de definities voor de gebruikte pinnen. Dus i.p.v. 11-13 op de Arduino gebruik je nu 0-2 op de DigiSpark.
En dan compileren en uploaden.
De DigiSpark upload werkt iets anders dan de Arduino: je moet 'm pas inpluggen als het compileren klaar is. Dat zie je onder aan het scherm.Je hebt dan 60 seconden.... Als je te vroeg bent met inpluggen, dan werkt de upload niet.
En misschien moet je  bij de eerste upload poging 2 keer inpluggen: 1 keer voor de installatie van de drivers voor/door Windows, en daarna nog een keer zodat de upload kan beginnen met de drivers klaar voor gebruik.

Hoop dat 't gaat lukken zo.

en let op: als er straks stroom staat op de DigiSpark, duurt het 5 seconden voor het programma start (met een sis). Dat kan er ook nog wel vanaf, maar dat is dan weer de volgende procedure....

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 30 juli 2018, 21:17:41
Mooi bedankt Rob ... ga ik morgen gelijk proberen. ;)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 30 juli 2018, 21:24:40
Ben benieuwd, Pierre.

Nog een laatste tip, het kan helpen om een andere USB poort te nemen voor de DigiSpark dan voor de Arduino. Ik kreeg de boel niet aan de praat op dezelfde USB poort op mijn computer. Dus bij mij is nu is de linker voor de DigiSpark en de rechter voor de Arduino's.

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 30 juli 2018, 21:30:37
We gaan het meemaken. ;D
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 31 juli 2018, 17:52:04
Rob,
Installatie van "DigiStump AVR Boards by DigiStump" is gelukt en ik kan "DigiSpark (Default 16.5 MHz)" openen en gebruiken.
De code aanpassen was ook geen probleem.
Maar dan ....

Op het moment dat ik op uploaden druk krijg ik inderdaad dat de tekst dat compileren begint en als het klaar is de tekst "je hebt nog 60 sec ". Maar die heb ik niet :o  In de groene balk er boven verschijnt gelijk de tekst "Uploaden voltooid" Nou eheu .... niet dus. Heb jij enig idee???

(https://myalbum.com/photo/WLDfqoCiDuC2/720.jpg)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 31 juli 2018, 18:45:10
Hoi Pierre

De DigiSpark pat niet helemaal naadloos in de Arduino IDE.
Negeer dat "Uploaden voltooid. Gewoon de DigiSpark inpluggen. In het onderste scherm zie je dan iets verschijnen over Micronucleaus en zo. En even later zegt-ie daar iets van 100% of done of zoiets. Dan is het programma'tje op de DigiSpark geladen.

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 31 juli 2018, 20:16:22
Hij doet/zegt helemaal niets Rob. Ik heb het twee keer 5 minuten geprobeerd maar hij blijft een beetje raar pingelend geluid geven en dezelfde tekst blijft staan. Een nieuwe DigiSpark geprobeerd. Het hele programma er af geknikkerd en weer opnieuw er opgezet ... niets helpt. :-\
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 31 juli 2018, 20:44:28
Hoi Pierre,

De meest voor de hand liggende: de DigiSpark gaat niet ver genoeg in de USB poort. In sommige computers is de USB poort wat verder naar achteren ingebouwd en dan maken net niet alle 4 pinnen contact. Je zou dan aan USB verleng kabel kunnen proberen, of een USB poort zoeken die meer 'aan de oppervlakte' ligt.

Verder kan het zijn dat de drivers niet goed zijn geïnstalleerd. Ik heb deze gebruikt:
http://www.xs4all.nl/~robvd/Forum/Digistump.Drivers.zip (http://www.xs4all.nl/~robvd/Forum/Digistump.Drivers.zip)

Zip bestand uitpakken en "Install Drivers.exe" uitvoeren.


en als laatste: zorg er voor dat er niets aan pin 3 en 4 zit: deze kunnen de USB communicatie verstoren (maar volgens mij had je deze al niet aangesloten).

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 31 juli 2018, 21:17:50
Ik ben er ondertussen al uit Rob. De drivers waren niet goed geïnstalleerd. Ik heb dit opnieuw gedaan en nu werkt alles perfect.

Nou is mijn volgende probleem aan de beurt. :) De loc geeft al geluid als het motortje en dus de loc nog stil staat en maakt ook een "te snel" geluid bij een te lage snelheid. Kan ik dat ergens in de code aanpassen?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 31 juli 2018, 21:27:40
Hoi Pierre,

Goed dat 't gelukt is. Het is nu dan nog een kwestie van inregelen van de software.
Alles wat je zegt kun je definiëren in de software. Dit is vaak een beetje puzzelen en uitproberen.
Je kunt de aanloop pulsbreedte en maximale snelheid definiëren en voor elk hoe lang dan een 'puf' (tsjoek) duurt. De tussenliggende tsjoeks worden dan uitgerekend.

In het eerste stuk, tussen de  "#if LocPierre" en eerste regel met "#endif" staat ergens dit deel
  // berekening snelheid
  #define pulsbreedtestil   42         // pulsbreedte in % waaronder loc stil staat
  #define pulsbreedtemax    90         // pulsbreedte waar de maximum snelheid (pufritme) wordt bereikt 
  #define langstePuf       190         // langste puf (in ms) - langzaam rijden
  #define kortstePuf        60         // kortste puf (in ms) - topsnelheid (minimum ligt rond 50ms)
pulsbreedtestil definieert waar de loc gaat rijden. Deze staat nu op 42% pulsbreedte. Blijkbaar moet die waarde wat hoger.
langstePuf is de tijdsduur van een puf (in ms) als de loc gaat rijden. Als de puf bij langzaam rijden te snel is, maak je dit getal hoger.
korstePuf is de tijdsduur op maximale snelheid.
En die maximale snelheid pulsbreedte % is pulsbreedtemax.

Hier een beetje mee pielen tot het naar de zin is.
Soms moet je ook een beetje een compromis zoeken met en zonder last en heling op en af. Dat krijg je nooit allemaal precies synchroon....

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 31 juli 2018, 22:04:18
Dank je voor deze info Rob. Morgen gaan we weer verder. :)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 6 augustus 2018, 12:38:44
Morgen is een weekje later geworden. :)

Mijn eerste locje waar ik geluid in wil maken met een DigiSpark moet niet te ingewikkeld zijn. In de eerste plaats heb ik nog niet alle kleine onderdelen binnen en ook moet ik natuurlijk nog even oefenen. De keuze is gevallen op een locje wat ik (aan het nummer te zien) in Januari 2015 heb omgebouwd en opgeknapt. Deze heeft de motor in de loc dus ik heb een hele tender om vol te proppen.

(https://myalbum.com/photo/BzjUCkquIB7V/720.jpg)

Komt goed uit want de heel kleine luidsprekertjes heb ik nog niet binnen en de kleinste die ik heb gaat hier precies in. Lekkere grote klankkast dus goed geluid.

(https://myalbum.com/photo/4iwKXqRmKMyN/720.jpg)

Als alles er in zit is dit het resultaat. Het soldeerwerk verdiend niet de hoofdprijs maar alles werkt naar behoren. Over het geheel komt een stukje dubbelzijdig plakband en wat ballast. De USB aansluiting van de DigiSpark blijft bereikbaar.

(https://myalbum.com/photo/doGo0MXkK105/720.jpg)

Ik heb geen zin om mijn baan te poetsen en de DigiSpark werkt niet op mijn andere sneheidsregelaars dus ik maak me er makkelijk van af met een filmpje van de loc op de testbank. ;D


En nou ga ik deze loc nog vuiler maken. 8)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: NickvR op 6 augustus 2018, 17:15:47
Mooi gedaan hoor Pierre! Klinkt leuk :)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Wim Corduwener op 6 augustus 2018, 19:43:30
Klinkt hartstikke goed en ook mooi ingebouwd!
Klasse!
Klinkt ook veel beter dan dat je bijvoorbeeld de balgjes uit een koekkoeksklok zou halen en die zou inbouwen in een locje... maar ja “tsjoek-tsjoek” klinkt toch weer heel anders dan “koek-koek”.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 6 augustus 2018, 21:29:13
Pierre, helemaal top!

Met zo'n grote speaker en klankkast past het geluid goed bij zo'n grote loc.
Zo te zien heb je op rechts nog ruimte voor een extra Elco. Hoe groter (de gezamenlijke) capaciteit is, hoe minder gevoelig de loc straks is voor onderbrekingen in de stroomopname.

Misschien alleen nog die 5 seconden opstart-tijd er af halen?

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 6 augustus 2018, 22:53:01
Dank heren,

Met zo'n grote speaker en klankkast past het geluid goed bij zo'n grote loc.

Klopt Rob ... het geluid is lekker zo.

Zo te zien heb je op rechts nog ruimte voor een extra Elco. Hoe groter (de gezamenlijke) capaciteit is, hoe minder gevoelig de loc straks is voor onderbrekingen in de stroomopname.

Moet er een 2e elco naast of kan ik hem gewoon voor een grotere vervangen? Tot hoe groot kan ik gaan? Ik heb plaats genoeg. :)

Misschien alleen nog die 5 seconden opstart-tijd er af halen?

Dat zou lekker zijn Rob. Heb je daar al een oplossing voor? Als er een hapering is begint het hele verhaaltje gewoon op nieuw.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 6 augustus 2018, 23:44:00
Hoi Pierre,
Ik heb mij m'n MP3 versie Elco's van 2200 uF gebruikt (en meer in de geluidswagon). Dat trekt de voeding nog. Vervangen kan, een 2e parallel er naast kan ook.

Ik heb een procedure voor het verwijderen van de 5 seconde vertraging. Als er dan een korte hapering is, hoor je alleen de opstart-sis en daarna gaat-ie gewoon weer door. Dat is bij het rijden wel een stuk beter, hoor.

Het betekent wel dat pin 0 vrij moet komen: dan staat de ruis op pin 1 en de rijstroom meting op pin 2 en 4.

Ik zet binnenkort even de procedure en bijbehorende bestanden hier.
Upload van software wordt dan wel iets omslachtiger: pin 4 moet even los (dit is ook een van de USB pinnen) en op pin 0 moet tijdens de upload een vebinding met de GND worden gemaakt (en weer los na de upload). Maar als het geluid naar de zin is, hoef je de software niet meer (vaak) te veranderen en is dit extra werk minder erg dan steeds een 5 seconde moeten wachten tot het geluid weer wordt hervat.

Rob

PS: je kunt al het soldeerwerk laten zitten. Zoals het nu is kan de 5 seconden er af en het programma er weer op. Dan daarna de pinnen veranderen.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 7 augustus 2018, 08:29:20
Ik zet binnenkort even de procedure en bijbehorende bestanden hier.

Ik wacht het even rustig af Rob. :) Dan vervang ik die elco ook gelijk voor een grotere.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: mark mms op 7 augustus 2018, 12:48:14
Top gemaakt Pierre!
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 7 augustus 2018, 15:00:58
Dank je Mark.




Weer wat mooi klein spul binnen gekregen (o.a. heel kleine luidsprekertjes) dus we kunnen weer verder. Ook met wat kleinere locjes. ;)

(https://myalbum.com/photo/8nsYaCIyxKoc/720.jpg)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Wim Corduwener op 7 augustus 2018, 15:08:53
Domme vraag: zitten er in afgedankte smartphones ook geen hele kleine luidsprekertjes? Meestal zijn die ook nog van heel behoorlijke kwaliteit.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 7 augustus 2018, 15:32:59
Over deze van Wim

Domme vraag: zitten er in afgedankte smartphones ook geen hele kleine luidsprekertjes? Meestal zijn die ook nog van heel behoorlijke kwaliteit.

Het er uit halen is nogal een gepriegel, vermoed ik. Ik dacht ooit de speakertjes uit een overleden laptop te kunnen halen, maar die waren zo ingebouwd dat ze er niet los uit te halen waren. Uiteindelijk hield ik alleen wat brokken over. Bij smartphones is dat nog erger geïntegreerd in het geheel, vermoed ik.

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 7 augustus 2018, 20:01:16
Goed, de 5 seconden opstart tijd van de DigiSpark afhalen: hier is de procedure.

1. Download de nieuwe bootloader
2. Nieuwe bootloader op de DigiSpark laden
3. Tsjoek-tsjoek programma laden, met andere pin configurratie
4. Pinnen omsolderen


Download bootloader

De bootloader is het programma dat wordt gestart als de microcontroller, de ATtiny, start. De standaard bootloader 'kijkt' de eerste 5 seconden of de DigiSpark is aangesloten op een USB van de computer. Als dat zo is, dan kan er een nieuw programma worden geladen.
Een zekere DigiDucky heeft een bootloader gemaakt die alleen 5 seconden op een USB signaal wacht als pin 0 met de GND is verbonden. Is die verbinding tussen pin 0 en GND er niet, dan start de bootloader meteen het programma dat is geladen.

De zip met de benodigde bestanden vind je hier:
https://sites.google.com/site/csapractical/DigiDucky.zip (https://sites.google.com/site/csapractical/DigiDucky.zip)

Na het downloaden de zip uitpakken (en onthouden waar het uitgepakte bestand staat).


Bootloader op DigiSpark laden

Hiervoor gebruik je de opdrachtprompt van Windows (ja, we gaan weer even het DOS tijdperk in): Typ "CMD" in de zoekfunctie op de taakbalk en start de opdrachtprompt.
In het uitgepakte zip bestand van DigiDucky staat de micronucleus.exe. Sleep dit bestand naar het opdrachtprompt venster.
Typ dan een spatie in het opdrachtvenster. Sleep vervolgens het bootloader bestand micronucleus-1.11-entry-jumper-pb0-upgrade.hex naar het opdrachtprompt venster.
Typ dan weer een spatie gevolgd door "--run".

Het opdrachtpromptscherm ziet er dan uit als iets dergelijks:

(http://www.xs4all.nl/~robvd/Forum/DSbootloader01.JPG)


Druk vervolgens op 'enter'. Nu sluit je de DigiSpark aan op de USB poort.
Even wachten en dan wordt de nieuwe bootloader geïnstalleerd op de DigiSpark. Daarna ziet het scherm er ongeveer zo uit.

(http://www.xs4all.nl/~robvd/Forum/DSbootloader02.JPG)


Tsjoek-tsjoek programma laden

Vervolgens kan de met de Arduino IDE het programma opnieuw worden geladen. Wel even de pin configuratie veranderen: met de transtor op pin 0 blijft de 5 seconde vertraging bestaan (solderen komt straks: nu is de weerstand met transistor op pin 0 nog een mooie verbinding met de GND).

Dus in het programma wordt
#define Ruispin       0               // pin voor aansturen van speaker: pin 1 of 0 (0 = 5 sec. vertraging)
#define rijpin1       1               // rijstroom meting
#define rijpin2       2               // rijstroom meting
vervangen door
#define Ruispin       1               // pin voor aansturen van speaker: pin 1 of 0 (0 = 5 sec. vertraging)
#define rijpin1       2               // rijstroom meting
#define rijpin2       4               // rijstroom meting

En dan uploaden.


Pinnen omsolderen
Pin 0 kan nu niet meer worden gebruikt. Dus de ruis komt nu van pin 1 en de rijstroom wordt gemeten op pin 2 en 4.
Dan wordt het aansluitschema als volgt:

(http://www.xs4all.nl/~robvd/Forum/SchemaModuleRuis3.jpg)


En klaar: de lok moet nu meteen geluid geven en alleen even 'sissen' bij stroomonderbrekingen.

Mocht je later nieuwe software willen laden, dan:
- pin 0 met GND verbinden
- pin 4 los maken (de spanningsdeler op deze pin verstoort de data-verbinding van de USB die hier ook op zit).


Succes!

Rob

Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 7 augustus 2018, 21:34:57
Wauww ... dit is voor mij echt een brug te ver Rob. :o Ik denk dat ik die 5 sec. maar voor lief neem :-\ :( Ik vind het al knap van mij zelf dat ik tot hier gekomen ben.


Domme vraag: zitten er in afgedankte smartphones ook geen hele kleine luidsprekertjes? Meestal zijn die ook nog van heel behoorlijke kwaliteit.

Ik heb geen idee of deze luidsprekertjes hiervoor te gebruiken zijn Wim. Maar ik heb ook geen doos met afgedankte smartphones. ;D Bovendien kost zo'n luidsprekertje maar 1,64 euro.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 7 augustus 2018, 23:01:32
Ik denk dat ik die 5 sec. maar voor lief neem :-\ :( Ik vind het al knap van mij zelf dat ik tot hier gekomen ben.
Mee eens, Pierre. Dan alleen nog een grotere Elco er op, zou ik zeggen....

Je schreef dat het geluid niet werkt op de andere (ingebouwde) pulsbreedte besturingen?

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 8 augustus 2018, 08:30:39
Precies Rob :) De elco ga ik vandaag nog vervangen en dan begin ik aan het volgende project. Een oude Engelse loc. Eens kijken of we daar nog wat van kunnen bakken.

Het geluid werkt inderdaad niet op de andere pulsbreedte besturingen. Deze werken ook onder een hogere spanning (16V). Misschien omdat er een instelbare optrek/afrem regeling in zit? Ik denk dat ik deze t.z.t. vervang door de regelaar die ik nu gebruikt heb. Deze werkt perfect. Ze zijn nog steeds te koop bij Conrad onder nummer 196460.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 8 augustus 2018, 10:11:23
Mooi Pierre,

In ieder geval is het eerste project tot een goed einde gekomen. Gefeliciteerd met het resultaat! Tsja, nu zou ik die loc wel eens tsjoekend over de dubbeldeks boogbrug willen zien...

Over die andere pulsbreedte regelaars: het kan inderdaad een heel uitzoekwerkje worden om uit te vinden waarom dat niet werkt. Dan is het beter om die Conrad versie er in te zetten.

Ben benieuwd naar die engelse loc.

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Wim Corduwener op 8 augustus 2018, 11:31:39
"Ook @Pierre gaat (een soort van) digitaal."
Een soort van? Volgens mij gaat Pierre heel erg digitaal!
Knap werk, knap resultaat. Respect!

Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 23 augustus 2018, 22:56:44
Gepruts met de 2e loc met geluid.

Dat is een oude Engelse Merlin. Eerst heb ik de boel uit elkaar gehaald om op te knappen en na een schilderbeurt wil ik daar ook geluid in bouwen met een DigiSpark.

(https://myalbum.com/photo/2vto5XYfiu7q/720.jpg)

(https://myalbum.com/photo/UIY8PLjeVnBb/720.jpg)

(https://myalbum.com/photo/RAzOiVAEdY1o/720.jpg)

Achterin kan ik nog een vrij groot luidsprekertje kwijt in een mooie klankkast. Hier is straks bijna niets meer van te zien als er een machinist en een stoker voor komt te staan.

(https://myalbum.com/photo/uOVGYOxqVkfW/720.jpg)

(https://myalbum.com/photo/Fjj6aks5cEgw/720.jpg)

Er is onder de kap vrij veel ruimte om de zaak in te bouwen.

(https://myalbum.com/photo/FDUSTLmgzViY/720.jpg)

De zware kabels tussen de loc en de tender worden ook gelijk vervangen door slankere en een stekkertje zodat ik ze makkelijk los kan koppelen.

(https://myalbum.com/photo/07RxYMd6ZuX2/720.jpg)

(https://myalbum.com/photo/Lwl8r6OmgezF/720.jpg)

Weer een loc met geluid.

(https://myalbum.com/photo/RIs1Uc0ghixg/720.jpg)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Michel Bikkel op 25 augustus 2018, 10:28:37
Enne? waar blijven de filmpjes van het resultaat Pierre?  ;)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 25 augustus 2018, 17:06:00
Ik heb van het vorig project al een filmpje gemaakt Mies. Deze is in principe gelijk. Het kan alleen maar op de testbank omdat ik geen voeding meer op mijn baan heb en ik helemaal geen zin heb om mijn rails schoon te maken. Ik ben daar zeer lui in :-[

Overigens liggen er wel twee bouwpakketjes klaar voor een nieuwe pulsbreedtevoeding waar de DigiSpark op werkt.

(https://myalbum.com/photo/euqvxqOgGKSj/720.jpg)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 28 augustus 2018, 18:29:10
Hoi Pierre,

Die Merlin is echt mooi geworden. En de geluidsmodule is netjes en overzichtelijk ingebouwd.

Nog even over de rails schoonmaken: al een ATF behandeling overwogen? Ik lees hier op het Forum dat het al werkt zonder eerst de rails te poetsen (zoals ik wel heb gedaan).

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 28 augustus 2018, 21:29:47
Dank je Rob. :) Ik krijg de smaak te pakken. Voor ik op mijn baan kan rijden (met geluid) zal ik toch eerst de voedingen moeten vervangen. Anders werkt het niet. Kan ik de 15V trafo's wel gewoon gaan gebruiken of moet ik dan mijn schakelingen in de stoomlocjes dan erg veranderen?(weerstanden vergroten)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 28 augustus 2018, 22:06:32
Hoi Pierre,
Zo te zien zetten die pulsbreedte regelaars alles om naar (ik denk) 12V, ook als de ingangsspanning 15V is. Als dat zo is, dan hoef je verder niets te veranderen. Dan kun je de 15V trafo's gewoon gebruiken, want de uitgang blijft 12V met pulsbreedte.
Tenminste, als het werkt zoals ik verwacht...
Even afwachten....

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 29 augustus 2018, 00:15:21
Is dat te meten?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 29 augustus 2018, 09:03:34
Dat is te meten. Pulsbreedte regelaar helemaal open en dan de voltmeter op de uitgang.  Bij 100% pulsbreedte is de gemeten spanning de uitgangsspanning van de regelaar.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 29 augustus 2018, 09:29:13
Top .. daar kan ik wat mee. :)  vandaag wat in de garage knutselen en morgen maar weer eens naar mijn soldeerbout grijpen om de pulsbreedte regelaars in elkaar te zetten.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Cor op 29 augustus 2018, 11:32:22
Knap stukje werk Pierre, zeker zoals jij toch al Arduino onder de knie hebt.
Ik vind het nog lastig dat programmeren maar ben begonnen via internet wat eenvoudige dingen uit te proberen. 
Maar ik blijf je op de voet volgen.

 Groet Cor
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: mark mms op 29 augustus 2018, 22:51:57
Die Pierre toch, gaat die toch op de digitale snelweg.
Vind het bijzonder knap uitgevoerd.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 4 september 2018, 16:08:05
Cor, Mark dank je wel. We knutselen vrolijk verder. ;)




Zo te zien zetten die pulsbreedte regelaars alles om naar (ik denk) 12V, ook als de ingangsspanning 15V is. Als dat zo is, dan hoef je verder niets te veranderen. Dan kun je de 15V trafo's gewoon gebruiken, want de uitgang blijft 12V met pulsbreedte.
Tenminste, als het werkt zoals ik verwacht...
Even afwachten....


Dit gaat niet op Rob.  Als de ingangsspanning 9 Volt is komt er 13 Volt uit. Stop ik er 12 Volt in dan komt er 16 Volt uit. Ik heb nu twee regelaars gebouwd en op een gezamenlijke voeding van 9 Volt gezet. Dit werkt en de DigiSpark's werken hier ook prima op. Ik denk dat ik het zo maar in mijn bedieningspaneel bouw. Op de ene regelaar moeten dan twee locs komen te lopen en de andere komt dan een pendelbaantje op voor een trammetje.

Ik heb nog wel een ander klein probleempje en dat is dat het eerste gedeelte van de potmeter (10K) bijna niets doorlaat en op een kwart ineens naar 7 Volt springt. De rest gaat wel heel geleidelijk. Kan ik een andere waarde voor de potmeter nemen of is dat niet aan te raden?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 4 september 2018, 17:46:10
Als de ingangsspanning 9 Volt is komt er 13 Volt uit. Stop ik er 12 Volt in dan komt er 16 Volt uit. Ik heb nu twee regelaars gebouwd en op een gezamenlijke voeding van 9 Volt gezet. Dit werkt en de DigiSpark's werken hier ook prima op. Ik denk dat ik het zo maar in mijn bedieningspaneel bouw. Op de ene regelaar moeten dan twee locs komen te lopen en de andere komt dan een pendelbaantje op voor een trammetje.
In ieder geval doet-ie consequent 4V meer er uit dan er in gaat  :o
Zo maar doen dan, Pierre. Als het werkt, is het goed, toch?

Ik heb nog wel een ander klein probleempje en dat is dat het eerste gedeelte van de potmeter (10K) bijna niets doorlaat en op een kwart ineens naar 7 Volt springt. De rest gaat wel heel geleidelijk. Kan ik een andere waarde voor de potmeter nemen of is dat niet aan te raden?
Deze is wat lastiger... Regelt de potmeter zelf (potmeter uitgang) wel regelmatig tussen 0 en een maximale spanning?
Misschien zit het in de regelaar ingebouwd. Heb je dit ook met het eerste exemplaar?
Waar je ook naar kunt kijken is of de potmeter goed is aangesloten (meestal 3 aansluitingen: de regelbare spanning in het midden).

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: mark mms op 4 september 2018, 18:03:51
Is een tien slagen potmeter een optie?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 4 september 2018, 19:17:20
Ik denk ook dat het in de print zelf geregeld is. Geknoei met potmeters maakt in ieder geval niets uit. Jammer omdat een locje gelijk gaat rijden bij 7 Volt. Wel langzaam maar toch ...  :(

Meer slagen potmeter maakt niet uit Mark. Je moet alleen 4 slagen maken in plaats van een kwart slag.

Ik ga hier eerst maar eens mee rijden en dan zien we verder.

Bedankt voor het meedenken heren.




Hieronder de snelheidsregelaars tot nu.


Twee stuks bij Conrad besteld.

(https://myalbum.com/photo/doWugNoOAyMz/720.jpg)

(https://myalbum.com/photo/HbIppd7Gxs0s/720.jpg)

Ik heb de print potmeters vervangen voor losse zodat ik deze straks in de frontplaat van de bedieningskast kan plaatsen. Ook twee rijrichting schakelaars gemonteerd voor in de frontplaat .

Gezamenlijke voeding met gelijkrichter.

(https://myalbum.com/photo/UwMSvcjKELOg/720.jpg)

Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 4 september 2018, 20:26:22
Ik ga hier eerst maar eens mee rijden en dan zien we verder.
Dat is in ieder geval een goed idee, Pierre.

(mocht het t.z.t. met andere locs niet goed bevallen, kun je altijd nog voor de Arduino motorregeling gaan)

Rob

PS: Hoe dicht zijn we bij een filmpje van een tsjoekende loc op de brug en door het station?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 4 september 2018, 20:40:37
Hoe dicht zijn we bij een filmpje van een tsjoekende loc op de brug en door het station?

Nog heeeel ver Rob. ;D De rail is zooo vies. En ik heb helemaal geen zin om dat allemaal schoon te maken. Bovendien is er nog geen aansluiting om de brug van stroom te voorzien. Kortom ....
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 5 september 2018, 09:51:39
Als de ingangsspanning 9 Volt is komt er 13 Volt uit. Stop ik er 12 Volt in dan komt er 16 Volt uit.

Dat krijg je omdat je er wisselspanning instopt, waar gelijkspanning van gemaakt wordt met behulp van condensatoren. Als je op die manier gelijkspanning maakt, is die altijd beduidend hoger dan de wisselspanning waar je mee begint.  De praktische rekensom is: Vuit = ( Vin x 1,44 ) - 1,2
Daarbij is de onbelaste uitgangsspanning van zo'n trafo vaak ook nog eens tien tot vijftig (!) procent te hoog.

Voor een zuivere 9V in krijg je dan: ( 9V x 1,44 ) - 1,2V = 11,8V. Is die 9V tien procent hoger, dan wordt het ( 9,9V x 1,44 ) - 1,2V = 13V, precies zoals je hebt gemeten.

Bij een zuivere 12V kom je met dezelfde som op 16V uit.

De wel heel beknopte theoretische achtergrond: die 1,44 is eigenlijk de wortel uit 2, en wordt veroorzaakt door de sinusvorm van de wisselspanning. De 1,2V die je er weer vanaf trekt is de spanningsval over de gelijkrichtdiodes.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 5 september 2018, 17:02:16
Dank je Dirk voor de uitleg. Ik geloof dat ik het een klein beetje begrijp. Op zich kan ik er mee leven. Ik moet alleen goed in de gaten houden wat ik er in stop en 13 Volt is prima om met locjes te rijden. Het hoeft immers niet zo hard. ;D


Ik heb nog wel een ander klein probleempje en dat is dat het eerste gedeelte van de potmeter (10K) bijna niets doorlaat en op een kwart ineens naar 9 Volt springt. De rest gaat wel heel geleidelijk.

Dirk ... heb jij ook eventueel een verklaring en/of oplossing voor dat sprongetje aan het begin van de potmeter?

Een andere waarde voor de pot werkt niet.
Hij is goed aangesloten.
Het werkt bij beide voedingen gelijk.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 5 september 2018, 18:02:07
Hee Pierre,

Ik zie nog een klein potmetertje op de print zitten. Wat doet die dan? Volgens het driehoekige symbooltje er bij op de print lijkt dit iets van (maximale) spanningsregeling? Misschien kun je daar met een schroevendraaiertje eens aan draaien en zien wat er gebeurt...

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 5 september 2018, 18:04:48
Inmiddels heb ik het schema van de regelaar gevonden. Dat ga ik even uitspitten, maar ik weet niet wanneer ik daar de tijd voor heb.

@Robvd , Dat tweede potje is de stroombegrenzing.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 5 september 2018, 19:12:27
Dat instelpotje is inderdaad voor de stroombegrenzing. Ik weet eigenlijk ook niet goed wat ik hier mee moet. In de beschrijving moest ik hem in het midden zetten en dat heb ik gedaan. De beschrijving is in het Duits en ik kom er niet helemaal uit wat ik er verder mee moet. :-[

Je hoeft helemaal geen haast te maken Dirk. Ben al blij dat je er naar wil gaan kijken. Ik ben nu met heel andere dingen bezig (baan bedraden) en heb de regelaars even opzij geschoven.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 6 september 2018, 17:29:01
Op papier ziet het schema er goed uit. Kun je het volgende controleren, just to be sure: de loper van de potmeter zit aan R6 (10k) en niet per ongeluk aan R4 of R5 (4k7)?

Als dat het geval is, wat doet dan de schakeling wanneer je D1 (1N4148) verwijdert? Daardoor ontkoppel je de stroombegrenzing en kunnen we ons concentreren op de PWM schakeling.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 6 september 2018, 20:31:57
Op papier ziet het schema er goed uit. Kun je het volgende controleren, just to be sure: de loper van de potmeter zit aan R6 (10k) en niet per ongeluk aan R4 of R5 (4k7)?

Als dat het geval is, wat doet dan de schakeling wanneer je D1 (1N4148) verwijdert? Daardoor ontkoppel je de stroombegrenzing en kunnen we ons concentreren op de PWM schakeling.

Ga ik morgen gelijk controleren Dirk. :)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 6 september 2018, 21:32:40
Doe rustig aan, ik ben tot maandag offline
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 10 september 2018, 08:41:02
Ik zag dat je al weer online was Dirk.  ;)

De loper zit aan de juiste weerstand Dirk en na loskoppelen van D1 is er geen verschil te meten op de uitgang en blijft de sprong het zelfde..
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 10 september 2018, 11:19:31
Zou je eens tegelijk met de rails ook een 12V autolamp op de uitgang kunnen aansluiten? Liefst een 21W, als dat te zwaar is voor je trafo een 10W? En dan natuurlijk kijken wat er gebeurt. D1 hoeft er nog niet in terug.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 11 september 2018, 16:12:03
Bingo Dirk ... nu gebeurd er wat. Ik heb een 12 Volt - 21 watt lampje aangesloten op de regelaar en daar overheen mijn meter.  Loopt nu mooi gelijkmatig op maar komt niet hoger dan 8,6 Volt. Wat is de volgende stap Dirk? Kan je hier wat mee?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 11 september 2018, 22:19:48
De eerste conclusie is dat deze regelaar om goed te werken een grotere belasting nodig heeft dan alleen het motortje van de loc.

De vraag is nu waarom de regelaar met 21W lamp niet boven de 8,6V wil komen. Dat zou de stroombegrenzing kunnen zijn en dan moet het potje verdraaid worden. Het kan ook overbelasting van de trafo zijn. En het kan een eigenschap van de schakeling zijn.

1. Was tijdens het testen diode D1 nog ontkoppeld of zat die er alweer in?

2. Kun je het met een kleine 12V lamp proberen, bijvoorbeeld 5W en/of 10W?

Ik hoor het wel weer.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 12 september 2018, 10:49:43
De trafo is zwaar zat Dirk ... die zal het niet zijn. Tijdens het testen was de diode D1 nog ontkoppeld. En met een 5W lampje werkt het perfect! Het motortje van de loc is dus denk ik een te kleine belasting. Nu kan ik op de uitgang van de regelaar wel permanent een lampje laten mee branden maar kan dat ook met b.v. een weerstand? Of is dit mooier/beter op de print op te lossen.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 12 september 2018, 11:42:27
Het kan waarschijnlijk met deze weerstand (https://smorenberg.com/weerstand-9-en-10-watt/5744-33-ohm-weerstand-9-watt.html). Het ding wordt wel knap warm.

Waarom waarschijnlijk? Omdat de lamp als leuke eigenschap heeft dat hij bij een lage spanning ook een lage weerstand heeft, en bij oplopende spanning een toenemende weerstand heeft. Aangezien de schakeling niet lekker werkt bij een lagere spanning is dat mooi want de gloeilamp helpt dan meer dan een weerstand.

Een lamp is natuurlijk wel leuk  ;) ;D

Oplossen op de print betekent dat de eindtrap opnieuw ontworpen moet worden, en dan ben je bij deze schakeling niet ver meer van een heel nieuwe PWM regelaar.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Wim Corduwener op 12 september 2018, 12:28:22
Het ding wordt wel knap warm.
Maar dan kun je die weerstand met warmte-geleidende gell op een plaatje metaal plakken.

Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 12 september 2018, 12:36:45
Het gaat een lampje worden. Ik verwerk deze wel in het bedieningspaneel of zo. Inderdaad misschien wel leuk.

Het probleem is hiermee opgelost. Bedankt voor je hulp Dirk. ;)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Rob op 12 september 2018, 12:40:46
Ik zou het lampje inbouwen in/achter het bedieningspaneel en dan heb je meteen een eenvoudige rijstroom-indicator. Als je hem achter het paneel doet en een klein gaatje boort in het paneel, eventueel een leuk gekleurd glaasje, dan kan het nog subtiel zijn ook.

Oplossen op de print betekent dat de eindtrap opnieuw ontworpen moet worden, en dan ben je bij deze schakeling niet ver meer van een heel nieuwe PWM regelaar.
In dat geval kan ik een Arduino-gedreven motorcontroller aanbevelen - en nee, ik heb geen Arduino aandelen  :D

In ieder geval heb je nu een goed werkende oplossing, toch?
Zoals Wim zou zeggen: niets meer aan doen  8)

Rob
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 12 september 2018, 13:17:35
Dat bedoel ik maar ... langzaam maar zeker komen we er wel. Komt goed Rob. 8)
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 12 september 2018, 13:23:33
Toch nog een vraagje Dirk. Moet ik diode D1 weer vast solderen of is dat niet nodig?
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 12 september 2018, 17:23:31
Het ding wordt wel knap warm.
Maar dan kun je die weerstand met warmte-geleidende gell op een plaatje metaal plakken.

Dat kan. Maar onder normale omstandigheden is dat niet nodig, de weerstand kan er tegen. Alleen moet je hem niet tegen een plaatje styreen of zo plakken, want dat kan niet tegen de warmte van de weerstand.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Dirk T op 12 september 2018, 17:24:42
Toch nog een vraagje Dirk. Moet ik diode D1 weer vast solderen of is dat niet nodig?

Dat zou ik wel doen: daarmee bescherm je de schakeling tegen kortsluiting. Door het instelpotje te verdraaien maak je de beveiliging gevoeliger of juist minder gevoelig.
Titel: Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
Bericht door: Pierre op 12 september 2018, 18:02:24
Ok Dirk ... is gebeurd. Ga nu de oude regelaars vervangen voor de nieuwe. Dan kan ik ook zien hoe het op de rails werkt. ;)