{"id":3425,"date":"2024-10-22T12:44:31","date_gmt":"2024-10-22T10:44:31","guid":{"rendered":"https:\/\/www.rommelkist.nl\/elec\/?p=3425"},"modified":"2024-11-18T14:10:29","modified_gmt":"2024-11-18T13:10:29","slug":"modelbaan-deel-3-bezetmelding","status":"publish","type":"post","link":"https:\/\/www.rommelkist.nl\/elec\/elektronica\/modelbaan-deel-3-bezetmelding\/","title":{"rendered":"Modelbaan &#8211; deel 3b &#8211; Bezetmelding"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Op een modelspoorbaan is het handig\/nodig om te weten waar, in welk blok, een loc zich bevind. M\u00e4rklin levert hiervoor de <a href=\"https:\/\/www.marklin.nl\/producten\/details\/article\/60881\">S88<\/a> detectiemodules. Zie hiervoor: <a href=\"https:\/\/encyclopedie.beneluxspoor.net\/index.php\/S88,_S88N,_XpressNet_en_LocoNet\">Terugmelding met S88 modules<\/a>. Op mijn baantje is de detectie geregeld met een Arduino en een paar <a href=\"https:\/\/www.arcomora.com\/arloco\/\">OKKIEs<\/a> van de firma <a href=\"https:\/\/www.arcomora.com\/\">Arcomora<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-30.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"386\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-30-1024x386.png\" alt=\"\" class=\"wp-image-3440\" style=\"width:400px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-30-1024x386.png 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-30-300x113.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-30-768x290.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-30-1536x579.png 1536w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-30-425x160.png 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-30.png 1676w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">De baan is opgebouwd met een achttal blokken, waarvan er zeven in gebruik zijn. Elk blok heeft aan het begin en aan het einde een detectiesegment. Het deel daartussen is een ongedetecteerd segment.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-28.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"384\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-28-1024x384.png\" alt=\"\" class=\"wp-image-3435\" style=\"width:500px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-28-1024x384.png 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-28-300x113.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-28-768x288.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-28-1536x576.png 1536w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-28-2048x768.png 2048w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-28-425x159.png 425w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Elk segment (inrit en uitrit) wordt voorzien van een stukje detectie-elektronica. Een OKKIE bevat acht detectie-ingangen. Wanneer een loc (stroomafnemer) in het detectiesegment rijdt gaat de optocoupler (PC844) &#8220;geleiden&#8221; en zorgt voor een HOOG naar LAAG transitie op de uitgang van de schakeling. Zie hieronder het schema. Die transitie wordt gelezen door de Arduino, die vervolgens voor een bezetmelding naar de centrale zorgt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-27.png\"><img loading=\"lazy\" decoding=\"async\" width=\"619\" height=\"168\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-27.png\" alt=\"\" class=\"wp-image-3434\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-27.png 619w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-27-300x81.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-27-425x115.png 425w\" sizes=\"auto, (max-width: 619px) 100vw, 619px\" \/><\/a><figcaption class=\"wp-element-caption\">Uit de documentatie van Arcomora.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-31.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"580\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-31-1024x580.png\" alt=\"\" class=\"wp-image-3441\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-31-1024x580.png 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-31-300x170.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-31-768x435.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-31-425x241.png 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-31.png 1311w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">De acht uitgangen van elke OKKIE zijn daartoe verbonden met de twee maal acht ingangen op de Arduino UNO (A0 t\/m A5, D0, D1, D4 t\/m D11). Op de Arduino draait een sketch van <a href=\"https:\/\/rudysmodelrailway.wordpress.com\/2014\/12\/01\/multiple-arduinos-chained-as-an-s88-occupancy-detector-interface\/\">Ruud Boer<\/a> die de detectie informatie doorgeeft aan de centrale (zie hieronder).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-14.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"802\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-14-1024x802.png\" alt=\"\" class=\"wp-image-3389\" style=\"width:500px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-14-1024x802.png 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-14-300x235.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-14-768x602.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-14-425x333.png 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-14.png 1528w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/*\nS88 occupancy sensor interface to the M\u00e4rklin Central Station 2\n\nSoftware by Ruud Boer, November 2014.\nFreely distributable for private, non commercial, use.\n\nConnections for S88 bus:\ns88 pin 1 Data - Arduino pin 13 = Data_Out to Oommand Station, or to the previous Arduino in the chain\ns88 pin 2 GND  - Arduino GND\ns88 pin 3 Clock - Arduino pin 2, interrupt 0\ns88 pin 4 PS - Arduino pin 3, interrupt 1\nS66 pin 5 Reset (not used here) - Arduino pin 12, used as DATA IN from previous Arduino DATA OUT\ns88 pin 6 V+ - Arduino 5V\n\nIMPORTANT: To avoid S88 signals to jitter, it is best to put DATA_in pin 12 to GND on the last Arduino in the chain.\n\nConnections for sensors: see table in void Setup() at line 35.\nREMARK1: Inputs have the internal pullup resistor active, the sensors must pull the input to GND.\nREMARK2: How short a pulse is allowed from the sensors before it is not seen?\nA test showed that the main loop where all sensors are read runs once every 76 microseconds.\nIf a train runs over the reed switch with a speed of 1m\/s, which is over 300 km\/hr, that translates to 1 mm\/ms.\nSo even if the reed switch would be on only for a 1 mm travel distance, then still the Arduino\nwill read that info more than 10 times!\n\n*\/\n\nint clockCounter=0;\nlong loopCounter=0; \/\/used in lines 55 and 88, see there for explanation\nunsigned int sensors=0;\nunsigned int data=0xffff;\nconst byte dataIn=12;  \/\/data input from next Arduino in S88 chain\nconst byte dataOut=13; \/\/data output pin=13\nboolean loadSensors=false; \/\/flag that says to load sensor bits into dataOut bits\n\nvoid setup() {\n  pinMode(2, INPUT_PULLUP);\n  attachInterrupt(0,clock,RISING); \/\/pin 2 = clock interrupt\n  pinMode(3, INPUT_PULLUP);\n  attachInterrupt(1,PS,RISING);    \/\/pin 3 = PS interrupt\n  pinMode(dataIn,INPUT_PULLUP); \/\/pin 12 = data in from next Arduino S88 in chain\n  pinMode(dataOut, OUTPUT); \/\/pin 13 = data out to ECoS or to previous Arduino in S88 chain\n  digitalWrite(dataOut, LOW);   \/\/LED off\n  pinMode(A0, INPUT_PULLUP); \/\/sensor 01\n  pinMode(A1, INPUT_PULLUP); \/\/sensor 02\n  pinMode(A2, INPUT_PULLUP); \/\/sensor 03\n  pinMode(A3, INPUT_PULLUP); \/\/sensor 04\n  pinMode(A4, INPUT_PULLUP); \/\/sensor 05\n  pinMode(A5, INPUT_PULLUP); \/\/sensor 06\n  pinMode(0, INPUT_PULLUP);  \/\/sensor 07\n  pinMode(1, INPUT_PULLUP);  \/\/sensor 08\n  pinMode(4, INPUT_PULLUP);  \/\/sensor 09\n  pinMode(5, INPUT_PULLUP);  \/\/sensor 10\n  pinMode(6, INPUT_PULLUP);  \/\/sensor 11\n  pinMode(7, INPUT_PULLUP);  \/\/sensor 12\n  pinMode(8, INPUT_PULLUP);  \/\/sensor 13\n  pinMode(9, INPUT_PULLUP);  \/\/sensor 14\n  pinMode(10, INPUT_PULLUP); \/\/sensor 15\n  pinMode(11, INPUT_PULLUP); \/\/sensor 16\n}\n\nvoid loop() {\n  if (loopCounter==600){bitSet(sensors,0);}\n  \/*\n  For an unknown reason the ECoS sets the first 8 bits to 1 after startup \/ reset of the S88 Arduino&#039;s.\n  When one of the sensor inputs is changed, from there on everything goes well.\n  Therefore, over here we give sensor bit 0 an automatic change after 30 seconds, when the ECoS is fully started.\n  The 1 second is created via &#039;loopCounter&#039;, which increments in the PS interrupt (line 88).\n  There are appr0ximately 20 PS pulses per second, therefore we use 20x30=600 in the if statement.\n  *\/\n  if (!digitalRead(A0)) {bitSet(sensors,0);}\n  if (!digitalRead(A1)) {bitSet(sensors,1);}\n  if (!digitalRead(A2)) {bitSet(sensors,2);}\n  if (!digitalRead(A3)) {bitSet(sensors,3);}\n  if (!digitalRead(A4)) {bitSet(sensors,4);}\n  if (!digitalRead(A5)) {bitSet(sensors,5);}\n  if (!digitalRead(0)) {bitSet(sensors,6);}\n  if (!digitalRead(1)) {bitSet(sensors,7);}\n  if (!digitalRead(4)) {bitSet(sensors,8);}\n  if (!digitalRead(5)) {bitSet(sensors,9);}\n  if (!digitalRead(6)) {bitSet(sensors,10);}\n  if (!digitalRead(7)) {bitSet(sensors,11);}\n  if (!digitalRead(8)) {bitSet(sensors,12);}\n  if (!digitalRead(9)) {bitSet(sensors,13);}\n  if (!digitalRead(10)) {bitSet(sensors,14);}\n  if (!digitalRead(11)) {bitSet(sensors,15);}\n}\n\nvoid PS() {\n  clockCounter=0;\n  data=sensors;\n  sensors=0;\n  loopCounter++; \/\/Increment loopCounter to cretae a timer. See line 55 for explanation.\n}\n\nvoid clock() {\n  digitalWrite(dataOut,bitRead(data,clockCounter));\n  delayMicroseconds(16); \/\/Delay makes reading output signal from next Arduino in chain more reliable.\n  bitWrite(data,clockCounter,digitalRead(dataIn));\n  clockCounter =(clockCounter +1) % 16;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">De connectie vanaf de Arduino naar de centrale is een seri\u00eble verbinding. De aansluiting hiervoor vind je op de CS2 aan de onderkant.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-23.png\"><img loading=\"lazy\" decoding=\"async\" width=\"431\" height=\"288\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-23.png\" alt=\"\" class=\"wp-image-3421\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-23.png 431w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-23-300x200.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-23-425x284.png 425w\" sizes=\"auto, (max-width: 431px) 100vw, 431px\" \/><\/a><figcaption class=\"wp-element-caption\">Aansluiting S88-bus.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-24.png\"><img loading=\"lazy\" decoding=\"async\" width=\"772\" height=\"244\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-24.png\" alt=\"\" class=\"wp-image-3423\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-24.png 772w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-24-300x95.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-24-768x243.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-24-425x134.png 425w\" sizes=\"auto, (max-width: 772px) 100vw, 772px\" \/><\/a><figcaption class=\"wp-element-caption\">Dit is de aansluiting voor de ECoS centrale. Zelfde als die van de CS2? Uitzoeken!<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-22.png\"><img loading=\"lazy\" decoding=\"async\" width=\"324\" height=\"82\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-22.png\" alt=\"\" class=\"wp-image-3420\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-22.png 324w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-22-300x76.png 300w\" sizes=\"auto, (max-width: 324px) 100vw, 324px\" \/><\/a><figcaption class=\"wp-element-caption\">S88-bus.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bij het baantje geleverde snoertje tussen de CS2 en de Arduino ziet er als volgt uit.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-39.png\"><img loading=\"lazy\" decoding=\"async\" width=\"634\" height=\"256\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2024\/10\/image-39.png\" alt=\"\" class=\"wp-image-3524\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-39.png 634w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-39-300x121.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2024\/10\/image-39-425x172.png 425w\" sizes=\"auto, (max-width: 634px) 100vw, 634px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Het kabeltje heeft aan de ene kant een 6-polige JST male connector en aan de andere kant een male UTP45 aansluiting.  Die laatste past in een female UTP45 aansluiting in de zijkant van de modelbaan. Van daaruit gaat een UTP kabel naar de Arduino.  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Op een modelspoorbaan is het handig\/nodig om te weten waar, in welk blok, een loc zich bevind. M\u00e4rklin levert hiervoor de S88 detectiemodules. Zie hiervoor: Terugmelding met S88 modules. Op mijn baantje is de detectie geregeld met een Arduino en een paar OKKIEs van de firma Arcomora. De baan is opgebouwd met een achttal blokken, waarvan er zeven in gebruik zijn. Elk blok heeft aan het begin en aan het einde een detectiesegment. Het deel daartussen is een ongedetecteerd segment. Elk segment (inrit en uitrit) wordt voorzien van een stukje detectie-elektronica. Een OKKIE bevat acht detectie-ingangen. Wanneer een loc (stroomafnemer) in<span class=\"more-link\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/modelbaan-deel-3-bezetmelding\/\">Read More &rarr;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[6,3,104],"tags":[162,163,161,160],"class_list":["entry","author-admin","post-3425","post","type-post","status-publish","format-standard","category-arduino","category-elektronica","category-modeltreinbaan","tag-blok","tag-detectie","tag-okkie","tag-s88"],"_links":{"self":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/3425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/comments?post=3425"}],"version-history":[{"count":0,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/3425\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/media?parent=3425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/categories?post=3425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/tags?post=3425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}