Rolbrug gebouwd van defecte printer

Deze rolbrug is gebouwd van een defecte printer. In eerste instantie was de positionering door middel van een elektromagneet, echter later is de besturing vervangen door een Arduino besturing. Onderstaande video laat de bouw zien.

Iedereen kent het wel, elke paar jaar stopt je scanner printereenheid ermee omdat de kop of inktkanalen verstopt zijn. Soms is dit op te lossen maar vaak is het einde levensduur van de printer. Mechanisch mankeren ze echter meestal niets. Na verloop van tijd heb je een hele stapel naar de stort gebracht. Zonde. Want er is een perfecte rolbrug van te maken om je locomotieven zijdelings weg te zetten. Nu balen er natuurlijk een paar mensen dat ze net hun printer hebben weggegooid. Zelf heb ik een rolbrug gebouwd van zowel een scanner als een printer. De printer is mechanisch steviger dus daar ben ik mee doorgegaan. De positiebepaling heb ik gemaakt met een oude deurbel. De pen die normaal de bel laat rinkelen wordt nu gebruikt om de rolbrug op de juiste positie te fixeren. Eerst heb ik dit geprobeerd met microswitches maar dit bleek te onnauwkeurig te zijn. Een mm onjuiste positie betekent namelijk al een ontspoorde locomotief. De elektrische verbindingen naar de rail op de brug, naar de spoel van de bel, en het contact van de bel zijn gemaakt met de uit de scanner gesloopte flatcable die naar de scankop liep. De rollen van de rolbrug zijn gemaakt van de rollen van het papiertransport.

Werkwijze:

Allereerst sloop je de hele printereenheid. Gooi nog niets weg want je hebt straks nog wat onderdelen nodig, bijvoorbeeld de connectors waar de flatcable in is gestoken en mogelijk nog wat schroeven. Op onderstaande foto is te zien dat de scanner die boven de printer zat is gedemonteerd. Met een beetje pech zit je na de demontage wel helemaal onder de inkt want er wil nog wel eens wat lekken. Oppassen dus !!! Je hebt nu een scanner deel, onder op de foto, en een printer deel, boven op de foto. Beide zijn bruikbaar maar de printer is steviger gebouwd dus heeft de voorkeur.

Onderstaande is wat je over moet houden nadat je de eenheid hebt gesloopt.

De deurbel voor de positiebepaling wordt nu in de printkop gemonteerd. Hier moest een stuk worden afgezaagd om hem passend te maken. Het monteren gaat het makkelijkst met een dot lijm uit het lijmpistool. Zie onderstaande foto. Het contact in de bel is een breekcontact, dat moet worden veranderd in een maakcontact. De pin die de bel doet rinkelen moet hiervoor worden omgedraaid. Hierdoor wordt het breekcontact automatisch een maakcontact. De pen is duidelijk te zien op de foto.

Voor de printkop langs monteer je een aluminium hoeklijn van 1 cm over de gehele breedte die de kop aflegt. Deze moet stevig worden gemonteerd. Elke beweging die de hoeklijn kan maken maakt positioneren onnauwkeuriger. In deze hoeklijn boor je de gaten waar de pin van de deurbel in moet vallen. Dit is duidelijk te zien in de volgende video. http://youtu.be/nJxJTfHlC68 Dit is een zeer nauwkeurig klusje. Het gat mag niet meer dan een tiende mm groter zijn dan de pin dik is. Bij een te klein gat gaat de pin klemmen, bij een te groot gat is de positionering onnauwkeurig. De afstand tussen de gaten is de spoorafstand van de opstelsporen, zelf heb ik 6,3 cm gebruikt omdat dit een hartafstand is bij de Fleischmann Profirails geometrie.

Het schuifdeel, dus de rolbrug zelf wordt op de printkop gemonteerd met een stevige stalen hoeklijn. Wanneer deze niet stevig genoeg is gaat straks de rolbrug doorbuigen wanneer er een zware locomotief op rijdt. Dit wordt wel opgevangen door de rollen van de rolbrug maar stevig is altijd beter. Op bovenstaande foto is boven de bel deze hoeklijn te zien. Deze wordt aan de zijkant van de printkop gemonteerd met 2 stuks M4 schroeven. De bodem van de rolbrug kan worden gemaakt uit een plaat polycarbonaat die bij Conrad is te bestellen. Dit materiaal is bijzonder gemakkelijk te bewerken. De zijkanten, dit is de reling, zijn voorzien van dezelfde hoeklijn als die voor de positiebepaling. Hier komt later nog een hek op. In de printer zitten diverse rollen om het papier te transporteren, deze zijn perfect bruikbaar als de rollen waarmee de rolbrug zich verplaatst en als ondersteuning hiervan. Deze rollen en reling zijn goed te zien op de laatste foto.

Om de verbindingen te maken naar de schakelaar in de kop, de deurbel spoel, en naar de rails op de rolbrug moet de flatcable worden gebruikt die al aan de printkop zit, of zoals ik heb gedaan die van de scanner gebruikt. Zie onderstaand schema voor de verbindingen. Op zich is de besturing vrij eenvoudig.

De reden dat ik de flatcable van de scanner heb gebruikt was dat die van de printer helemaal onder de inkt zat en nog nauwelijks schoon te krijgen was. Deze flatcable loopt mooi soepel met de kop mee en heeft een lange levensduur. Deze flatcable heeft speciale connectors. Die zitten op de printplaten. Om ze te gebruiken moeten ze uit de printplaten worden gedesoldeerd. Echter dit is niet altijd mogelijk. Zelf heb ik ze uit de printplaat geslepen door ruim om de connector heen te slijpen, vervolgens heb ik ze los met draadjes aangesloten op de soldeereilandjes van de printplaat. De body van de printplaat die nog aan de connector zit heb ik gebruikt om ze mee vast te zetten. Een aantal verbindingen moet nu naar buiten worden uitgevoerd voor de externe voedingen en de schakelaars. Daartoe kun je de draadjes vanaf de flatcable connector aansluiten op een kroonsteentje.

Dan moet het geheel nog worden getest. Het moet nu zo werken dat wanneer je de drukknop indrukt de pin van de deurbel naar binnen wordt getrokken. Deze zal het maakcontact indrukken die vervolgens de transportmotor laat lopen. De richting wordt bepaald door de omschakelaar. Hierna laat je de drukknop los. De pin van de deurbel kan niet meer in een gat vallen omdat de brug nu onderweg is. Omdat de pin niet meer in het gat kan vallen blijft ook het maakcontact van de deurbel ingedrukt (=contact maken). Hierdoor blijft de transportmotor lopen. Zodra de pin van de deurbel een gat tegenkomt zal deze daar in vallen. Het maakcontact wordt verbroken en de motor stopt exact op de plek waar het opstelspoor ligt. Het is zaak de transportmotor niet te snel te laten lopen anders loopt de pin van de deurbel vast in een gat. Dit wordt veroorzaakt doordat de motor dan niet snel genoeg stopt en daardoor de pen die al in het gat zat verder wordt geduwd maar dit niet kan en de zaak loopt vast. Maar goed in werkelijkheid loopt een rolbrug ook zeer langzaam. Mocht de motor niet gaan lopen bij het indrukken van de drukknop dan moet mogelijk het maakcontact zover worden gebogen dat deze goed contact maakt. Stopt de motor niet wanneer de pin in een gaatje valt dan moet ook het contact zo worden afgesteld dat dit wel het geval is.

Om te voorkomen dat de rolbrug na zijn laatste positie nog doorloopt dan kan als beveiliging aan beide zijden nog een microswitch worden geplaatst die de stroom naar de motor onderbreekt. Dit is om vastlopen aan het eind te voorkomen. Maar strikt noodzakelijk is dit niet als je weet dat je de rijrichting na de laatste positie moet omkeren zodat de brug weer terugrolt.

De beplating en de rolbrug zijn bespoten met grijze verf van de Action. Met Vallejo roest zijn nog wat roest plekken aangebracht. Als alles naar behoren werkt kan de beplating van de rolbrug erop. De beplating van de rolbrug is gemaakt van restanten laminaat. Dit wordt vanaf de onderzijde geschroefd zodat er nergens lelijke schroeven zijn te zien. Zie onderstaande foto en de video van de nog ongespoten rolbrug http://youtu.be/EGAdW8Mr9iE

Na het verven is het geheel klaar om in de treintafel te worden gemonteerd. Hiervoor hoeft alleen maar een gat met de juiste afmeting te worden gezaagd en de brug kan er dan van onder of boven af in worden gemonteerd. De hoogte instelling is een nauwkeurig klusje want de rails moeten natuurlijk exact aansluiten anders volgen er onherroepelijk ontsporingen. Wat ook wel handig is is om de rails aan de binnenkant een heel klein beetje schuin te vijlen. Dit geleidt de wielen een beetje mocht de rail toch niet exact aansluiten. De brug heeft 5 stopposities. Dat betekent dat er 10 rails kunnen worden aangesloten. Je hebt er dus 9 opstelsporen bij gekregen met 1 aanrijspoor. Op een kleine oppervlakte kun je nu dus 9 locomotieven parkeren.

Note: Deze video is nog van de scanner eenheid zonder positiebepaling, dit is hem dus niet geworden vanwege dat alles plastic is en eigenlijk iets te slap maar wel bruikbaar: http://youtu.be/CICwMGjZQv4

Benodigd Materiaal:

Printereenheid. Een aluminium hoeklijn van 1 cm. Lengte is de afstand waarover de printkop zich verplaatst. Een stalen hoeklijn om de rolbrug op te monteren. Aluminium hoeklijn van 1 cm als reling langs de rolbrug. Polycarbonaatplaat als bodem van de rolbrug. Een 5 Volt gelijkspanningsvoeding om de belspoel te bekrachtigen, en een voeding voor de transportmotor. Dat is nu nog het regelgedeelte van een treintransformator maar dat wordt straks ook een vaste voeding met een regelbare spanning. De spanning welke nodig is wordt bepaald door de snelheid waarmee de rolbrug moet lopen. Dit moet proefondervindelijk worden vastgesteld. Wat ook erg goed werkt is de regeling van een oude accu boormachine. Deze werkt met Pulsbreedte Modulatie waardoor de motor erg langzaam kan draaien. Bij Pulsbreedte Modulatie wordt niet de spanning geregeld maar de pulsbreedte. De motor krijgt altijd zijn volledige vermogen alleen krijgt hij dit gedurende een langere of kortere tijd. Doordat hij altijd zijn volle vermogen krijgt zal de motor ook bij lagere toerentallen veel kracht hebben. Om het juiste toerental in te kunnen stellen moet de regelaar van de boormachine worden vervangen door een potmeter. Dit soort regelingen zijn ook kant en klaar te koop en werken met een NE555 en een Mosfet.

Verder is het nodig om een draairichtingschakelaar aan te schaffen, dit is een 2 x om schakelaar die de polariteit van de rolbrug motor omdraait, en een druktoets met maakcontact om de brug te starten.

Een kroonsteen met meerdere aansluitingen om alle draden netjes aan te sluiten.

Verder heb je nog wat draad nodig om alle verbindingen te maken.

Wat ook nog een uitdaging kan zijn is onderdelen van de printer gebruiken waarmee voorheen de printerkop werd bestuurd, om daar nu de brug mee te positioneren. Dit kan op verschillende manieren. De scanner is voorzien van een pulsgever en de printer is voorzien van een soort lint waarmee de positie wordt bepaald. Door nu een schakeling te kopen of te ontwerpen die pulsen kan tellen kun je de rolbrug zeer nauwkeurig laten stoppen. De printer zet namelijk nooit een dot verkeerd.

Een andere mogelijkheid is de stuurelektronica in takt te laten en via software de printerkop aan te sturen. Het ombouwen met een bel vervalt dan. Dit was echter voor mij nu nog een (rol)brug te ver maar inmiddels is het gelukt om de besturing compleet te vernieuwen met een Arduino.

De extra gebouwde vertraging.

Arduino besturing

Allereerst heb ik bovenstaande beginner set bij Amazon besteld

Ik leg hier niet de hele bouw uit aangezien dit voor iedereen anders zal uitpakken, afhankelijk van het aantal sporen, de afstand tussen de sporen enz…

Als eerste was ik begonnen met een steppermotor. Dat is verreweg het eenvoudigst. Helaas was de steppermotor uit de set te zwak om de rolbrug in beweging te zetten. Een zwaardere was een oplossing geweest maar ik ben gaan experimenteren met een pulsgever, het blijkt dat het positioneren met deze methode erg nauwkeurig werkt maar het is wel meer werk. Je telt vooraf met een testprogramma het aantal pulsen wat wordt opgewekt van het ene naar het andere spoor. Dit sla je op en gebruik je later in het stuurprogramma om de rolbrug exact te positioneren.

