Auteur Topic: Analoog rijden met geluid - het project.  (gelezen 83029 keer)

0 leden en 2 gasten bekijken dit topic.

Offline Bert

  • Rangeerder
  • ****
  • Berichten: 380
  • Thanked: 20 times
  • Geslacht: Man
Re: Analoog rijden met geluid - het project.
« Reactie #225 Gepost op: 5 februari 2023, 14:01:26 »
Wat gebruik je daar als oscilloscoop?

Edit: al gevonden, DS211

Offline Rob

  • Forumbeheerder
  • Super Modelspoorder
  • *****
  • Berichten: 2.779
  • Thanked: 162 times
  • Geslacht: Man
  • Rob zegt: denk aan morgen, doe vandaag.
Re: Analoog rijden met geluid - het project.
« Reactie #226 Gepost op: 5 februari 2023, 15:08:46 »
Nou @Carrilet,

Dat is een rijstroom voorziening op een ander niveau.

(als ik alle code hier plak, krijg ik een 403 foutmelding)
Ik denk dat onze nieuwe hosting partij wat strenger is. Eventueel kun je de sketch hier als .ino file aan het bericht plakken als alternatief.

Bij testen blijkt dat de nulwaarde van de potmeters boven de stopwaarde ligt...  :(  Misschien andere potmeters gebruiken?
Ik zie dat je 1k potmeters gebruikt. Ik gebruik 10k versies. Dat is ook wat ze in de Arduino wereld aangeven. Het zou niet zoveel uit moeten maken, want ze staan als spanningsdelers geschakeld, maar toch.
Ik zo ook checken of alle analoge pinnen ook op input staan. Verder heb ik gelezen dat meerdere analoge direct na elkaar uitlezen ruis kan geven. Een kleine vertraging tussen het uitlezen van de verschillende pinnen zou moeten werken.

En waarom gebruik je eigenlijk potmeters? Je weet toch al dat je 3 snelheden nodig hebt? Dan kun je ook drie vooraf ingestelde pulsbreedtes daarvoor gebruiken.

Rob
Ergens in (West) Duitsland tussen 1960 en 1970 | gelijkstroom analoog, met geluid | kleine vaste baan en uitbreiding met modulebaan.
Nu vooral bezig met van alles en nog wat...

Offline Carrilet

  • Kruier
  • *
  • Berichten: 11
Re: Analoog rijden met geluid - het project.
« Reactie #227 Gepost op: 5 februari 2023, 19:23:01 »
Ik denk dat onze nieuwe hosting partij wat strenger is.

Ik heb het programma verder uitgekleed, nu met 3 vaste waarden voor de snelheden. Het nog ongeteste programma is nu a.v.;

/* Arduino Nano/ATmega328P (old)
 * Arduino Nano/ATmega168
 * Arduino Nano/Atnmega328p
 *
 * PULSBREEDTEBESTURING MET GELUID VOOR MODELTREIN
 * versie 1.0 - januari 2023  -  MH
 *
 * Motor snelheidsregeling met 3 snelheden en 6 functietoetsen
 * Geschikt voor analoge geluidsmodules.
 *
 * De motorbesturing gaat met 3 open collector schakeltransistors, hier wordt
 * met PWM de (effectieve) uitgangsspanning ingesteld waarmee de pulsbreedte
 * tussen 0 (uit) en 255 (maximaal) wordt geregeld.
 * Vaste pulsbreedte voor stop, langzaam en snel.
 *
 * Functietoetsen:
 * Er zijn tot 6 functietoetsen aan te sluiten. Elke toets verandert kort de frequentie van de PWM rijspanning op 'stop' uitgang.
 * Deze frequentieveranderingen worden door een geluidsmodule herkend en die start daarmee speciale functies.
 *
 */
// ------------ Instellingen per invoerapparaat ----------
const byte aantalfunctietoetsen = 6; // 0..5
byte functietoetspin[] {2,3,4,5,6,7};

// ------------ Instellingen motorregelaar ----------
// uitvoerpinnen schakeltransistor, dit moeten PWM pinnen zijn; 3, 5, 6, 9, 10 of 11, 
// analogWrite = 490 Hz op pin 3, 9, 10, 11.  980 Hz op pin 5, 6
//
// motorpinnen   0, 1, 2
byte motorpin[] {9,10,11};   
//
const byte dutygeluid    = 10;   // ondergrens dutycycle, start geluid, maar niet voldoende om te rijden
const byte dutylangzaam  = 100;  // dutycycle voor langzame snelheid
const byte dutysnel      = 200;  // dutycycle voor hogere snelheid
//
//                    0          1           2
byte dutycycle[]{dutygeluid,dutylangzaam,dutysnel}; // 0..255
//
// ------------- Definities en variabelen voor geluidsmodule pulsen -----
// rijspanning     ~ 490.0 Hz; //  gemeten periode bij 490 Hz = 1/490 = 2040 us voor standaard PWM rijspanning
                               //  analogWrite 490 Hz op 3, 9, 10, 11
                               //  analogwrite 980 Hz op 5, 6
const byte aantalfunctiefreqs =  6;
float functiefreq[] {667.0, 800.0, 1000.0, 1250.0, 1667.0, 2000.0};

const byte pulsduurfunctie    = 50; // tijdsduur van de hogere frequentie functiepuls in ms
int long stopmillis;                // teller duur functiepuls
//
// -------------- Overige variabelen ------------------
int t;                                // algemene teller
//
// ============================== subroutines =======================
void Leesfunctietoets (byte toetsnr) {
  float periode, hoogpuls, laagpuls;
  //   
  if ( digitalRead(functietoetspin[toetsnr]) == LOW ) {      // toets ingedrukt
    while (digitalRead(functietoetspin[toetsnr] == LOW)) { } // niets doen, wacht tot toets is losgelaten
    // toets losgelaten (analogWrite gaat door op 490 Hz)
    //
    periode = 1000000/functiefreq[toetsnr];  // periode (hoog + laag) in usec
    hoogpuls = dutycycle[0]/255 * periode;   // usec, dutycycle alleen voor toetsen bij snelheid 0
    laagpuls = periode - hoogpuls;           // usec
    //
    stopmillis = millis() + pulsduurfunctie; // gedurende pulsduurfunctie in msec 
    while (millis() <= stopmillis) {     //    |                 pulsduur   ....     | alleen op 'stop' uitgang
      digitalWrite(motorpin[0],HIGH);    //    |____  periode  |____
      delayMicroseconds(hoogpuls);       //    |    |          |    |
      digitalWrite(motorpin[0],LOW);     //    |    |          |    |
      delayMicroseconds(laagpuls);    }  //____|hoog|__laag____|    |__
    //
    analogWrite(motorpin[0],dutycycle[0]);   // terug naar standaard PWM met freq = 490 Hz
  }
  else { }; // niets, toets niet ingedrukt 
}
// ================================== Setup na starten Arduino ========================
void setup() {
  //Serial.begin(9600);
  //Serial.println("Setup");
  pinMode (functietoetspin[0],INPUT_PULLUP); // functietoetsen 1..6
  pinMode (functietoetspin[1],INPUT_PULLUP); // toets ingedrukt = 0 (LOW)
  pinMode (functietoetspin[2],INPUT_PULLUP);
  pinMode (functietoetspin[3],INPUT_PULLUP);
  pinMode (functietoetspin[4],INPUT_PULLUP); 
  pinMode (functietoetspin[5],INPUT_PULLUP);

  // in- en output pinnen initialiseren
  pinMode (motorpin[0], OUTPUT);  // schakeluitgangen 1..3 met NPN transistor
  pinMode (motorpin[1], OUTPUT); 
  pinMode (motorpin[2], OUTPUT); 
  // standaard PWM met freq = 490 Hz op motoruitgangen
  analogWrite(motorpin[0],dutycycle[0]);  // 'stop' uitgang
  analogWrite(motorpin[1],dutycycle[1]);  // 'langzaam' uitgang
  analogWrite(motorpin[2],dutycycle[2]);  // 'snel' uitgang
} // einde setup
// ================== Hoofdlus Arduino =================================
void loop() {
  //
  //Serial.println ("loop");
  // 
  // lees functietoetsen 0..5 (1..6)
  for (int t=0; t<aantalfunctietoetsen; t++ ) {
    Leesfunctietoets(t); }
}
//
// ===================================================================
// --------------- einde schets -----------------------------------------------------------
(Ik denk dat het aan de max berichtlengte ligt. De code past nu blijkbaar wel.)

Citaat
Ik zie dat je 1k potmeters gebruikt. Ik gebruik 10k versies.
...
En waarom gebruik je eigenlijk potmeters? Je weet toch al dat je 3 snelheden nodig hebt? Dan kun je ook drie vooraf ingestelde pulsbreedtes daarvoor gebruiken.
Ik heb gebruikt wat ik had liggen. Met potmeters kan de snelheid in real time aangepast worden zonder het programma steeds opnieuw te hoeven compileren en uploaden.

Ik heb de potmeters nu weggelaten en vaste waarden als constanten opgenomen. Later proefondervindelijk vaststellen welke waarden het beste werken.
--
MH

Offline Carrilet

  • Kruier
  • *
  • Berichten: 11
Re: Analoog rijden met geluid - het project.
« Reactie #228 Gepost op: 5 februari 2023, 20:00:37 »
oscilloscoop?
... al gevonden, DS211
Een DSO201 om precies te zijn. Erg handig om snel even dingen zichtbaar te maken.


Hier de positieve en negatieve pulsen van een PWM motorregelaar;


Daarnaast nog een OWON SDS 1102, 2 kanaals, ook erg handig, maar wat minder mobiel...

--
MH

Offline Bert

  • Rangeerder
  • ****
  • Berichten: 380
  • Thanked: 20 times
  • Geslacht: Man
Re: Analoog rijden met geluid - het project.
« Reactie #229 Gepost op: 5 februari 2023, 20:10:03 »
Erg leuk hebbedingetje voor relatief weinig €.

Heb zelf nog steeds een ruim 40 jaar oude 2 kanaals Philips geheugen scoop, doet het nog perfect.