MaqueenPlus

Uit RobotMC.be
Versie door Jsuijs (overleg | bijdragen) op 19 dec 2020 om 20:32
Ga naar: navigatie, zoeken

micro:Maqueen Plus

Maqueen Plus, met voorop het slot voor de BBC micro:bit

De Maqueen Plus (of eigenlijk micro:Maqueen Plus) is een compacte robot en de opvolger van de Maqueen (die nu verder door het leven gaat als Maqueen Lite). Beide zijn bedoeld als aanvulling op de BBC micro:bit, een compact ARM bordje voor STEM onderwijs.

De Maqueen Plus is op een aantal punten verbeterd, waarvan de wiel-encoders voor mij het belangrijkst zijn. Daarnaast heeft de Maqueen Plus 6 lijnsensoren, die het mogelijk maken om het labyrinth op te lossen. Positief is ook dat de batterijen vervangen door een accu, die in de robot opgeladen kan worden via de USB-poort.

Kortom, een compacte robot met potentie!

Opties, opties, opties

De MaqueenPlus is bedoeld als 'add on' voor de BBC micro:bit. Dus over het algemeen zal deze robot gebruikt worden MET de micro:bit. De officieel ondersteunde talen voor de micro:bit zijn MakeCode and Python. Daarnaast beschrijft Adafruit hoe de de micro:bit met de Arduino omgeving kunt programmeren.

Het grootste deel van de functies van de Maqueen worden bestuurd door de eigen processor, die als i2c slave benaderbaar is door de micro:bit. De interface is niet expliciet gedocumenteerd, maar wordt door DfRobot toegelicht aan de hand van voorbeelden voor Python en de Arduino library.

Het grootste deel van de documentatie van de fabrikant is gericht op de grafische omgeving MindPlus, als alternatief (?) voor MakeCode.

Dit artikel gaat verder niet in op de grafische omgeving, maar richt zich op 2 opties:

  • Aansturen van de MaqueenPlus via i2c.
  • Direct programmeren van de controller van de MaqueenPlus.

Aansturing via i2c

Programmeren van de Maqueen is programmeren van de micro:bit, waarbij de fabrikant DFRobot zich vooral heeft gericht op het grafisch programmeren van de robot. Naar verluid is de robot ook te besturen met MicroPython - iets wat voor gevorderden veel interessanter is - maar veel valt daar niet over te vinden, anders dan de verwijzing naar een specifieke branche van de Python editor mu. Losse libraries of code voor MicroPython lijken niet beschikbaar.

Enig zoeken leert dat de DFRobot de editor Mu heeft voorzien van 11 voorbeelden en ieder van de voorbeelden communiceert via i2c met de robot. De voorbeelden tonen 9 verschillende interacties met de Maqueen en geven zo enig inzicht in de API. Op Github is ook een Arduino-library beschikbaar die nog wat extra mogelijkheden laat zien. Al met al summier, maar voldoende om mee te starten.

API

De Maqueen Plus heeft intern minimaal 60 register van 8 bits. Deze registers vormen de API en zijn via I2C te lezen en te schrijven. Via de voorbeelden en testen is de volgende informatie achterhaald:

< invoegen: register beschrijving >

De functie van een groot deel van de registers is nog niet bekend. En ook bestaat het vermoeden dat ook registers boven 60 (na de versie-string) een functie hebben. Het heeft er alle schijn van dat DFRobot een mooi, elegant robotje heeft gemaakt, maar verzuimd heeft dit te documenteren voor gebruikers buiten de STEM doelgroep.

Direct programmeren van de MaqueenPlus

De robot is voorzien van een STM32F103C8T6, de 32-bit ARM processor van de bekende 'blue pill'. Naast het linker wiel kan een header worden gesoldeerd en de contacten zijn gelabeld G-R-C-V-D. Dit blijkt een SWD programmeer-aansluiting te zijn met de volgende aansluitingen:

  • D - SW_Data
  • V - 3.3V
  • C - SW_CLock
  • R - Reset
  • G - Ground

DFRobot doet geen moeite om zaken ontoegankelijk te maken! En in de hoop dat de firmware uit te lezen is, wordt een ST-Link aangesloten. Helaas... blijkt dat niet het geval te zijn en door een foutje wis ik de firmware en heb ik een onbruikbare robot...

Maar... ieder nadeel heeft z'n voordeel. Ik heb een leuk, klein robotje met potentie. De robot is voorzien van een bekende processor en de opzet lijkt recht-toe recht-aan. Hoe moeilijk kan het zijn om uit te zoeken hoe de robot is opgebouwd en zelf een programmatje te schrijven om de hardware aan te sturen?