Dat ziet er dan zo uit.

Het schema van de gehele besturing.

De rolbrug wordt bediend met een Infrarood afstandsbediening. Deze koop je als set met ontvanger maar hij was al bij deze set meegeleverd. Los koop je ze al voor rond de €2,- In het schema zie je de IR ontvanger links.

Onderstaand is de linker afstandsbediening van Elegoo maar elke afstandsbediening met dezelfde indeling, oa. bij AliExpress, werkt hier op. De toetsen 1 t/m 5 zijn de sporen, de pijltjes zijn voor het exact positioneren, dit hoeft maar een keer. De rechter afstandsbediening is niet geschikt of je moet de codes van de afstandsbediening in het programma aanpassen.

Na gebruik moet je de rolbrug altijd terugzetten op spoor 1 aangezien er geen SD kaart in deze Arduino zit en de laatste positie niet wordt opgeslagen. Uiteraard is dit wel mogelijk. Er zitten calibratieroutines in het programma zodat je met de pijltjestoetsen de eerste keer de rolbrug exact kunt positioneren maar ook later nog.

De testopstelling
En ingebouwd. De positionering is exact.

Het programma

Release date: 02022023

// Aansturen van een rolbrug met 5 sporen

// Altijd starten en afsluiten vanaf spoor1

// De versie IRremote.h moet bij het compileren wel kloppen, was 3.9.0

//Dit programma niet testen op een ESP8266 Board. Deze REBOOT telkens omdat er ledPin = 6 is gebruikt. (=GPIO6 en dit is de CLK)

#include <EEPROM.h>

#include “IRremote.h”

#define ENABLE 5

#define DIRA 3

#define DIRB 4

const int input = 9; // Hier is de puls op aangesloten

int receiver = 12; // Hier is de IR sensor op aangesloten

int ledPin = 6; // Hier is de Led op aangesloten

long spoor1 = 0; //Aantal stappen vanaf de NUL positie. Dus de plaatsbepaling in stappen.

long spoor2 = 11450;

long spoor3 = 23020;

long spoor4 = 34670;

long spoor5 = 46240;

int test = 0;

long laatstePositie = 0;

long deltaStep = 0;

long nieuwePositie = 0;

long pulse = 0;

int var = 0;

int afstand = 1000;

int remPos = 0; //Positie wanneer snelheid omlaag moet

int snelheid = 95; //Motorsnelheid

IRrecv irrecv(receiver);    // create instance of ‘irrecv’

decode_results results;     // create instance of ‘decode_results’

void setup()

{

  irrecv.enableIRIn(); // Start the receiver

  // initialize the serial port:

  Serial.begin(115200);

  pinMode(ledPin, OUTPUT);

  //—set pin direction

  pinMode(ENABLE,OUTPUT);

  pinMode(DIRA,OUTPUT);

  pinMode(DIRB,OUTPUT);

  pinMode(input, INPUT);

}

void loop()

