BeneluxSpoor.net forum

Wat zijn we aan het bouwen? => Banen of diorama's => Topic gestart door: JCV op 07 juni 2015, 17:31:08

Titel: JCV's (om)bouwdraadje
Bericht door: JCV op 07 juni 2015, 17:31:08
JCV's (om)bouwdraadje - deel 1

Beste andere forumgebruikers,
Na een tijdje met Matthijs te hebben gewerkt aan een modelbaan:
http://forum.beneluxspoor.net/index.php?topic=49196.msg790596#msg790596 (http://forum.beneluxspoor.net/index.php?topic=49196.msg790596#msg790596)
zijn we allebei los van elkaar gaan werken, waarbij we elkaar wel helpen wanneer nodig. Matthijs ging verder met Slowakije, terwijl ik me ben gaan richten op Zwitserland. Dit kwam mede omdat ik lid werd van de VSZ(zie mijn profiel). Hier waren een aantal modules die wel een opknapbeurt konden gebruiken. Ik ben met één module begonnen.
Naast het opknappen van deze module speel ik met allerlei ideeën, van het zelf bouwen van een module tot een cameratrein tot zelfbouw van materieel. Dit alles naar het Zwitserse voorbeeld, voornamelijk RhB en SchB.

Al die projecten zal ik dus in dit draadje laten zien, waarbij ik nu begin met de op te knappen module:
Hierop zat een kapotte wisselmotor die vervangen moest worden. Na hem eruit gehaald te hadden zag het er zo uit:
(https://images.beneluxspoor.net/bnls/image_2715.jpg)
Daarna moest er een nieuwe motor worden ingebouwd. Hiervoor vond ik in de Encyclopedie een schakeling. Voor mijn vragen hierover heb ik een draadje geopend: http://forum.beneluxspoor.net/index.php/topic,64323.msg3221561992.html#msg3221561992 (http://forum.beneluxspoor.net/index.php/topic,64323.msg3221561992.html#msg3221561992)
Ik ben nu bezig met het verzamelen van de onderdelen voor de printplaat. De volgende update zal dan gaan over een ander project: het materieel van de Schöllenenbahn.

Mvg,

Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 26 augustus 2015, 06:58:03
UPDATE INLEIDING:
Na eens goed nagedacht en overlegd te hebben, zijn de plannen compleet veranderd:
Het meeste van wat ik hiervoor schreef ga ik voorlopig niet doen, wel blijf ik bezig met de module opknappen, en sparen voor een camera voor de cameratrein. Dit bericht gaat dan ook niet over de Schöllenenbahn.
Daarentegen ga ik -om ervaring op te doen- een ander lid (van de VSZ) helpen. Hij is bezig met het bouwen van station Visp in H0 (het station voor de verbouwing).

-----------------------

JCV's ombouwdraadje - deel 2
De module
Na ongeveer twee weken (met tussenpozen) solderen, is de servo besturing af!
Dit was mijn eerste elektronica zelfbouw project, hopen dat hij werkt (ik laat momenteel testen) (y)

Visp
We hebben besloten om het Faller Car door Arduino te laten besturen, en ook de seinen gaan daarmee bestuurd worden. Nu heb ik een vraag: om de kabels van de servo's niet te lang te maken, verdelen we het FCS over 4 Arduino's. Deze moeten natuurlijk wel eens communiceren. Nu dacht ik slim te zijn door gewoon een digitale pin op de ene Arduino te verbinden met een andere digitale pin op de andere Arduino, en andersom. Maar ik weet eigenlijk niet of dat kan, mag, werkt. Heeft iemand daar ervaring mee, of moet ik een andere manier gaan gebruiken? Over die servo's gesproken, ik vroeg me af, wat is het dat ervoor zorgt dat die kabels niet te lang mogen worden? Is het de PWM, of komt het door de lage spanning van maar 5V?

Groet,
Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 31 augustus 2015, 11:42:52
Hallo Johan,

Eerst over de kabellengte. Dat valt reuze mee. Hoe lang is lang?
Op mijn testbaan (http://forum.beneluxspoor.net/index.php/topic,63567.0.html) heb ik kabels tot 80 cm. in gebruik tussen de Arduino en de servo. Dat geeft geen enkel probleem.

Communicatie tussen twee Arduino's zou wel kunnen door twee pinnen te verbinden. De een als INPUT pin en de ander als OUTPUT pin. Voor  tweerichtingsverkeer moet je dan twee verbindingen maken.
Vervolgens moet je nog wel software schrijven om deze pinnen met elkaar te laten praten.
Daarom is het veel beter om daarvoor het I2C protocol te gebruiken.
Daarbij verbind je ook twee Arduino's met drie draadjes (A4, A5 en Gnd).
Voor de communicatie is er een aparte library beschikbaar. De Wire-library.
De ene Arduino fungeert daarbij als Master en de ander als Slave.

Google even op 'Arduino I2C' en je vindt een hoop informatie.
B.v:
https://www.arduino.cc/en/Tutorial/MasterWriter
en
https://www.arduino.cc/en/Tutorial/MasterReader

Succes,

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 05 september 2015, 20:39:10
Hallo Nico,
Bedankt voor het antwoord.
Lang zou maximaal 2/2.5 meter worden, maar dat hebben we al opgelost door meerdere Arduino boards te gebruiken. Om een Arduino te besparen, hebben we een kabel nodig van max 1.5 meter (volgens mijn schattingen). Maar mooi dat 80 cm geen problemen geeft.

Precies zoals jij het beschrijft, had ik het uitgedacht. Als de ene Arduino pin xx HIGH maakt, merkt de andere Arduino dat (DigitalRead) en gaat er weer dingen mee doen.
I2C kan ook, maar maakt dat de code niet weer véél te gecompliceerd?
Maar ik zal er sowieso naar kijken, want vroeg geleerd is oud gedaan, nietwaar?  ;D

Groet,
Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 05 september 2015, 23:28:11
Hallo Johan,

Het ligt er natuurlijk een beetje aan wat je wilt communiceren, maar je moet voortdurend ergens in de main loop die pin aftesten.
Als je alleen een signaal wil geven om de ander andere Arduino iets te laten doen zou het nog kunnen. Een 1 bits communicatie dus.
Maar als je echt data wil versturen van de een naar de ander wordt het een ander verhaal.
In de twee voorbeelden die ik gaf zie je hoe eenvoudig I2C werkt.
De slave voert een event procedure uit als er een bericht binnenkomt. Daar hoef je dus zelf niks extra's voor te programmeren.
Het wordt alleen maar eenvoudiger denk ik met I2C. Je hoeft er zelf bijna niks voor te doen; het kost maar een paar regels extra code en de communicatie werkt geheid. Bovendien stuur je dan byte(s) over wat natuurlijk direct veel meer mogelijkheden geeft. Je kunt dan ook aangeven wat de andere Arduino dan moet doen en niet alleen maar dat hij iets moet doen.
Als je zelf wat gaat programmeren betekent dat ook een boel troubleshooting als het niet wil werken zoals bedoelt.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 06 september 2015, 09:25:25
Hallo Nico,
Mijn enige doel is dat de een iets gaat doen als de ander ook iets doet. Een 1 bits communicatie dus. Loont het dan nog steeds om I2C te gebruiken?


Groet,
Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 06 september 2015, 12:11:40
Hallo Johan,

Als je niet meer nodig hebt dan 1 bit is dat voldoende en heb je geen I2C nodig.
Maar met I2C ben je wel flexibeler.
Ik weet niet hoeveel programmeerervaring je hebt. Niet zo veel denk ik want kennelijk zie je er tegen op om I2C te gebruiken.
Je kunt beginnen met je 1 bits communicatie en later, als je ervaring en daarmee ook je wensen toenemen, er I2C inbouwen.
De keus is aan jou.

Succes,

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 13 september 2015, 14:09:52
Duidelijk. Bedankt voor het advies.

Weet jij dan ook een manier om de standen van de servo's uit te kunnen lezen? ??? Ik zat te denken aan een display (http://www.hobbyelectronica.nl/product/128x64-oled-blauw-i2c/ (http://www.hobbyelectronica.nl/product/128x64-oled-blauw-i2c/)) en dan de servo in de juiste positie zetten met een potmeter, en de stand van de servo printen op het display. Dit display werkt met I2C dus dan leer ik daar mee 'werken'. Of is Servo.read en naar de Serial Monitor sturen handiger?

Groet,
Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 13 september 2015, 14:51:51
Hallo Johan,

Servo.read() leest de laatste waarde waarmee de servo is gezet middels servo.write(hoek)
Als je dat dus gebruikt weet je de hoek al en is servo.read niet meer nodig.
Als je de servo aanstuurt middels een andere methode is servo.read() dus onbruikbaar.
Ik weet niet hoe je de potmeter wilt gebruiken om de servo te sturen maar een methode waarbij servo.write gebruikt wordt vindt je hier:
http://www.instructables.com/id/ArduinoServoPotentiometer/

De hoek die is ingesteld kun je vervolgens naar het display sturen of de serial monitor. Voor de monitor(heel simpel) moet de Arduino wel aan de PC hangen.
Met een display heb je dus meer vrijheid, maar is veel complexer. Kan zowel met I2C als SPI. Voor libraries and demo-code zie https://github.com/adafruit/Adafruit_SSD1306
Bedenk wel dat als de servo mogelijk verdraait is door bv. een servo.attach, je niet meer de juiste hoek weet; servo.read is dan ook onbetrouwbaar.

Wel een duur display overigens.
Je kunt 'm ook in China halen:
http://nl.aliexpress.com/item/New-0-96-I2C-IIC-Serial-128X64-OLED-LCD-LED-Display-Module-For-Arduino-55785/32357566914.html?ws_ab_test=201407_5,201444_6,201409_3
Wel 3-6 weken wachten.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 13 september 2015, 19:15:10
Hoi Nico,
Wat ik dus wil doen is het volgende:
Om de wissels aan te sturen gebruiken we servo's, die de Arduino aanstuurt. Hiervoor moeten we de precieze standen weten, zodat ik deze goed kan programmeren. Om die standen te weten te komen had ik bedacht dat je een Arduino een potmeter laat 'lezen', en de waarde dan mapt naar een positie voor een servo:
map(val, 0, 1023, 0, 179)
En dan de stand aan de servo geeft, én weergeeft in de Serial Monitor of op het display. Dus zoiets ongeveer:
servo.wissel1
int pot = 0;
int val
#include <Wire.h>
void setup()
{
    Wire.begin
    wissel1.attach(6);
}
void loop()
{
    AnalogRead(pot, val);
    map(val, 0, 1023, 0, 179)
    Servo.write(val)
    Wire.write(val)
}
Maar ik weet niet of het goed is, of het dus werkt.

En dat display is misschien wel duur, maar ik heb wel de garantie dat ik hem ook echt krijg (zie WebWinkel Keurmerk) en dat ik niet opgelicht wordt. Ik heb het ook snel in huis.

Groet,
Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 13 september 2015, 20:16:21
Johan,

Je wilt de standen weten omdat dat de twee hoeken zijn waartussen de servo heen en weer gaat?
Dan kun je die twee standen in de code opnemen voor de servo aansturing. Klopt dat?
Oftewel: de servo moet 'getuned' worden.
Dat kan ook simpeler. Momenteel ben ik juist bezig met een programmaatje hiervoor.
Dat vraagt eerst een pinnummer waar de te tunen servo aanhangt. Daarbij worden de twee hoeken op 75 (LOW) en 105 (HIGH) graden gezet, 15 graden om de 90 dus.
Vervolgens kun je, in de serial monitor door op + en - te drukken de waarde van LOW met één graad verhogen of verlagen.
Met 'C' wissel je van de ene hoek naar de ander.
Met 'S' sla je de waardes op in het EEPROM en kun je een nieuw pinnummer opgeven.
In de monitor ziet dat er zo uit:

(https://images.beneluxspoor.net/bnls/setservo_1.jpg) (https://images.beneluxspoor.net/bnls/setservo.jpg)

De invoer gebeurt in het bovenste deel en zie je dus niet terug in de monitor
De beta versie is als volgt:

#include <EEPROM.h>
#include <Servo.h>

struct servoItem
{
  byte angle;
  byte setpoint;
  byte Langle;
  byte Hangle;
  Servo pin;
};
servoItem Servos;
int pin;
boolean Valid;
String inString = "";
byte Command;
char CmdLH;
char Cmd;
unsigned long previousMillis;
boolean LED13state = true;

//========================= Setup ===============
void setup() {
 // initialize serial communication:
 Serial.begin(9600);
 // initialize the LED pin as an output:
 pinMode(LED_BUILTIN,OUTPUT);
 digitalWrite (LED_BUILTIN,LOW);
}
//========================= Loop ================
void loop()
{
GetPin();          //Ask for pin

do
{
  Cmd = GetCmd();
  switch (Cmd)
  {
  case 'S':    // Save settings
    EEPROM.write(100+2*pin,Servos.Langle);
    EEPROM.write(101+2*pin,Servos.Hangle);
    Servos.pin.detach();
    Serial.print("\nAngles saved for pin ");
    Serial.println(pin);
    break;
   
  case '?':
    Serial.println("9       = set servo to 90 degrees");
    Serial.println("+ or -  = increment or decrement selected angle");
    Serial.println("C       = change selected angle");
    Serial.println("S       = store current angles");
    break;
   
  case '9':    //Angle to 90 degrees
    Servos.angle=90;
    break;
   
  case '+':    //Increment angle
    if (CmdLH == 'H')
    {
      Servos.Hangle++;
      Servos.angle=Servos.Hangle;
    }
    else if (CmdLH == 'L' && Servos.Langle < Servos.Hangle-5)
    {
      Servos.Langle++;
      Servos.angle=Servos.Langle;
    }
    else Serial.println("LOW angle may not higher then HIGH angle -5");
    break;
   
  case '-':    //Decrement angle
    if (CmdLH == 'L')
    {
      Servos.Langle--;
      Servos.angle=Servos.Langle;
    }
    else if (CmdLH == 'H' && Servos.Hangle > Servos.Langle+5)
    {
      Servos.Hangle--;
      Servos.angle=Servos.Hangle;
    }
    else Serial.println("HIGH angle may not be lower then LOW angle +5");
    break;
   
  case 'C':
      if (CmdLH == 'L') CmdLH='H'; else CmdLH ='L';
      if (CmdLH == 'L')
      {
        Serial.println("Angle changed to LOW");
        Servos.angle=Servos.Langle;
      }
      if (CmdLH == 'H')
      {
        Serial.println("Angle changed to HIGH");
        Servos.angle=Servos.Hangle;
      }
      break;
     
   default:
   Serial.println ("Invalid input!!");
  }
  // Set Servo
  if (Servos.setpoint != Servos.angle) SetAngle();
 
 } while (Cmd != 'S');
} // end loop

//------------------------- SetAngle ----------
void SetAngle()
 {
    while (Servos.angle > Servos.setpoint)
    {
      Servos.setpoint++;
      Servos.pin.write(Servos.setpoint);  // Set Servo to new angle
      delay (30);
    }
    while (Servos.angle < Servos.setpoint)
    {
      Servos.setpoint--;
      Servos.pin.write(Servos.setpoint);  // Set Servo to new angle
      delay (30);
    }   
    Serial.print("Servo set to angle: ");
    Serial.print(Servos.angle);
    Serial.print(", LOW angle: ");
    Serial.print(Servos.Langle);
    Serial.print(", HIGH angle: ");
    Serial.println(Servos.Hangle);
    Servos.setpoint = Servos.angle;

  }
//------------------------- GetCmd ------------
char GetCmd()
{
    if (CmdLH =='L') Serial.print("\nPlease specify action for angle LOW");
    if (CmdLH =='H') Serial.print("\nPlease specify action for angle HIGH");
    Serial.println(" (9/+/-/C/S/?)");
    FlushWait();
    Command = Serial.read();
    if (Command == 's') Command = 'S';
    if (Command == 'c') Command = 'C';
//    if (Command == '9' || Command == '+' || Command == '-' || Command == 'S' || Command == 'C' || Command == '?') Valid=true;
  return Command;
}
//------------------------- FlushWait --------
void FlushWait()
{
  while(Serial.available())    //Empty inputbuffer
  {
    Serial.read();
  }
  while (!Serial.available())   //Wait for new input
  {
 //   Flash();
    delay (100);
  }
}
//------------------------- GetPin ------------
void GetPin()
{
Valid = false;
while (!Valid)
{
  Serial.println("\nPlease specify pin number");
  Serial.println("For A0 to A5 specify 14 to 19 !");
  FlushWait();
  while (Serial.available() > 0)
  {
    int inChar = Serial.read(); 
    if (isDigit(inChar))
    {
      // convert the incoming byte to a char
      // and add it to the string:
      inString += (char)inChar;
    }
    if (inChar == '\n')
    {
      pin=inString.toInt();
      Serial.print("The current pin number is ");
      Valid=true;
      if (pin>2 && pin<13) Serial.println(pin);
      if (pin==14) Serial.println("A0");
      if (pin==15) Serial.println("A1");
      if (pin==16) Serial.println("A2");
      if (pin==17) Serial.println("A3");
      if (pin==18) Serial.println("A4");
      if (pin==19) Serial.println("A5");
      if (pin<3 || pin==13 || pin>19)
      {
        Serial.println("invalid");
        Valid=false;
      }
      inString = "";
    } 
  }
}
pinMode(pin, OUTPUT);
Serial.println("Pin OK");
Servos.pin.attach (pin);
Servos.Langle=EEPROM.read(100+2*pin);
Servos.Hangle=EEPROM.read(101+2*pin);
if (Servos.Langle==255) Servos.Langle = 75;
if (Servos.Hangle==255) Servos.Hangle = 105;
Servos.angle=Servos.Langle;
Servos.setpoint=Servos.Langle+1;
SetAngle();
Serial.println("Angle set to LOW angle");
Serial.print("Current values for servo on this pin are LOW ");
Serial.print(Servos.Langle);
Serial.print(" and HIGH ");
Serial.println(Servos.Hangle);
CmdLH='L';
}
//------------------------------------------------ Flash LED --------
void Flash()
{
  unsigned long currentMillis = millis();
  digitalWrite(LED_BUILTIN, LED13state);
  if (currentMillis - previousMillis >= 200)
  {
    LED13state = !(LED13state);
    previousMillis = currentMillis;
  }
}

Voor de aansturing zelf kijk even op mijn draadje:
http://forum.beneluxspoor.net/index.php?topic=63567.0

Op de site van Ruud Boer vind je ook sketchjes voor de servo-aansturing middels DCC. Dat heb ik ook gebruikt.
https://rudysmodelrailway.wordpress.com/software/

In jouw programma zit een fout. De Potpin kan nooit pin 0 zijn, maar is pin A0 (=pin 14). Zie step 2 in het verhaal.
Het is ook niet servo.wissel1 maar servo wissel1. Dus zonder punt ertussen. En sluit iedere regel af met ; (puntkomma) !!!
Als je het invoert in de Arduino IDE en compileert zie je vanzelf wat de syntax fouten zijn.

Op Aliexpress is het zeker veilig kopen. Het kan alleen lang duren. Ik heb er al heel veel gekocht, het is allemaal heel goedkoop.
Als er iets niet klopt kun je een 'dispute' openen.
Dat heb ik twee keer gedaan.
Bij mijn eerste Arduino ontbrak de reset switch. Na een dispute hierover kreeg ik de bijna de helft van het bedrag retour. Die Arduino is gewoon bruikbaar en dient nu als loconet terugmelder.
Toen een Arduino mini wel erg lang weg bleef ook een dispuut geopend. Ze gingen het meteen uitzoeken en merkten dat het ding ergens 'lost in the warehouse' was. Ze hebben meteen een andere gestuurd.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 13 september 2015, 20:50:10
Johan,

Je wilt de standen weten omdat dat de twee hoeken zijn waartussen de servo heen en weer gaat?
Dan kun je die twee standen in de code opnemen voor de servo aansturing. Klopt dat?
Oftewel: de servo moet 'getuned' worden.
Inderdaad. Klopt.

Dat kan ook simpeler. Momenteel ben ik juist bezig met een programmaatje hiervoor.
Dat vraagt eerst een pinnummer waar de te tunen servo aanhangt. Daarbij worden de twee hoeken op 75 (LOW) en 105 (HIGH) graden gezet, 15 graden om de 90 dus.
Vervolgens kun je, in de serial monitor door op + en - te drukken de waarde van LOW met één graad verhogen of verlagen.
Met 'C' wissel je van de ene hoek naar de ander.
Met 'S' sla je de waardes op in het EEPROM en kun je een nieuw pinnummer opgeven.
...
Deze code moet je dan dus gewoon op de Arduino laden, en dan servo's eraan en gaan met de banaan (hij moet natuurlijk wel aan de computer hangen), toch? Het klinkt erg handig. Is de code af? Want dan gaan we hem als we een Arduino hebben hem gewoon gebruiken.

Het klopt dat er wat fouten in zitten, ik heb hem 'even' in elkaar geflanst, maar een ding snap ik niet:
Volgens deze Amerikaan:
laat maar, ik heb het verkeerd onthouden...

Hmm, ervaringen, altijd interessant. Fijn dat Aliexpress toch te vertrouwen is, in tegenstelling tot Miniinthebox.com, waar ik eerst terecht kwam: 99 van de 100 reviews was: Ik ben opgelicht, ze zijn niet te vertrouwen, bestel hier niks, dit zijn dieven, enz. Dus sindsdien ben ik gaan letten op keurmerken, en HobbyElctronica heeft er een, dus was ik over. Maar ik zal er nog eens over na denken of ik de gok wil wagen met Aliexpress.

Groet,
Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 13 september 2015, 22:34:55
Johan,

Het programmaatje werkt inderdaad.
1) Arduino IDE installeren
2) Knip en plak de code naar bv SetServo.ino
3) Open dit bestand in de IDE
4) Selecteer bij 'hulpmiddellen' het juiste board en com-poort
5) Upload het naar de Arduino via de USB kabel
6) sluit een servo aan op een pin (3 t/m 12 of A0 t/m A5)
7) start de monitor

