Inhoudsopgave:

Arduino 2-in-1 modeltreincontroller - Ajarnpa
Arduino 2-in-1 modeltreincontroller - Ajarnpa

Video: Arduino 2-in-1 modeltreincontroller - Ajarnpa

Video: Arduino 2-in-1 modeltreincontroller - Ajarnpa
Video: Arduino DIY DC Model Train Controller 2024, Juli-
Anonim
Arduino 2-in-1 modeltreincontroller
Arduino 2-in-1 modeltreincontroller

Veertig jaar geleden ontwierp ik een op-amp gebaseerde gasklep voor een modeltrein voor een paar vrienden, en toen, ongeveer vier jaar geleden, heb ik het opnieuw gemaakt met een PIC-microcontroller. Dit Arduino-project bootst de PIC-versie na, maar voegt ook de mogelijkheid toe om een Bluetooth-verbinding te gebruiken in plaats van de handmatige schakelaars voor de gas-, rem- en richtingsregeling. Hoewel het ontwerp dat ik hier presenteer gericht is op een 12 volt modelspoormotor, kan het eenvoudig worden aangepast voor een verscheidenheid aan andere DC-motorbesturingstoepassingen.

Stap 1: Pulsbreedtemodulatie (PWM)

Pulsbreedtemodulatie (PWM)
Pulsbreedtemodulatie (PWM)

Voor degenen onder u die niet bekend zijn met PWM, het is niet zo eng als het klinkt. Het enige wat het echt betekent voor onze eenvoudige motorbesturingstoepassing is dat we een blokgolf met een bepaalde frequentie genereren, en dan veranderen we de duty cycle. De werkcyclus wordt gedefinieerd als de verhouding van de tijd dat de uitvoer een logische hoge is in vergelijking met de golfvormperiode. Je kunt dat vrij duidelijk zien in het bovenstaande diagram met de bovenste golfvorm bij 10% duty cycle, de middelste golfvorm bij 50% duty cycle en de onderste golfvorm bij 90% duty cycle. De stippellijn die op elke golfvorm wordt gelegd, vertegenwoordigt de equivalente gelijkspanning die door de motor wordt gezien. Aangezien de Arduino een ingebouwde PWM-mogelijkheid heeft, is het echt vrij eenvoudig om dit type DC-motorbesturing te genereren. Een ander voordeel van het gebruik van PWM is dat het helpt om de motor te houden van het slingerende opstarten dat kan gebeuren bij het gebruik van rechte gelijkstroom. Een nadeel van PWM is dat er soms een hoorbaar geluid van de motor is op de frequentie van de PWM.

Stap 2: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

De eerste afbeelding toont de Arduino-aansluitingen voor de schakelaars en de LM298-motorbesturingsmodule. Er zijn zwakke pull-up-weerstanden intern in de Arduino, dus er zijn geen pull-up-weerstanden nodig voor de schakelaars. De richtingschakelaar is een eenvoudige SPST-schakelaar (single pole single throw). De gas- en remschakelaars worden weergegeven als normaal open, kortstondige contactdrukknoppen.

De tweede afbeelding toont de Arduino-verbindingen voor de Bluetooth-module en de LM298-motorstuurprogrammamodule. De Bluetooth TXD-uitgang maakt rechtstreeks verbinding met de seriële ingang van de Arduino RX.

De derde foto is een L298N dual H-bridge module. De LM298-module heeft een ingebouwde 5 volt-regelaar die kan worden ingeschakeld door een jumper. We hebben +5 volt nodig voor de Arduino en Bluetooth, maar we willen +12 volt om de motor aan te drijven. In dit geval passen we de +12 volt toe op de “+12V power” ingang van de L298N en laten we de “5V enable” jumper zitten. Hierdoor kan de 5-volt regelaar uitgaan naar de "+5 power"-aansluiting op de module. Verbind die met de Arduino en de Bluetooth. Vergeet niet de massadraden voor de +12 ingang en de +5 uitgang aan te sluiten op de module “power GND”.

We willen dat de uitgangsspanning naar de motor varieert op basis van de PWM die door de Arduino wordt gegenereerd, in plaats van alleen volledig aan of volledig uit te zijn. Om dat te doen, verwijderen we de jumpers van "ENA" en "ENB" en verbinden we onze Arduino PWM-uitgang met "ENA" op de module. Houd er rekening mee dat de daadwerkelijke activeringspin degene is die zich het dichtst bij de rand van het bord bevindt (naast de "invoer" -pinnen). De achterste pin voor elke activering is +5 volt, dus we willen ervoor zorgen dat we daar geen verbinding mee maken.

De “IN1” en “IN2” pinnen op de module zijn verbonden met de respectievelijke Arduino pinnen. Die pinnen regelen de motorrichting en, ja, er is een goede reden om de Arduino ze te laten besturen in plaats van simpelweg een schakelaar op de module aan te sluiten. We zullen zien waarom in de softwarediscussie.

Stap 3: Bluetooth-module

Bluetooth-module
Bluetooth-module