Niet zo moeilijk, blijkt...

Hardware - de inventarisatie

Lijnsensoren

De Maqueen Plus heeft 6 lijnsensoren en dat is een goed startpunt. Ieder van deze sensoren heeft 4 aansluitingen (LED en foto-transistor) en daarvan hangen er 2 aan de voeding. De andere twee zijn met weerstanden van resp. 220 Ohm en 4.7 kOhm verbonden naar massa. Typische waarden voor resp. de led en de foto-transistor. En dat wordt bevestigd doordat de van de pin, die via 4k7 met massa is verbonden, ook een printspoor wegloopt. Met een multimeter wordt vastgesteld dat ieder van lijnsensoren is verbonden met een pin van de processor, allemaal analoge ingangen.

Leds

Ieder van de lijnsensoren is voorzien van een blauwe leddie oplicht als de sensor een reflectie (wit) ziet. Er blijkt geen connectie tussen deze leds en de lijnsensoren. En dat stemt overeen met het gedrag: sinds de firmware is gewist, lichten de LEDs niet meer op.

Bestudering van de print leert dat iedere led is verbonden met de voeding. De andere aansluiting is verbonden met een weerstand van 2 kOhm en van die weerstand loopt een baantje weg. Met de multimeter wordt vastgesteld dat ieder van die leds is verbonden met een pin van de processor.

De Maqueen heeft ook twee grote, 8mm RGB leds. Deze blijken op dezelfde manier aangesloten: een gemeenschappelijke pin aan de voeding en de overige pinnen via een weerstand (330 Ohm in dit geval) verbonden met de processor.

Op vergelijkbare manier worden de pinnen bepaald van de calc-switch en de drie servo-pinnen.

De Maqueen Plus heeft ook 3 I2C connectoren. Het blijkt dat de SCL en SDA pinnen hiervan parallel staan en verbonden zijn met de processor. Waarschijnlijk zijn deze pinnen ook verbonden met de BBC micro:bit connector, maar dat is nu niet relevant...

Motors en encoders

Vlak naast de motoren zitten 2 8-pin chipjes met de markering 75V18. Dit lijkt de motor-controller en enig zoekwerk levert de datasheet op van de XY-75V18, een h-brug die maximaal 1.5A kan leveren. De datasheet is grotendeels in het Chinees, maar de pin-out en waarheidstabel geven voldoende informatie. De twee input-pinnen van de chips zijn verbonden met de processor, op 4 pinnen die PWM ondersteunen. De motoren kunnen dus hard gestuurd worden! Onder de magneten op de motor-as zitten - per motor - 2 chips met 3 pinnen en de markering 6102. Dit blijkt de Cross chip CC6102TO, een hall effect switch volgens de Chinese datasheet (met dank aan Google Translate). Deze vier sensoren zijn aangesloten op de processor, op pinnen van timer 2 en 3. De encoders kunnen dus door de timers worden uitgelezen.

Hardware - de aansturing

Voorgaande zoektocht heeft de gebruikte pinnen opgeleverd. Alle pinnen van de processor blijken in gebruik te zijn, op 3 na. En de pinnen voor de motoren (aansturing en encoders) zijn zo gekozen dat optimaal gebruikt gemaakt kan worden van de 3 timers.

Het enige wat 'ontbreekt' is een seriële poort. Niet nodig als je de oorspronkelijke firmware gebruikt, maar wel erg handig als je zelf aan de slag gaat. Gelukkig zijn er twee opties om een serial port te activeren: op de pinnen van i2c of op pinnen S0 en S1, bedoeld voor de servo. Beide zijn getest en blijken te werken.

Met deze informatie kunnen alle features van de Maqueen Plus worden gebruikt. Een voorbeeld hiervan is te vinden op: https://github.com/jsuijs/ArduinoProjects/tree/master/MaqueenPlusDemo

Features:

  • Naar keuze kan USART1 (S0/S1) of USART3 (I2C connector) worden gebruikt.
  • Een functie om de motoren aan te sturen (pwm door timer 1).
  • Een functie om de encoders uit te lezen (die door de timers 2 en 3 worden gevolgd).
  • Een functie om de beide RGB leds aan te sturen.
  • Een functie om de individuele lijnsensoren analoog uit te lezen.

De code is (nog) niet compatible met de originele firmware. Zo is de Maqueen geen I2C slave, worden de 5 leds bij de lijnsensoren niet aangestuurd en werkt kalibratie van de lijnsensoren niet. Maar de basis is gelegd en er lijken geen opstakels om dit toe te voegen...