Het opslaan van de waardes in het EEPROM is nuttig bij de aansturing van de servo's via DCC.
Je kunt de waardes dan weer teruglezen.
Als je daar nog niks aan hebt, kun je gewoon de gevonden waardes noteren.
Wel op 'S' drukken om een volgende pin te selecteren.
Iedere ingave moet worden afgesloten met <enter>.

Dat display aan de gang krijgen lijkt me nog best ingewikkeld. Zou er dus nog maar even niet aan beginnen.

Aliexpress is zelf geen winkel maar een site waar leveranciers hun spullen aanbieden. Bestellen en betalen gebeurt wel via AliExpress.
Bestel voor maximaal €22,- per leverancier, anders gaat de douane zich ermee bemoeien.
En als je iets besteld hebt voor een paar euro en het gaat toch mis, is de schade beperkt.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 17 november 2015, 20:14:11
Helpdesk! Iemand?

Help is zeker nodig. Paar weken geleden een Arduino Micro besteld en ook ontvangen. De zondag daarop op de club geprobeerd te programmeren, maar het ging niet. Toen thuis nog eens geprobeerd, ook hier lukte het niet.  :-\ Op de club was het op een computer die op XP draait, thuis een op Ubuntu Linux. Op de club krijgen we de foutmelding: "avrdude: butterfly_recv(): programmer is not responding Probleem bij uploaden naar het board. Zie (link naar Troubleshooting page van Arduino) voor suggesties."
Hier thuis zijn de USB-poorten niet geactiveerd, waardoor ik de COM-port niet in kan stellen via Tools -> Serial Ports. Ik heb de Troubleshooting page op de Arduino website al door gelezen, maar het lijkt er niet op dat daar het probleem, en dus ook de oplossing staat. Als ik de Micro stroom geef, gaat er een blauwe LED branden aan de onderzijde, en aan de bovenzijde gaat een groene LED knipperen. Wat ik dus denk is dat er wel een bootloader op staat. De TX en RX LEDs knipperen niet als hij aangesloten is op de computer. Ik zou niet weten wat te doen, iemand anders wel? ???
Overigens ga ik anders naar het Arduino forum.

