Auteur Topic: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.  (gelezen 2742 keer)

0 leden en 1 gast bekijken dit topic.

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Gepost 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)





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.... ;)


Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline Wim Corduwener

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 8.620
  • Thanked: 164 times
  • Geslacht: Man
  • Enschede (import)
    • Villa Volta
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #1 Gepost 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?
Trefwoorden:  Mac • Modulebouw • H0, H0e en On30 • Tijdperk III (1950-1960) • Nederlands (H0 en H0e) • Frans (On30) • Gelijkstroom • Twee rails • Voorlopig nog even analoog • Scratchbuilding en Kitbashing

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #2 Gepost 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. :-\
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline SuperSylvester

  • Super Modelspoorder
  • ******
  • Berichten: 1.429
  • Thanked: 40 times
  • Geslacht: Man
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #3 Gepost 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...


Groet, Jack. Dwarsliggers houden het spoor recht....

H0, ECOS 2, Trams, Dinamo Carsysteem, Periode 1600 - 2014, Nederland

Offline Robvd

  • Super Modelspoorder
  • ******
  • Berichten: 959
  • Thanked: 26 times
  • Geslacht: Man
  • Denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #4 Gepost 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.




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
Ergens in West Duitsland rond 1970 / gelijkstroom analoog / kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met geluid aan boord van analoge treinen op basis van Arduino.

Offline iTom

  • Super Modelspoorder
  • ******
  • Berichten: 4.363
  • Thanked: 80 times
  • Geslacht: Man
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #5 Gepost 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.
H0e baantje | Rails Roco Veldspoor | DR5000 | Rosoft | iTrain |
Met vriendelijke groet,
Tom

Offline Cor

  • Stationchef
  • ***
  • Berichten: 175
  • Thanked: 2 times
  • Geslacht: Man
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #6 Gepost 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 

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #7 Gepost 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?
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #8 Gepost 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 ....
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline Robvd

  • Super Modelspoorder
  • ******
  • Berichten: 959
  • Thanked: 26 times
  • Geslacht: Man
  • Denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #9 Gepost 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
Ergens in West Duitsland rond 1970 / gelijkstroom analoog / kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met geluid aan boord van analoge treinen op basis van Arduino.

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #10 Gepost 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
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline Robvd

  • Super Modelspoorder
  • ******
  • Berichten: 959
  • Thanked: 26 times
  • Geslacht: Man
  • Denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #11 Gepost 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
Ergens in West Duitsland rond 1970 / gelijkstroom analoog / kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met geluid aan boord van analoge treinen op basis van Arduino.

Offline mark mms

  • Super Modelspoorder
  • ******
  • Berichten: 956
  • Thanked: 13 times
  • Geslacht: Man
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #12 Gepost 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.

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #13 Gepost 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)
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline arend65

  • Super Modelspoorder
  • ******
  • Berichten: 638
  • Thanked: 20 times
  • Geslacht: Man
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #14 Gepost op: 15 juli 2018, 09:42:20 »
Spannend Pierre, ik ben benieuwd ::)
Groet Arend


Wisselstroom    Raptor  OC32     C-rail    Tijdperk III-IV    Oost Duits    Stoom / Diesel

Offline Wim Corduwener

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 8.620
  • Thanked: 164 times
  • Geslacht: Man
  • Enschede (import)
    • Villa Volta
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #15 Gepost 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
Trefwoorden:  Mac • Modulebouw • H0, H0e en On30 • Tijdperk III (1950-1960) • Nederlands (H0 en H0e) • Frans (On30) • Gelijkstroom • Twee rails • Voorlopig nog even analoog • Scratchbuilding en Kitbashing

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #16 Gepost op: 15 juli 2018, 13:54:06 »
Tja ... dat doe jij toch ook altijd. ::)
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline Wim Corduwener

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 8.620
  • Thanked: 164 times
  • Geslacht: Man
  • Enschede (import)
    • Villa Volta
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #17 Gepost 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.  ::)
Trefwoorden:  Mac • Modulebouw • H0, H0e en On30 • Tijdperk III (1950-1960) • Nederlands (H0 en H0e) • Frans (On30) • Gelijkstroom • Twee rails • Voorlopig nog even analoog • Scratchbuilding en Kitbashing

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #18 Gepost 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
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #19 Gepost 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.



Op de Arduino brand een groen ledje en er knippert een oranje ledje. Uit de luidspreker klinkt een soort "getik" :-\
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #20 Gepost 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.
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline Robvd

  • Super Modelspoorder
  • ******
  • Berichten: 959
  • Thanked: 26 times
  • Geslacht: Man
  • Denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #21 Gepost 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

Ergens in West Duitsland rond 1970 / gelijkstroom analoog / kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met geluid aan boord van analoge treinen op basis van Arduino.

Offline Pierre

  • Super Modelspoorder
  • ******
  • Berichten: 6.078
  • Thanked: 156 times
  • Geslacht: Man
  • Woonplaats: Den Haag (Loosduinen)
    • Station Hoogbaan
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #22 Gepost 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.
Groet Pierre.


Ik heb een H0 (H0e) fantasie gelijkstroom baan begin 1970 en doe veel aan Scratchbuilding en Kitbashing. Ik ken geen rommel of meuk maar zie daarin alleen projecten.   ;D

Offline Robvd

  • Super Modelspoorder
  • ******
  • Berichten: 959
  • Thanked: 26 times
  • Geslacht: Man
  • Denk aan morgen, doe vandaag.
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #23 Gepost 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.




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
Ergens in West Duitsland rond 1970 / gelijkstroom analoog / kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met geluid aan boord van analoge treinen op basis van Arduino.

Offline SuperSylvester

  • Super Modelspoorder
  • ******
  • Berichten: 1.429
  • Thanked: 40 times
  • Geslacht: Man
Re: Arduino gepruts. Ook Pierre gaat (een soort van) digitaal.
« Reactie #24 Gepost 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?



Groet, Jack. Dwarsliggers houden het spoor recht....

H0, ECOS 2, Trams, Dinamo Carsysteem, Periode 1600 - 2014, Nederland