{  

    if (irrecv.decode(&results)) // have we received an IR signal?

     Serial.println(“Signaal ontvangen”);  

    {

      switch(results.value)

      {

      case 0xFF629D: // VOL+ button pressed FF629D Calibreren

                      digitalWrite(ENABLE,HIGH); // enable on

                      analogWrite(ENABLE,snelheid); //enable on

                      digitalWrite(DIRA,LOW);  //reverse

                      digitalWrite(DIRB,HIGH);

                      delay(afstand); //Calibratieafstand

                      //Stop de motor

                      digitalWrite(ENABLE,LOW); //slow stop

                      break;

      case 0xFFA857: // VOL- button pressed FFA857 Calibreren

                      digitalWrite(ENABLE,HIGH); // enable on

                      analogWrite(ENABLE,snelheid); //enable on    

                      digitalWrite(DIRA,HIGH); //one way

                      digitalWrite(DIRB,LOW);

                      delay(afstand); //Calibratieafstand

                      //Stop de motor

                      digitalWrite(ENABLE,LOW); //slow stop

                      break;

      case 0xFF906F: // ^ button pressed FF906F Calibratiesnelheid instellen voor grotere stappen

                      Serial.println(“Toets ^ is gedrukt”);                    

                      afstand = 2000;

                      delay(100);

                      break;

      case 0xFFE01F: // V button pressed FFE01F Calibratiesnelheid instellen op kleine stapjes

                      Serial.println(“Toets v is gedrukt”);                    

                      afstand = 40;

                      delay(100);

                      break;

      case 0xFF30CF:  // Toets 1 is gedrukt

                      //spoor1

                      Serial.println(“Toets 1 is gedrukt”);

                      deltaStep = spoor1 – laatstePositie;

                      digitalWrite(ledPin, HIGH);

                      // Start de Motor

                      //Draairichting bepalen. Is deltaStep negatief dan draairichting omdraaien

                      if (deltaStep <0)

                             {

                               digitalWrite(ENABLE,HIGH); // enable on

                               analogWrite(ENABLE,snelheid); //Stel motorsnelheid in

                               digitalWrite(DIRA,LOW);  //reverse

                               digitalWrite(DIRB,HIGH);

                             }

                      if (deltaStep >0)

                             {                        

                              digitalWrite(ENABLE,HIGH); // enable on

                              analogWrite(ENABLE,snelheid); //enable on    

                              digitalWrite(DIRA,HIGH); //one way

                              digitalWrite(DIRB,LOW);

                             }

                      //Meet het aantal pulsen van de opnemer

                       do

                      {                                    

                      if(digitalRead(input) > var)

                        {                        

                           var = 1;

                           pulse++;                                    

                        }

                        if(digitalRead(input) == 0) {var = 0;}

                      }

                      while (pulse < abs(deltaStep));

                      //Stop dan de motor

                      digitalWrite(ENABLE,LOW); //slow stop

                      pulse = 0;

                      laatstePositie = spoor1;

                      digitalWrite(ledPin, LOW);

                      //delay(100);

                      break;

      case 0xFF18E7:  // Toets 2 is gedrukt

                      //spoor2

                      Serial.println(“Toets 2 is gedrukt”);

                      deltaStep = spoor2 – laatstePositie;

                      digitalWrite(ledPin, HIGH);

                      // Start de Motor

                      //Draairichting bepalen. Is deltaStep negatief dan draairichting omdraaien

                      if (deltaStep <0)

                      {

                        digitalWrite(ENABLE,HIGH); // enable on

                        analogWrite(ENABLE,snelheid); //enable on

                        digitalWrite(DIRA,LOW);  //reverse

                        digitalWrite(DIRB,HIGH);

                      }

                      if (deltaStep >0)

                      {                      

                        digitalWrite(ENABLE,HIGH); // enable on

                        analogWrite(ENABLE,snelheid); //enable on    

                        digitalWrite(DIRA,HIGH); //one way

                        digitalWrite(DIRB,LOW);

                      }

                      //if (deltaStep == 0) {break;} //Niet uitvoeren bij toets 2 indrukken wanneer hij al op spoor 2 staat

                      //Meet het aantal pulsen van de opnemer

                      do

                      {                                    

                      if(digitalRead(input) > var)

                        {                        

                           var = 1;

                           pulse++;                                    

                        }

                        if(digitalRead(input) == 0) {var = 0;}

                      }

                      while (pulse < abs(deltaStep));

                      //Stop dan de motor

                      digitalWrite(ENABLE,LOW); //slow stop

                      pulse = 0;

                      laatstePositie = spoor2;

                      digitalWrite(ledPin, LOW);

                      //delay(100);

                      break;

      case 0xFF7A85:  // Toets 3 is gedrukt

                      //spoor1

                      //Serial.println(“Toets 3 is gedrukt”);

                      deltaStep = spoor3 – laatstePositie;

                      digitalWrite(ledPin, HIGH);

                      // Start de Motor

                      //Draairichting bepalen. Is deltaStep negatief dan draairichting omdraaien

                      if (deltaStep <0)

                      {

                        digitalWrite(ENABLE,HIGH); // enable on

                        analogWrite(ENABLE,snelheid); //enable on

                        digitalWrite(DIRA,LOW);  //reverse

                        digitalWrite(DIRB,HIGH);

                      }

                      if (deltaStep >0)

                      {                      

                        digitalWrite(ENABLE,HIGH); // enable on

                        analogWrite(ENABLE,snelheid); //enable on    

                        digitalWrite(DIRA,HIGH); //one way

                        digitalWrite(DIRB,LOW);

                      }

                      //Meet het aantal pulsen van de opnemer

                      do

                      {

                      //if (deltaStep == 0) {break;} //Niet uitvoeren bij toets 3 indrukken wanneer hij al op spoor 3 staat                              

                      if(digitalRead(input) > var)

                        {                        

                           var = 1;

                           pulse++;          

                        }

                        if(digitalRead(input) == 0) {var = 0;}

                      }

                      while (pulse < abs(deltaStep));

                      //Stop dan de motor

                      digitalWrite(ENABLE,LOW); //slow stop

                      pulse = 0;

                      laatstePositie = spoor3;

                      digitalWrite(ledPin, LOW);

                      //delay(100);

                      break;

      case 0xFF10EF:  // Toets 4 is gedrukt

                      //spoor4

                      //Serial.println(“Toets 4 is gedrukt”);

                      deltaStep = spoor4 – laatstePositie;

                      digitalWrite(ledPin, HIGH);

                      // Start de Motor

                      //Draairichting bepalen. Is deltaStep negatief dan draairichting omdraaien

                      if (deltaStep <0)

                      {

                        digitalWrite(ENABLE,HIGH); // enable on

                        analogWrite(ENABLE,snelheid); //enable on

                        digitalWrite(DIRA,LOW);  //reverse

                        digitalWrite(DIRB,HIGH);

                      }

                      if (deltaStep >0)

                      {

                        digitalWrite(ENABLE,HIGH); // enable on

                        analogWrite(ENABLE,snelheid); //enable on    

                        digitalWrite(DIRA,HIGH); //one way

                        digitalWrite(DIRB,LOW);

                      }

                      //Meet het aantal pulsen van de opnemer

                      Serial.println(deltaStep);

                      do

                      {                                              

                      if(digitalRead(input) > var)

                        {                        

                           var = 1;

                           pulse++;              

                        }

                        if(digitalRead(input) == 0) {var = 0;}

                      }

                      while (pulse < abs(deltaStep));

                      //Stop dan de motor

                      digitalWrite(ENABLE,LOW); //slow stop

                      pulse = 0;

                      laatstePositie = spoor4;

                      digitalWrite(ledPin, LOW);

                      //delay(100);

                      break;

      case 0xFF38C7:  // Toets 5 is gedrukt

                      //spoor5

                      //Serial.println(“Toets 5 is gedrukt”);

                      deltaStep = spoor5 – laatstePositie;

                      digitalWrite(ledPin, HIGH);

                      // Start de Motor

                      //Draairichting bepalen. Is deltaStep negatief dan draairichting omdraaien

                      if (deltaStep <0)

                      {

                        digitalWrite(ENABLE,HIGH); // enable on

                        analogWrite(ENABLE,snelheid); //enable on

                        digitalWrite(DIRA,LOW);  //reverse

                        digitalWrite(DIRB,HIGH);

                      }

                      if (deltaStep >0)

                      {

                        digitalWrite(ENABLE,HIGH); // enable on

                        analogWrite(ENABLE,snelheid); //enable on    

                        digitalWrite(DIRA,HIGH); //one way

                        digitalWrite(DIRB,LOW);

                      }

                      //Meet het aantal pulsen van de opnemer

                     do

                      {                                                

                      if(digitalRead(input) > var)

                        {                        

                           var = 1;

                           pulse++;            

                        }

                        if(digitalRead(input) == 0) {var = 0;}

                      }

                      while (pulse < abs(deltaStep));

                      //Stop dan de motor

                      digitalWrite(ENABLE,LOW); //slow stop

                      pulse = 0;                                                                              

                      laatstePositie = spoor5;

                      digitalWrite(ledPin, LOW);

                      //delay(100);

                      break;          

      }

      irrecv.resume(); // receive the next value

                 //digitalWrite(8, LOW); Bij problemen deze regels weer terugzetten

                 //digitalWrite(9, LOW);

                 //digitalWrite(10, LOW);

                 //digitalWrite(11, LOW);

    }

}

Translate »