Groet,

Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 17 november 2015, 23:04:29
Hallo Johan,

Had je dit draadje al gevonden:
http://forum.beneluxspoor.net/index.php?topic=66902.0

Welke Arduino heb je? Doorgaans gebruiken we een Arduino UNO R3; deze heeft geen blauwe led aan de onderkant.
Welke programmer gebruik je? Maak een screendump (Hulpmiddelen --> programmer)
Al eens een andere programmer geprobeerd?
Heb je op de club wel de juiste USB-seriël drivers geïnstalleerd?
Wat bedoel je met USB-poorten niet geactiveerd? Zonder COM-poort gaat het natuurlijk nooit lukken.
Windows XP is wel erg oud. Geen PC met Windows 7 of nieuwer?
Gaat het compileren wel goed? Welk programma probeer je? Begin eerst met het voorbeeld programmaatje Blink.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 18 november 2015, 06:56:39
Hallo Nico,
Nee, interessant draadje. Ga ik eens doorlezen.
Ik gebruik een Arduino Micro.
Als ik vanmiddag tijd heb, zal ik nog eens kijken op welke programmer hij staat.
Nee, dacht van niet.
Poeh, dat zou goed kunnen van niet, Oscar, van wie de computer is, heb ik gewoon een link gegeven en gezegd: download maar wat er staat. Zitten die drivers standaard in het programma, of moet ik die dus nog downloaden?
Om een of andere manier zijn de seriële poorten van een op Linux draaiende computer 'dicht'. Die moet je dan dus openen, maar ik weet niet hoe. Ik heb al een beetje gechocheld, zoals dit: www.cyberciti.biz/faq/find-out-linux-serial-ports-with-setserial/ (http://www.cyberciti.biz/faq/find-out-linux-serial-ports-with-setserial/), maar ik snap er niet zo veel van.
XP is wel erg oud, dat klopt, maar op de club hebben we niks beters. Hier thuis zijn twee computers die op Linux draaien (zelfde versie, de nieuwste), en een van mijn ouders die op Windows 7 draait, ik weet alleen niet of ik de programmer daarop mag downloaden.
Het compileren gaat wel goed, na een paar aanpassingen (puntkomma's vergeten enzo).
Het programma dat ik heb geprobeerd is deze:
/* Arduino FallerCarVisp2.4
verklaringen:
wisselX=wissel
stopX=stopplaats
5 pins totaal; 2 PWM;
bevat:
wissel 9;
stopplaats 11;
reed1;
com3-> & com3<-;
©2015, Johan Verzijden, VSZ
Board: Micro
*/
#include <Servo.h>
//Servo's:
Servo wissel9;
Servo stop11;
//posities:
//posities voor wissel9:
int pos09 = 90;
int pos9 = 44;
//posities voor stop11:
int pos011 = 0;
int pos11 = 180;
//INPUT(reed) op pins:
int reed1 = 10;
//communicatie met AR3 op pins:
int com3-> = 1;
int com3<- = 0;

void setup ()
{
//servo's op pins:
wissel9.attach(9);
stop11.attach(11);
//reed als INPUT;
pinMode(reed1, INPUT);
//com. als IN- & OUTPUT:
pinMode(com3->, OUTPUT);
pinMode(com3<-, INPUT);
}

void loop ()
{
//wissel9 op rechtdoor:
wissel9.write(pos09);
//stop11 uit:
stop11.write(pos011);

//bushalte:
if(digitalRead(reed1) == HIGH) //bus wordt gedetecteerd:
{
wissel9.write(pos9); //wissel9 op afbuigend
stop11.write(pos11); //stop11 aan -> bus stopt
delay(5000); //wacht 5 sec
wissel9.write(pos09); //wissel9 op rechtdoor
delay(15000); //wacht 15 sec
stop11.write(pos011); //stop11 uit
//bus rijdt weg bij halte;
}
}
//END
Ik heb het ook al met blink geprobeerd, maar dat werkte ook niet.

Groet,

Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: ivanzon op 18 november 2015, 08:28:03
Dat voorbeeld op die website is met een APIC, grote kans dat je op de XP machine nog een normale PIC hebt.
De klassieke adressen zijn: 0x3F8 en interrupt 4 voor COM1, 0x2F8 en interrupt 3 voor COM2.
Deze gegevens zijn alleen zeker bij poorten die rechtstreeks op het moederbord zitten. Bij extra insteek kaarten wordt het een ander verhaal.
Verder moet je baud rate, data bits en parity goed ingesteld zijn. Dat moet je ergens in de handleiding kunnen terugvinden.
Titel: Re: JCV's (om)bouwdraadje
Bericht door: MTV op 18 november 2015, 08:50:50
Even ter verduidelijking: de PC thuis waar Johan het over heeft draait op Ubuntu 14.04, da's niet de nieuwste.

Groet,

Matthijs
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 18 november 2015, 10:19:55
Hallo Johan,

Waarom neem je een Arduino Micro, als je overal op deze site kunt vinden dat we een UNO gebruiken?
Ook had ik je al eerder de weg gewezen naar de site van Ruud Boer. Allemaal met een UNO
Daarmee zet je jezelf een beetje buitenspel.
Had je deze pagina al gevonden?
https://www.arduino.cc/en/Guide/ArduinoLeonardoMicro#toc10
Daar staat alles over de Micro.

Ik heb nog wel geprobeerd om de drivers, zoals ik die gebruik, te installeren op 32-bits XP. Maar dat ging ook niet goed.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 18 november 2015, 11:51:48
Hallo,
Ik weet wel dat jullie de Uno gebruiken, maar ik heb twee redenen om voor een Micro te kiezen. Ik heb voor de Micro gekozen, omdat deze 20 Digital I/O poorten heeft, waarvan 7 PWM compatibel, in plaats van de 14 I/O(waarvan 6 PWM) op een Uno. We hadden er nu eenmaal zoveel nodig. Ik had ook een Leonardo kunnen nemen, maar de Micro is weer goedkoper.
Ik heb een screenshot van de IDE gemaakt waar je kan zien welke programmer thuis ingesteld staat:
(https://images.beneluxspoor.net/bnls/schermafdruk_programmer_ARIDE.png) (https://images.beneluxspoor.net/bnls/schermafdruk_programmer_ARIDE.png)
Die pagina had ik al bekeken, toch bedankt.

Groet,

Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: Reinout van Rees op 18 november 2015, 12:08:39
De micro (micro pro, dat wel) wordt op deze site ook wel gebruikt hoor: zie de "AdServo" draadjes. Correctie: zie twee berichtjes hieronder.

(Zelf gebruik ik de nano en ik dacht dat daar ook wel meerderen van waren. In principe is de nano een uno in een kleinere verpakking. En ook lekker makkelijk met USB aansluiting).

Reinout
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 18 november 2015, 12:09:11
Johan,

Ik dacht dat je er gewoon servo's aan wou hangen? Ik zie tenminste een include van de servo library in je code. Waarom heb je speciaal PWM pinnen nodig?
Op een UNO kun je servo's op alle pinnen aansluiten. Alleen pin 2 gebruiken we voor het DCC signaal en 13 is de interne LED.
Alleen de servo-library beperkt je tot max 12 servo's. Als je er meer nodig hebt neem je gewoon twee of meer Arduino's.
Als je afwijkende hardware gebruikt heb je ook afwijkende problemen en dus ook weinig mensen die je echt kunnen helpen.

Voor de UNO gebruik ik de AVRISP mkII programmer. Gewoon proberen met die andere programmers.
Maar thuis heb je geen USB poort beschikbaar begrijp ik, dus dat gaat nooit lukken.
Ik weet ook niet of je andere USB-Serial drivers nodig hebt voor de micro.
Maar op die Arduino site staat wel: There is no need to install drivers for Ubuntu 10.0.4 ??
Je hebt bij 'board' wel de Micro geselecteerd?

Stuur anders eens een PB naar Timo. Hij is een echte Arduino kenner.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 18 november 2015, 12:11:21
@Reinout,

De Adservo zelf gebruikt een Arduino pro mini. Deze is 100% compatibel met de UNO.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: Reinout van Rees op 18 november 2015, 12:24:35
Mini, micro, aargh :) Ik heb ze door elkaar gehaald, inderdaad. (M'n vorige bericht heb ik gelijk maar even gefixt met doorstrepen)

Reinout
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 15 december 2015, 17:01:32
 Opgelost!
Ik kan programmeren, het lag aan het kabeltje...
Eén ding klopt alleen nog niet: Als ik probeer je code erop te zetten Nico, krijg ik een foutmelding over dat bepaalde dingen niet 'defined' zijn. Ik zal kijken of ik weer een screenshot kan maken, dan kan je het zien. Had je hem zelf eigenlijk al uitgeprobeerd?
Ja, en zo leer je weer wat, want ik wist niet dat je met alle pins (ook niet-PWM) servo's kon besturen.

Momenteel zijn we aan het testen, binnenkort misschien meer nieuws als het echt werkt, dan zal er ook vast wel een video over komen.

Groet,
Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 15 december 2015, 17:23:45
Hallo Johan,

Welke code bedoel je eigenlijk?
Die ik eerder in dit draadje heb gezet?
Ik heb die code even geknipt en geplakt naar de Arduino IDE en gecompileerd.
Geen enkel probleem.
Uiteraard is die code uitgetest. Anders kon ik er toch niet die screendump bijzetten.
Heb je in de IDE de Arduino Micro geselecteerd en de standaard programmer?
Wellicht is het een compatibiliteitsprobleem tussen de UNO en de Micro, waardoor de code mogelijk niet goed werkt op de Micro.
Stuur anders maar een screendump. Niet het hele scherm maar alleen een uitsnede van de foutmelding.

Overigens is het programma in dit draadje (http://forum.beneluxspoor.net/index.php/topic,66902.0.html)  een doorontwikkeling op die code.
Wellicht heb je daar meer aan.

mvg
Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 15 december 2015, 18:50:07
Hallo,
Inderdaad, die bedoel ik.
Ik zal eens kijken wanneer ik tijd heb om een screendump te maken.
En bedoel je de code die onderaan bericht 1 gelinkt staat? Dan zal ik dat eens proberen.

Alvast bedankt,

Groet,

Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 15 december 2015, 19:06:12
Johan,

Ik bedoel de sketch die in deze zipfile (http://www.globalvisuals.nl/downloads/decoderonly.zip)  zit.
Deze link staat dus ook in het genoemde draadje.
Omdat je Linux  hebt kun je alleen maar de sketch zelf gebruiken.

gr.
Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 17 december 2015, 17:10:11
Ik heb alles geprobeerd, maar ik krijg de library niet in de IDE.  >:( Wel heb ik nog een screendump gemaakt van de foutmelding:

(https://images.beneluxspoor.net/bnls/foutmeldingServodecoder.png) (https://images.beneluxspoor.net/bnls/foutmeldingServodecoder.png)

Misschien heeft iemand er nog wat aan.

Groet,

Johan
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 17 december 2015, 19:54:29
Hallo Johan,

Het probleem is duidelijk. De DCC_Decoder library wordt niet gevonden.
- Staat de library in de lijst als je kijkt bij Schets-> Bibliotheek gebruiken?
- Had je hier al gekeken?  https://www.arduino.cc/en/Guide/Libraries (https://www.arduino.cc/en/Guide/Libraries)
- Hij moet staan in de Linux variant van Program files\Arduino\libraries\DCC_Decoder
  of in
  My Documents\Arduino\libraries\DCC_Decoder
- Deze map moet bevatten DCC_Decoder.h en DCC_Decoder.cpp
- Let op: Alles is case sensitive, maar dat was je op Linux al wel gewend denk ik.
- Gebruik je de laatste versie van de IDE? Vandaag (17/12) is versie 1.6.7 verschenen.

Eigenlijk is het niks anders dan de folder DCC_Decoder die in mijn zipfile zit naar de juiste map slepen.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 18 december 2015, 11:14:28
Hallo,

-Nee, daar staat hij niet.
-Nee, nu wel. Ik zal eens kijken of ik de oplossing eruit kan halen.
-Punt is dat de map 'Arduino' niet onder 'My Documents' of 'Program files' staat, Hij staat namelijk onder 'Computer' > 'Usr' > 'share'. Misschien iets wat verschilt per versie van Ubuntu (of Linux).
-Die map ('Libraries' onder 'Arduino') bevat ze (nog) niet.
-Wat is 'case sensitive'?
-Nee, ik zal eens kijken welke versie ik nu gebruik.

Waar het dus al fout gaat, is dat hij je .zip file opent in Archive Manager, en vanuit daar kan ik niks naar de 'Libraries'-map verplaatsen. In bijv. Downloads zetten lukt wel. De foutmelding zegt dat hij toegangsproblemen heeft...

Groet,

Johan

P.S. Misschien werkt het als ik de .zip open op een Windows systeem, en dan de juiste bestanden overzet met een USB-stick naar de Linux-computer?
Titel: Re: JCV's (om)bouwdraadje
Bericht door: NTeering op 18 december 2015, 11:34:36
Johan,

Het lijkt erop dat Linux hier roet in het eten gooit. Werkt toch weer wat anders dan Windows.
Als je Arduino-map wel een subfolder libraries bevat zou ik de DCC_Decoder map daar eens heen slepen.
Daarbij is het zeker verstandig om deze eerst op een Windows PC uit de zipfile te halen.

Maar als Linux van mening is dat je daar niks heen mag slepen vanwege security-settings, zul je wellicht eerst in Linux de rechten moeten aanpassen.
Nee, ik heb geen idee hoe dat zou moeten.
Kun je geen windows-emulatie op Linux zetten of gewoon Windows op je PC erbij zetten en multiboot maken?

Case sensitive betekent gewoon 'hoofdlettergevoelig'. Een mapnaam DCC_Decoder is dus een andere map dan dcc_decoder
Wat mij betreft is dat een irritante gewoonte van alle Unix-klonen. Windows heeft hier geen last van.

Nico
Titel: Re: JCV's (om)bouwdraadje
Bericht door: JCV op 23 maart 2016, 19:57:19
Hallo,
Met de Arduino's gaat het zijn gangetje, stukje bij beetje lukt er meer, en ik hoop binnen niet al te lange tijd iets werkend te tonen.
Iets anders. I.p.v. een reguliere stopspoel willen we op een plek een servo met magneet gebruiken. We hebben twee dingen geprobeerd: een zware maar sterke magneet, en een lichte maar veel minder sterke magneet. Na een paar tests, bleek dat de servo de zware magneet niet aan kon (hij moet 180 graden draaien). De lichte magneet kon hij wel aan, alleen was deze nu weer te zwak, waardoor de auto's de stopplaats gewoon voorbijreden. Dus moesten we opzoek naar een sterkere servo, die de zware magneet aan kan. Ik weet alleen niet waar ik dan naar moet kijken. Het gewicht van de magneet weet ik niet, maar ik zal Oscar eens vragen hem op de weegschaal te leggen.

Kan iemand mij helpen? ???

Johan
P.S. Ik heb al in de encyclopedie gekeken, maar er staat niks over.