De hier getoonde afbeelding is typerend voor de beschikbare Bluetooth-modules. Als u er een zoekt om te kopen, kunt u zoeken op de termen "HC-05" en HC-06". De verschillen tussen de twee zitten in de firmware en meestal in het aantal pinnen op het bord. De afbeelding hierboven is van een HC-06-module en wordt geleverd met vereenvoudigde firmware die alleen een zeer eenvoudige configuratie mogelijk maakt. Het is ook ingesteld als een "Slave" alleen Bluetooth-apparaat. In eenvoudige bewoordingen betekent dit dat het alleen kan reageren op opdrachten van een "Master" -apparaat en zelf geen opdrachten kan geven. De HC-05-module heeft meer configuratiemogelijkheden en kan worden ingesteld als een "Master" of een "Slave" -apparaat. De HC-05 heeft meestal zes pinnen in plaats van alleen de vier hierboven weergegeven voor de HC-06. De State-pin is niet echt belangrijk, maar de Key-pin (soms met andere namen zoals "EN") is vereist als u een configuratie wilt uitvoeren. Over het algemeen hebben de modules geen configuratie nodig als u akkoord gaat met de standaard baudrate van 9600 en het niet uitmaakt om een specifieke naam aan de module te geven. Ik heb verschillende projecten waar ik deze gebruik, dus ik vind het leuk om ze dienovereenkomstig te noemen.

Voor het configureren van de Bluetooth-modules moet u een interface naar een seriële RS-232-poort of een USB-poort kopen of bouwen. Ik zal in dit bericht niet bespreken hoe je er een kunt bouwen, maar je zou informatie op internet moeten kunnen vinden. Of koop gewoon een interface. De configuratiecommando's gebruiken AT-commando's zoals die vroeger werden gebruikt met telefoonmodems. Ik heb hier een gebruikershandleiding bijgevoegd die de AT-opdrachten voor elk moduletype bevat. Een ding om op te merken is dat de HC-06 commando's in HOOFDLETTERS vereist en dat de commandoreeks binnen 1 seconde moet worden voltooid. Dat betekent dat sommige van de langere strings voor zaken als het wijzigen van de baudrates moeten worden geknipt en geplakt in uw terminalprogramma of dat u tekstbestanden moet instellen om te verzenden. De HOOFDLETTERS-vereiste is alleen als u configuratieopdrachten probeert te verzenden. De reguliere communicatiemodus kan alle 8-bits gegevens accepteren.

Stap 4: Software

De software is vrij eenvoudig voor zowel de handmatige versie als de Bluetooth-versie. Om de Bluetooth-versie te selecteren, verwijdert u eenvoudig de "#define BT_Ctrl"-instructie.

Toen ik de PIC-code schreef, experimenteerde ik met de PWM-frequentie en kwam ik uiteindelijk uit op 500 Hz. Ik ontdekte dat als de frequentie te hoog was, de LM298N-module niet snel genoeg op de pulsen kon reageren. Dat betekende dat de uitgangsspanning niet lineair was en grote sprongen kon maken. De Arduino heeft ingebouwde PWM-commando's, maar u kunt alleen de duty-cycle variëren en niet de frequentie. Gelukkig is de frequentie ongeveer 490 Hz, dus dat komt dicht genoeg in de buurt van de 500 Hz die ik op de PIC heb gebruikt.

Een van de "kenmerken" van treingas is een gevoel van momentum voor acceleratie en remmen om te simuleren hoe een echte trein werkt. Om dat te bereiken, wordt een eenvoudige vertraging in de lus voor de handmatige versie van de software ingevoegd. Met de weergegeven waarde duurt het ongeveer 13 seconden om van 0 naar 12 volt te gaan of van 12 volt terug naar nul. De vertraging kan eenvoudig worden aangepast voor langere of kortere tijden. Het enige geval waarin momentum niet van kracht is, is wanneer de richtingsschakelaar wordt gewijzigd. Voor beveiligingsdoeleinden wordt de PWM-duty cycle onmiddellijk op 0% gezet wanneer deze schakelaar wordt gewijzigd. Dat maakt de richtingsschakelaar in feite ook dubbel als noodrem.

Om ervoor te zorgen dat de richtingsschakelaar onmiddellijk wordt afgehandeld, heb ik de code in een interrupt-handler geplaatst. Dat stelt ons ook in staat om de functie "onderbreken bij wijziging" te gebruiken, zodat het niet uitmaakt of de wijziging van laag naar hoog of van hoog naar laag is.

De Bluetooth-versie van de software gebruikt opdrachten van één letter om de functies vooruit, achteruit, remmen en gas te starten. In feite vervangen de ontvangen commando's de handmatige schakelaars, maar veroorzaken dezelfde reacties. De app die ik gebruik voor Bluetooth-bediening wordt door Next Prototypes "Bluetooth Serial Controller" genoemd. Hiermee kunt u een virtueel toetsenbord configureren en uw eigen opdrachtreeksen en namen voor elke toets instellen. Het stelt je ook in staat om een herhalingssnelheid in te stellen, dus ik stel de rem- en gasknoppen in op 50 ms om ongeveer 14 seconden momentum te geven. Ik heb de herhaalfunctie voor de knoppen Vooruit en Achteruit uitgeschakeld.

Dat was het voor dit bericht. Bekijk mijn andere Instructables. Als je geïnteresseerd bent in PIC-microcontrollerprojecten, bekijk dan mijn website op www.boomerrules.wordpress.com

Aanbevolen: