€14,95
lektor
664
*
*
SI
MAART/APRIL 2021 ELEKTORMAGAZINE.NL
6 S 19
1
ND
de t n me Aa ag sl
nr. 664 — maart/april 2021
Een heel nummer verzorgd door de gastredacteuren van
p. 10
1 0 + p r o j e c te n Rap
i d Pro t ot yping
de n e ie m g o O p k h n ol o te c
Voorbeeldcod
e
In deze editie
> Hello World van de Raspberry Pi Pico en RP2040
p. 16
p. 28
p. 40
> Een FPGA programmeren > Perfect parkeren met LiDAR > Viervoetige robots voor zelfbouw > RISC-V IoT-ontwikkeling in AWS > Van ontwerp naar product: de
Een upgrade voor uw JetBot Bouw zelf een GNSS referentie-station
SparkFun RTK Surveyor
> Ontwerpen met de SparkFun Artemis
Het ClockClock project
SparkFun À La Carte Printen ontwerpen en produceren
p. 62
De visie van een engineer Vraaggesprek met Nathan Seidle, oprichter van SparkFun
en veel meer
p. 6
Het Qwiic-ecosysteem Rapid Prototyping met I2C
p. 73
Word lid van de Elektor C mmunity Neem nu een
Een compleet web-archief t/m 1980! 6x Elektor Magazine (Print) 9x digitaal (PDF) inclusief Elektor Industry (EN) 10% korting in onze webshop,en exclusieve aanbiedingen Elektor’s jaarlijkse DVD-ROM
Ook verkrijgbaar
Het digitale G R E E N lidmaatschap! membership
G O LD membership
lidmaatschap!
Samen ontwikkelen met duizenden leden van het online LAB, met toegang tot meer dan 1000 Gerberfiles, en een directe lijn naar onze experts! Breng je eigen project tot publicatie of zelfs verkoop in onze shop
Toegang tot ons web-archief 10% korting in onze webshop 6x Elektor Magazine (PDF) Exclusieve aanbiedingen Toegang tot meer dan 1000 Gerberfiles
www.elektor.nl/member maart & april 2021 - Guest edited by
115
colofon Elektor Magazine guest-edited by
61e jaargang nr. 664, maart/april 2021 ISSN 2590-0765 Elektor is een uitgave van Elektor International Media B.V. Postbus 11, 6114 ZG Susteren, Nederland Tel.: +31 (0)46- 4389444 Het team: Internationaal hoofdredacteur: C.J. Abate Redactie: Jan Buiting, Eric Bogers Aan dit nummer werkte mee: Jens Nickel, Mathias Claussen, Megan Hemmings, Luc Lemmens, Chris McCarty, Juan Peña, Justin Rajewski, Rob Reynolds, Derek Runberg, Glenn Samala, Avra Saslow, Nathan Seidle, Alex Wende, Jelle Aarnoudse, Evelien Snel Vormgeving & Layout: Harmen Heida, Patrick Wielders Uitgever: Don Akkermans Klantenservice service@elektor.nl – Tel. 046-4389444 Elektor International Media B.V. legt gegevens vast voor de uitvoering van de (abonnements) overeenkomst. De door u verstrekte gegevens kunnen gebruikt worden om u te informeren over relevante diensten en producten. Stelt u daar geen prijs op, dan kunt u dit schriftelijk doorgeven aan de klantenservice. In overeenstemming met de Wet bescherming persoonsgegevens zijn de verwerkingen van persoonsgegevens aangemeld bij de toezichthouder, Autoriteit Persoonsgegevens.
Druk: Pijper Media, Groningen Distributie: Betapress, Gilze Advertenties Benelux Raoul Morreau raoul.morreau@elektor.com - Tel.: 06 3429 0177 Alle advertentiecontracten worden afgesloten conform de Regelen voor het Advertentiewezen gedeponeerd bij de rechtbanken in Nederland.
Auteursrecht Niets uit deze uitgave mag verveelvoudigd en/of openbaar gemaakt worden door middel van druk, fotokopie, microfilm of op welke wijze dan ook, zonder voorafgaande schriftelijke toestemming van de uitgever. De auteursrechtelijke bescherming van Elektor strekt zich mede uit tot de illustraties met inbegrip van de printed circuits, evenals de ontwerpen daarvoor. In verband met artikel 30 van de Rijksoctrooiwet mogen de in Elektor opgenomen schakelingen slechts voor particuliere of wetenschappelijke doeleinden vervaardigd worden en niet in of voor een bedrijf. Het toepassen van de schakelingen geschiedt buiten de verantwoordelijkheid van de uitgever. De uitgever is niet verplicht ongevraagd ingezonden bijdragen, die hij niet voor publicatie aanvaardt, terug te zenden. Indien de uitgever een ingezonden bijdrage voor publicatie aanvaardt, is hij gerechtigd deze op zijn kosten te (doen) bewerken. De uitgever is tevens gerechtigd een bijdrage te (doen) vertalen en voor haar andere uitgaven en activiteiten te gebruiken tegen de daarvoor bij de uitgever gebruikelijke vergoeding.
© Elektor International Media B.V. - 2021
voorwoord
&
Veel engineering-liefs uit de
EU VS
U hebt vast iets bijzonders opgemerkt aan dit nummer van Elektor Magazine. Inderdaad: onze vrienden bij SparkFun Electronics uit Colorado in de VS vormden de gastredactie voor deze uitgave. Waarom? Deze editie was al een paar jaar in de maak. Tijdens de Maker Faire van mei 2019 in San Mateo, Californië, ontmoetten Don Akkermans (CEO, Elektor) en C.J. Abate (Content Director, Elektor) Jahnell Pereira (CBDO, SparkFun) om een mogelijke samenwerkingen op het gebied van inhoud en producten te bespreken. Tijdens deze ontmoeting onder het genot van espresso ontdekten ze al snel dat de twee bedrijven veel gemeen hadden: getalenteerde interne engineeringteams, zeer populaire online elektronicawinkels, een serieuze passie voor leuke DHZ-elektronicaprojecten en een snelgroeiende community van leergierige engineers en makers. Gesprekken in de maanden na die eerste kennismaking resulteerden in vroege ideeën voor samenwerking die haast vanzelf groeiden van producten tot projecten tot artikelen en uiteindelijk een compleet Elektor Magazine. Nu, na maanden van engineering, redigeren en vertalen, hebt u het resultaat in handen! U ziet dat de wereldwijde engineering- en redactieteams van Elektor nauw hebben samengewerkt met SparkFun om de projecten, tutorials, interviews en content voor deze buitengewone editie te selecteren, voor te bereiden en te bewerken – slechts een van de vele verrassingen die we voor u in petto hebben nu Elektor 60 jaar bestaat. U zult ook merken dat ons e-commerceteam hard heeft gewerkt om u gemakkelijke, betaalbare toegang te bieden tot veel van de componenten en tools die u nodig hebt om uw innovatieve projecten dat ‘vonkje’ te geven – of u nu een maker bent in Amsterdam, een student in Parijs, een hardware-hacker in Cambridge of een professional in München. Veel plezier! C.J. Abate (Content Director, Elektor) & Jan Buiting (Managing Editor, Elektor Magazine)
Allereerst onze dank aan Elektor, dat we aan een nummer van dit geweldige magazine mochten meewerken! We zijn erg blij dat we via interviews, projecten en artikelen meer over SparkFun met de Elektor-community konden delen. We hebben met veel plezier samen met het professionele en buitengewoon getalenteerde Elektor-team aan dit nummer gewerkt. Onlangs vierde SparkFun Electronics zijn 18de verjaardag. Het waren 18 bewogen jaren die we in dit nummer graag met de Elektor-community delen. Achttien jaar geleden startte Nathan het bedrijf vanuit zijn studentenkamer aan de universiteit. SparkFun is in de loop der jaren gegroeid van één persoon naar meer dan 100, en van een studentenkamer tot een flink commercieel gebouw. Gedurende deze 18 jaar heeft SparkFun zich geconcentreerd op gemakkelijk spelen, prototypen en experimenteren met moderne elektronica – of het nu gaat om gebruiksvriendelijke breakout-boards, stap-voor-stap tutorials of het bouwen en delen van inspirerende projecten. In dit nummer leest u waar SparkFun vandaan komt en waar we naartoe gaan. Leer SparkFun kennen via interviews met ons beiden, en lees waar onze engineers hun inspiratie opdoen. Ons team deelt enkele favoriete projecten van de afgelopen jaren plus enkele gloednieuwe – zoals Rob’s viervoetige hond. Ontdek onze Artemis-, Qwiic- en MicroMod-lijnen en ook hoe we rapid prototyping, productontwikkeling en hobbyelektronica blijven ondersteunen. SparkFun Electronics is erg enthousiast over de samenwerking met Elektor; we hopen dat u van het resultaat zult genieten. Happy hacking! Nathan Seidle (oprichter, SparkFun) & Glenn Sanala CEO, SparkFun)
maart & april 2021 - Guest edited by
3
IN DIT NUMMER
61e jaargang – nr. 664 maart/april 2021
onder gastredactie van SparkFun (USA)
Bouw zelf een GNSS referentiestation 28 Rubrieken 55 Onder de motorkap SparkFun Inventor’s Kit 78 Onder de motorkap GreatScott!/Elektor zelfbouw LiPo Supercharger Kit 80 Retrotronica opmerkelijke elektronica uit SparkFun’s verleden 114 Hexadoku puzzelen voor elektronici
Achtergrond & info 6
SparkFun: de visie van een engineer vraaggesprek met Nathan Seidle, oprichter van SparkFun
10 Aan de slag met MicroMod Een modulair interface-ecosysteem dat microcontrollers verbindt met diverse periferie 20 Een FPGA programmeren ontwerpen op basis van een FPGA, en de fundamentele bouwstenen daarvoor 58 Productontwikkeling en nieuwe markten een vraaggesprek met Glenn Samala, CEO van SparkFun 62 Uw eigen printen met SparkFun À La Carte ontwerp printen op maat om de kloof tussen prototype en productie te overbruggen
4
lektor
maart & april 2021 - www.elektormagazine.nl
66 Ontwerpen met de SparkFun Artemis de eerste open source hardware RF-module met BLE en spraakherkenning 73 Rapid Prototyping met het Qwiic-ecosysteem meer dan 150 I2C-compatibele boards maken prototyping sneller en minder foutgevoelig 86 Error analysis: Reparatie van een ‘buried pad’ een lastige reparatieklus op de vingers gekeken 90 Van ontwerp naar product: de SparkFun RTK Surveyor het op de markt brengen van een geavanceerd elektronica- product 109 Jazeker, elektronica = leuk! elektronica-liefhebbers onder elkaar
Projecten 16 Een upgrade voor uw SparkFun JetBot hoe ik de functionaliteit van mijn JetBot (met de Jetson Nano van NVIDIA) heb uitgebreid 28 Bouw zelf een GNSS referentie-station een minicomputer verstuurt met behulp van een vaste antenne positiedata via het internet 40 Het ClockClock project bouw met het krachtige Alchitry AU FPGA-board een klok... die uit klokken bestaat
Aan de slag met
Het ClockClock project
40
10 Binnenkort
82 Perfect parkeren met LiDAR een ‘stop’licht voor de garage, met een SparkFun Redboard en enkele Qwiic-modules 92 Hello World van de Raspberry Pi Pico en RP2040 de eerste microcontroller en -chip van Raspberry Pi 98 Viervoetige robots voor zelfbouw uitbreidbare basisplatforms met ruimte voor servo’s, sensoren en microcontrollers 106 RISC-V IoT-ontwikkeling in AWS met FreeRTOS-bibliotheken Prototyping with I2C Has Never Been Easie r SparkFun‘s Qwiic Connect Ecosystem uses 4-pin JST connectors to quickly interface development boards with sensors, LCDs, relays and more.
no solderin g
23 HATs, Shields, & Carrier
polarized connector
daisy chain-able
22
Elektor mei/juni 2021 Het volgende nummer is zoals altijd tot aan de nok gevuld met zelfbouwprojecten, achtergrondinformatie en tips en trucs voor elektronici. Een greep uit de inhoud:
> 60 jaar Elektor > soldeerstation voor zelfbouw > warmtezoeker: de Seek Shot Pro nader bekeken > Java op de Raspberry Pi > objectgeoriënteerd programmeren – een inleiding > het Raspberry Pi Pico-board en de RP2040 > oplaadbare LiPo-batterijvoeding > de tijd bijhouden met een IoT-button > WiFi-schakelaar
23
Kits
Development Boards
Boards
30
Accessory Boards
45
10
Sensors
Connector Options
...en nog veel meer!
AND EVER GROWING
Breeze
More info, tutorials, or buy www.elektormagazine.com/qwiic
elektormagazine.com
–›|
Extra!
Make Prototyping a
Quickly connect sensors, boards and more with this ever-growing line of products. Add or change components as your project’s needs evolve - just plug in your new component and keep moving forward.
/p sters
76 Poster: het Qwiic-ecosysteem prototyping met I2C was nog nooit zo eenvoudig!
Elektor mei/juni 2021 verschijnt 6 mei 2021. Aankondigingen onder voorbehoud
104 Poster: MicroMod een modulair ecosysteem van verwisselbare processoren en carrierprinten 112 Een selectie uit de SparkFun-catalogus
maart & april 2021 - Guest edited by
5
regular title achtergrond
Aan de slag met Bekijk de poster op pagina 104 Nathan Seidle (SparkFun)
MicroMod is een compacte interface om een microcontroller aan te sluiten op diverse randapparatuur. Het MicroModsysteem kan worden beschouwd als een ‘brain’ (brein) dat in ‘carrier boards’ (dragerprinten) kan worden gestoken. Een MicroMod-processorprintje meet ongeveer 22 × 22 mm en kan in elke MicroMod-carrier (dragerprint) worden gestoken. Een schroefje houdt het processorboard op zijn plaats. De originele M.2-standaard [1] was ontworpen voor het verwisselen van periferie (de gebruiker kan een solid-state harddisk vervangen door een grotere), maar de MicroMod-standaard is ontworpen voor het verwisselen van controllers (de gebruiker kan beginnen met een krachtige processor en dan overstappen op een low-power controller om de levensduur van de batterij te verlengen).
Aanbevolen literatuur
Als u nog niet bekend bent met het MicroMod-ecosysteem, kunt u hier een overzicht vinden [2]. Er zijn ook tutorials over diverse specifieke onderwerpen: > Serial Peripheral Interface (SPI). SPI wordt vaak gebruikt om microcontrollers te verbinden met randapparatuur zoals sensoren, schuifregisters en SD-kaarten [3]. > Pulsbreedtemodulatie (PWM). Een inleiding tot het concept van pulsbreedtemodulatie [4]. > Logische niveaus. Het verschil tussen 3,3V- en 5V-apparaten en logische niveaus [5]. > I2C. Een inleiding tot I2C, een van de belangrijkste gebruikelijke embedded communicatieprotocollen [6].
Hoe werkt het?
De MicroMod-standaard maakt gebruik van de M.2-connector en -specificatie [7] om de keuzevrijheid in onderdelen te vergroten en de kosten van de connector te verlagen. Alle MicroMod-‘breinen’ hebben dezelfde pinning. Zo zitten de I2C-pennen van de MicroMod-ESP32 op dezelfde plaats als de I2C-pennen op de MicroMod-Artemis.
10
lektor
maart & april 2021 - www.elektormagazine.nl
De verschillende MicroMod-carriers geven de gebruiker toegang tot verschillende technologieën. Omdat de MicroMod-connector gestandaardiseerd is, kan de controller gemakkelijk en snel worden verwisseld, afhankelijk van uw wensen m.b.t. rekenkracht, stroomverbruik en draadloze connectiviteit. Een gebruiker kan bijvoorbeeld beginnen met de MicroMod-Artemis en een RFID-carrier. Maar later kan hij of zij tot het inzicht komen dat het project WiFi nodig heeft. Dan kan de gebruiker met behulp van de MicroMod-ESP32 meteen WiFi-mogelijkheden toevoegen zonder de onderliggende hardware te wijzigen. De MicroMod-interface is als volgt gedefinieerd: > SparkFun MicroMod Interface v1.0 – pinning [8] > SparkFun MicroMod Interface v1.0 – pinbeschrijvingen [9]
Hardware-overzicht
Welke connector en welke key gebruikt MicroMod?
A. MicroMod maakt gebruik van de bekende M.2-connector zoals weergegeven in figuur 1. Dit is dezelfde connector als op moderne moederborden en laptops. Wij adviseren de connector met een hoogte van 4,2 mm. TE levert de goed verkrijgbare 2199230-4 voor een redelijke prijs [10] (bij aankoop van 1000 stuks kost hij $0,56). U kunt ook de MicroMod DIY Carrier Kit bestellen die vijf connectoren, schroeven en steunen [11] bevat. De plastic ‘key’ op de M.2-connector kan op verschillende plaatsen worden aangebracht om te voorkomen dat een gebruiker een incompatibele kaart plaatst. De MicroMod-standaard werkt met de ‘E’-key, maar wijkt af van de M.2-standaard doordat het schroefgat 4 mm is verplaatst. De ‘E’-key is vrij gangbaar, dus een gebruiker zou
een M.2-compatibele WiFi-module kunnen plaatsen, maar omdat de schroefbevestiging niet is uitgelijnd, kan hij geen incompatibel apparaat in een MicroMod-carrier bevestigen.
Wat is een processorprint?
A: Zoals te zien is in figuur 2 meet elke processorprint ongeveer 22 × 22 mm en bevat hij een microcontroller of -processor. De pinnen van de processor gaan naar de rand van de print conform de MicroMod pinning-specificatie. Van elke processorprint wordt verwacht dat alleen de USB-lijnen D+ en D- nodig zijn voor het programmeren. Dat betekent dat bij een processor die geen ingebouwde USB-ondersteuning heeft, deze moet worden toegevoegd. Op de Artemis-processorprint is bijvoorbeeld een CH340E toegevoegd om seriële programmeerondersteuning te bieden. Van elke processorprint wordt bovendien verwacht dat er een statusLED aan boord is die niet naar de rand van deprint is gevoerd. Opmerking: in de MicroMod-specificatie is de positie van de schroef 4 mm vanuit het midden van de print naar rechts verplaatst. Zo wordt voorkomen dat allerlei apparaten die gebruik maken van de M.2-connector (zoals WiFi-kaarten, SSD’s, cellulaire modems enzovoort) en MicroMod-apparaten door elkaar worden gehaald. Hoewel een gebruiker een WiFi-kaart in een SparkFun-datalogger-carried zou kunnen plaatsen, lijnen de schroefgaten niet, zodat duidelijk is dat de apparaten niet bij elkaar passen. De MicroMod-specificatie biedt ruimte voor toekomtige grotere afmetingen, en gebruikers zijn welkom om hun eigen processorprinten te maken, maar let erop dat het gat voor de afstandsbus op de meeste carriers in overeenstemming met de 2222 MicroMod-key is geplaatst.
Wat is de pinning van de MicroMod?
A. De MicroMod-interface is als volgt gedefinieerd: > SparkFun MicroMod Interface v1.0 – pinning [8] > SparkFun MicroMod Interface v1.0 – pinbeschrijvingen [9]
Figuur 1. M.2-connectoraansluiting vooraanzicht (boven) en achteraanzicht (onder).
Niet alle pinnen hoeven aangesloten te zijn als de MicroMod-vormfactor wordt gebruikt. Zie de specifieke documentatie van uw processorprint voor meer informatie. De referentiegegevens staan online: > MicroMod General Pinout Table [12] > MicroMod General Pin Descriptions [13] Voor elke pen op de M.2-connector is een bepaalde functie gespecificeerd. Er zijn extra regels toegevoegd aan de MicroMod-specificatie om de compatibiliteit tussen de verschillende platforms te garanderen. Er worden maximaal 49 GPIO’s ondersteund. MicroMod richt zich over het algemeen op interfacetypen en -locaties. Als een carrier bijvoorbeeld PWM-mogelijkheden vereist, dan moet hij daarvoor gebruik maken van de pinnen 32 (PWM0) en 47 (PWM1), omdat die zeer waarschijnlijk PWM ondersteunen. Ondersteunde interfaces: > USB voor programmeren en serieel debuggen > 2× ‘dedicated’ analoog > 2× ‘dedicated’ PWM > 2× ‘dedicated’ digitale I/O > 12× GPIO > 2× I2C > 2× SPI > 2× UART > SDIO > USB-HOST > CAN > SWD > PDM / PCM / I2S > differentiële ADC 12 GPIO’s lijkt misschien niet veel, maar als alle andere interfaces zijn aangesloten (UART, SPI, I2C, PWM, ADC), dan moeten 12 GPIO’s toch wel voldoende zijn voor wat er dan nog overblijft.
Figuur 2. Elk processorboard volgt de ‘2222’-M.2standaard (totale afmeting 22 × 22 mm).
maart & april 2021 - Guest edited by
11
project
Een upgrade voor uw SparkFun JetBot hoe ik de functionaliteit van mijn JetBot (met de Jetson Nano van NVIDIA) heb uitgebreid
Derek Runberg (USA)
Elektronicakits moeten in eerste instantie zuinig zijn en zo eenvoudig mogelijk. Bij robotica betekent dat een kant-en-klaar chassis, dito voorbeeldcode en zelfs een handleiding om zo snel mogelijk iets aan de praat te krijgen. Een goede kit maakt dat mogelijk: geen steile leercurve en vooral een snel resultaat. Wij noemen dat “Snel van Nul naar Geweldig”.
16
lektor
maart & april 2021 - www.elektormagazine.nl
De SparkFun JetBot AI-kit is een voorbeeld van die aanpak. Onze versie van het open source-project JetBot, dat is opgezet door NVIDIA, was een samenwerking met NVIDIA om klanten die geen toegang hebben tot een 3D-printer de mogelijkheid te bieden om een voorbereide versie te kopen. Deze versie van de JetBot levert het materiaal om snel een tafelrobot te bouwen, inclusief het chassis en alle benodigde mechanische systemen, zoals op de kopfoto te zien is. De kit bevat ook de benodigde componenten om basale camera vision (CV) en machine learning (ML) zonder extra componenten te implementeren met behulp van de NVIDIA® Jetson NanoTM: geen franje, alleen wat noodzakelijk is. Met de SparkFun JetBot AI-kithoeft men niet op een 3D-printer te wachten en niet met vroege prototypes te klungelen. Vaak vragen mensen naar de schaalbaarheid van de JetBot: “Kan iemand hiermee beginnen en het dan opschalen tot een robotsysteem?” Het antwoord is: “Ja!” Het JetBot-systeem is ontworpen als een tafelrobot met relatief kleine, eenvoudige sensoren (afgezien van de camera). Maar het kan gemakkelijk worden aangepast en
Real-Time Kinematica (RTK) en gegist bestek
opgeschaald naar verschillende chassis, motoren en camera’s. Dat bleef voor mij tot nog toe theorie, dus ik besloot de mouwen op te stropen, er in te duiken en te kijken welke onderdelen zinvol waren om mijn JetBot op te leuken. Dit artikel beschrijft hoe ik dat deed en welke valkuilen ik tegenkwam bij het gebruik van de JetBot-kit als basis voor iets dat... geavanceerder leuker was.
Planning
Met mijn JetBot in de hand moest ik als volgende stap bij het aanpassen van de JetBot bepalen wat er beschikbaar was. Als ik bij de Jetson Nano van NVIDIA boards uit ons Qwiic-ecosysteem wilde gebruiken, moesten deze voor eenvoudige integratie in Python ondersteund worden (ik heb geen zin om I2C zelf in Python te programmeren). Ik ging naar SparkFun’s Github-repository voor de Qwiic_Py-bibliotheek en daar kon ik snel zien welke boards ik zou kunnen gebruiken. Ik vond in de diverse driver-directories twintig verschillende board-opties die ik kon integreren. Van die twintig gebruikt de JetBot er al twee: de Qwiic Motor Driver en het Qwiic OLED Display. Toen ik de lijst nader keek vroeg ik me af: “Wat is zinvol om aan mijn robot toe te voegen om hem naar een hoger niveau te tillen?” Na enig nadenken kwam ik uit op een drietal boards die de meeste mogelijkheden zouden bieden (figuur 1). 1. GPS-RTK-SMA ZED-F9P Breakout Bij high-end robotica denk ik meteen aan GPS. Zou het niet mooi zijn om robotica buitenshuis te doen en niet thuis op tafel? De ZED-F9P-module van u-blox bevat de nieuwste en mooiste technologie met alle toeters en bellen, inclusief de mogelijkheid om Real Time Kinematics (RTK) te doen om een nauwkeurigheid op millimeterniveau te halen bij gebruik van een basisstation. Voor mijn geestesoog zag de GPS al gebruikt worden voor navigatie en om op afstand cartografie te bedrijven. De combinatie van computervision en GPS zou het in kaart brengen van allerlei objecten, zoals rotsen, planten of zelfs mensen, mogelijk maken. 2. SparkFun Auto pHAT De SparkFun Auto pHAT is een Raspberry Pi pHAT (partial hat) die ook compatibel is met de NVIDIA Jetson. Hij heeft eigenlijk dezelfde motordriver-chip als de Qwiic Motor Driver die deel uitmaakt van de oorspronkelijke kit, maar voegt daar meer functionaliteit aan toe in de vorm van een pHAT in plaats van een reeks Qwiic-boards.
GPS-ontvangers die geschikt zijn voor RTK ontvangen de normale signalen van de wereldwijde satellietnavigatiesystemen (GNSS), plus een correctiesignaal om een positienauwkeurigheid van 1 cm te bereiken. Bovenop deze signalen ontvangt een RTK-ontvanger een RTCM-correctiestroom en berekent dan zijn locatie met een nauwkeurigheid van 1 cm in real time. De snelheid varieert van ontvanger tot ontvanger, maar de meeste zullen tenminste eenmaal per seconde een update leveren. Sommige ontvangers halen zelfs 20 keer per seconde. Navigatie door een dichtbevolkte stad, een korte tunnel of een parkeergarage kan een slechte signaalkwaliteit of volledig signaalverlies opleveren. Dat soort problemen zijn op te lossen met ‘gegist bestek’: daarbij wordt huidige positie bepaald door eerdere positiegegevens te combineren met de momentele snelheid en koers. 3D-versnellingssensoren (IMU’s) en afstandsgegevens van het voertuig (bijvoorbeeld wielomwentelingen en snelheidsmeters) kunnen worden gebruikt om de huidige positie van een voertuig voortdurend te berekenen wanneer GNSS-gegevens tijdelijk uitvallen.
De Auto pHAT bevat de motordriver, ingangen voor motor-encoders, een IMU en uitgangen voor servomotoren. Door de eenvoudige motorbesturing te vervangen door deze pHAT, kan ik niet alleen de motoren nauwkeuriger besturen, maar ook servo’s en de IMU gebruiken. 3. VL53L1X Time of Flight Distance Sensor De JetBot wordt geleverd met één sensor: een camera. Computer vision is erg krachtig, en het is verbazingwekkend wat de JetBot kan doen met alleen computer vision en wat ML. Maar door een paar extra sensoren toe te voegen kan de robot objecten identificeren en de afstand tot die objecten bepalen. Of, nog beter, interessante objecten detecteren buiten het gezichtsveld van de camera. Er zijn veel mogelijkheden voor afstandsmeting. Uiteindelijk heb ik gekozen voor een Time of Flight (ToF) sensor die goedkoop en zuinig is en een bereik heeft dat past bij de schaal van de JetBot. De keuze viel op de VL53L1X-afstandssensor vanwege het bereik van vier meter en het relatief smalle gezichtsveld. Ik hoopte dat ik de sensor zou kunnen uitlijnen met het middelpunt van het gezichtsveld van de robot en een ruwe afstand zou kunnen bepalen tot het object dat in het zicht van de camera was; gemakkelijker gezegd dan gedaan met een fish eye-lens.
2. SparkFun Auto pHAT
3. VL53L1X Time of Flight Distance Sensor
1. GPS-RTK-SMA ZED-F9P Breakout Figuur 1. De drie SparkFun-boards die ik heb gekozen om de JetBot uit te breiden.
maart & april 2021 - Guest edited by
17
training
een programmeren Gerelateerde producten Bent u op zoek naar de belangrijkste producten die in dit artikel genoemd zijn? Elektor en SparkFun staan voor u klaar!
Alchitry Au FPGA Development Board www.elektormagazine.nl/esfe-en-fpga1
Figuur 1. Het
Alchitr y Au
FPGA
t board. developmen
Justin Rajewski (Alchitry)
In deze tutorial zullen we de principes bespreken van het maken van een ontwerp voor een FPGA, plus de fundamentele bouwstenen die u daarbij kunt gebruiken. Op het eerste gezicht lijkt een FPGA ontmoedigend complex, maar een goede combinatie van gebruiksvriendelijke software, veelzijdige hardware en een paar handige voorbeelden geeft u een zetje in de goede richting. Even voor alle duidelijkheid voordat we beginnen: u programmeert geen FPGA’s [1]. We zeggen voor het gemak vaak dat we dat doen – omdat het aanvoelt als programmeren: u schrijft wat tekst, die tekst wordt vertaald in een binair bestand, en dat binaire bestand wordt in de FPGA geladen. Maar u schrijft geen programma. U creëert een schakeling. En u gebruikt geen programmeertaal om schakelingen te maken; u gebruikt een hardwarebeschrijvingstaal (HDL, Hardware Description Language) [2].
20
lektor
maart & april 2021 - www.elektormagazine.nl
Het is veel te ingewikkeld om grote en complexe ontwerpen als schema te tekenen; in plaats daarvan beschrijven we het gewenste gedrag van de schakeling, en de tools zoeken dan uit hoe dat in de praktijk geïmplementeerd kan worden. U moet altijd bij het creëren van een FPGA-schakeling in gedachten houden dat u hardware beschrijft en dat alles wat u schrijft uiteindelijk de vorm van een fysieke schakeling zal krijgen. Het is mogelijk om schakelingen te beschrijven die onmogelijk geïmplementeerd kunnen worden, of om iets te beschrijven dat eenvoudig lijkt maar waarvan de realisatie een enorme hoeveelheid resources zou vereisen. Daarom is het van cruciaal belang om een goed idee te hebben hoe de schakeling die u probeert te beschrijven, geïmplementeerd zou kunnen worden. Om deze tutorial te volgen, hebt u een Alchitry Au FPGA Development Board (figuur 1) en een ‘omkeerbare’ USB A-naar-C-kabel nodig.
De structuur van een ontwerp
HDL’s zijn meestal gebaseerd op het idee van een module. Een module is een deelschakeling (‘blok’) met een aantal in- en uitgangen plus wat logica om ze aan elkaar te plakken. Een module kan submodules bevatten of zelfstandig zijn – dit is vergelijkbaar met het opsplitsen van een programma in functies. Hoewel het mogelijk zou zijn om een compleet ontwerp in een enkele module uit te voeren, is het beter om kleinere modules te gebruiken
Listing 1.
die specifieke functies in uw ontwerp uitvoeren. Door uw project op te splitsen in modules, reduceert u de complexiteit van elk onderdeel waaraan u werkt. Sommige modules kunnen bijvoorbeeld algemene taken uitvoeren en steeds opnieuw worden gebruikt. Wanneer u met een ontwerp begint, is het handig om eerst een blokschema te maken waarin u de verschillende modules schetst en hoe ze met elkaar zijn verbonden. Dit helpt om de omvang van uw ontwerp te definiëren en op lgische manier op te splitsen.
Lucid
Voor de rest van deze tutorial gebruiken we Lucid [3]. Dit is een HDL die speciaal voor FPGA’s is gemaakt en veel van de valkuilen vermijdt die vaak voorkomen bij andere HDL’s zoals Verilog en VHDL (en geloof me, er zijn veel valkuilen). Lucid is een fantastisch uitgangspunt om met FPGA’s te gaan werken. Ik word vaak benaderd door mensen die bezorgd zijn dat ze vastlopen met Lucid of die om een andere reden liever met Verilog of VHDL willen werken. Als u net begint, is Lucid het beste startpunt. Daar leert u de juiste principes van hardware-ontwerp, voordat u zich een weg door onhandige andere HDL’s probeert te banen. En als u later naar iets anders wilt overschakelen, dan is dat niet zo moeilijk. Lucid is in grote lijnen gebaseerd op Verilog en Alchitry Labs kan Lucid voor u naar Verilog converteren als u uw superslimme modules ergens anders wilt gebruiken. Laten we nu eerst eens kijken waaruit een module eigenlijk bestaat.
Anatomie van een module
Wanneer u een ontwerp maakt, begint u met een module op het hoogste niveau (top level). Dit is de module waarvan de in- en uitgangen de ‘echte’ in- en uitgangen zijn op de aansluitingen van de FPGA. Voor elk Alchitry-project is dit cu_top.luc of au_top.luc, afhankelijk van het board (Cu of Au) dat u gebruikt. De initiële modules op het hoogste niveau voor beide boards zien er in wezen hetzelfde uit (listing 1). Het eerste deel van de module is de declaratie van de poorten. Hier declareert u de in- en uitgangen voor uw module. Dit zijn de signalen op het board zelf, aangezien het de top level-module betreft (listing 2). Het is u misschien opgevallen dat achter output led een getal tussen rechte haken staat. Dat geeft aan dat het hier niet om één maar om acht afzonderlijke uitgangen gaat die als een array zijn gegroepeerd. We gaan later nog nader op de array-syntax in. Een module kan ook een lijst met parameters hebben die kunnen worden gebruikt om de module aan te passen. Deze lijst is hier weggelaten en zou zinloos zijn op een top level-module, aangezien de parameters worden doorgegeven door de bovenliggende (parent) module die deze instantieert. De term instantiëren wordt gebruikt om te verwijzen naar het toevoegen van een module of andere resource aan uw ontwerp. Het betekent dat er een instantie van die module of andere resource wordt gemaakt. Wanneer u code schrijft, worden telkens wanneer u een functie aanroept, exact dezelfde instructies telkens weer gebruikt, ongeacht hoe vaak u die functie aanroept. Maar iedere keer dat u een module instantieert, wordt de complete schakeling waaruit de module bestaat, gedupliceerd. Als u dezelfde resources voor meerdere taken wilt hergebruiken, moet u er zelf achter proberen te komen hoe u dat voor elkaar kunt krijgen. Over instantiëren gesproken, meestal instantieert u alles wat uw module nodig heeft direct na de declaratie van de poorten. De eerste regel declareert een signaal met het sleutelwoord sig: sig rst; // reset signal
module au_top ( input clk, // 100MHz clock input rst_n, // reset button (active low) output led [8], // 8 user controllable LEDs input usb_rx, // USB->Serial input output usb_tx // USB->Serial output ) { sig rst; // reset signal .clk(clk) { // The reset conditioner is used to // synchronize the reset signal to // the FPGA clock. This ensures the // entire FPGA comes out of reset at // the same time. reset_conditioner reset_cond; } always { reset_cond.in = ~rst_n; // input raw inverted // reset signal rst = reset_cond.out; // conditioned reset led = 8h00; // turn LEDs off usb_tx = usb_rx; // echo the serial data } }
Listing 2.
input clk, // input rst_n, // output led [8], // input usb_rx, // output usb_tx //
100MHz clock reset button (active low) 8 user controllable LEDs USB->Serial input USB->Serial output
Signalen zijn geen geheugen. Ze slaan geen waarden op. U kunt ze als draden beschouwen. Een draad kan een waarde hebben, maar het is eigenlijk gewoon een verbinding van het ene punt naar het andere. In dit ontwerp gebruiken we het signaal rst als een plaatshouder (tijdelijke aanduiding) voor de uitvoer van de reset_conditioner module. Het instantiëren van deze module gebeurt in de volgende regels: .clk(clk) { // The reset conditioner is used to synchronize // the reset signal to the FPGA clock. This // ensures the entire FPGA comes out of reset // at the same time. reset_conditioner reset_cond; }
Om iets te instantiëren, gebruikt u eenvoudig de naam van de resource, gevolgd door de naam van deze specifieke instantie. Dus de regel reset_conditioner reset_cond; maakt een instantie van de reset_ conditioner module met de naam reset_cond. Het blok waarin deze instantiatie is ingebed, wordt een verbindingsblok (connection block) genoemd. Hiermee kunt u een ingang of parameter met een bepaalde naam van meerdere modules op hetzelfde signaal aansluiten.
maart & april 2021 - Guest edited by
21
project
Bouw zelf een
GNSS referentiestation
Nathan Seidle (SparkFun)
GNSS Real Time Kinematics (RTK) is iets bijzonders, maar de toegang tot correctiegegevens is nogal verwarrend. Dit artikel richt zich op het opzetten van een eigen vaste antenne op uw dak – of andere geschikte locatie – en het configureren van een minicomputer om de data via het internet beschikbaar te maken, waar die kan worden opgevraagd via WiFi, of gebruikelijker, vanaf een mobiele telefoon of modem. 28
lektor
In eerdere artikelen op de website van SparkFun heb ik al verteld hoe u RTCM-correctiegegevens publiekelijk toegankelijk kunt maken [1]. Ik heb ook besproken hoe u uw eigen tijdelijke basis kunt opzetten om RTCM-correctiegegevens via een telemetrie-radioverbinding te versturen [2], maar als u een kilometer of meer van uw basis verwijderd bent, wordt dat wel een uitdaging. Voordat u verder gaat moet u uit de voeten kunnen met U-Center [3], en moet u ook de “What is GPS RTK?” tutorial bekijken [4]. Beschouw dit artikel dan als het vervolg op “Setting up a Rover Base RTK System” [5]. We zullen het vaak over NTRIP hebben. Ik vond alle beschrijvingen en grafieken verwarrend, op het frustrerende af. NTRIP is niet meer dan een gelikte manier om correctiegegevens van een locatie via het internet naar de gebruiker (‘rover’) te krijgen. Zie het als een muziekstroom
maart & april 2021 - www.elektormagazine.nl
voor uw rover. Om uw rover te laten swingen, moet u hem voorzien van een constante muziektoevoer. Voor muziek zijn er een heleboel diensten (YouTube, Spotify, Pandora). Dat geldt ook voor RTCM (Trimble, Leica, Telit enzovoort). Al deze RTCM-diensten hebben verschillende tarieven en werken net anders genoeg om verwarrend te zijn. Maar het enige wat ik wil is mijn muziek! Dit artikel laat zien hoe u uw eigen GNSS-correctiegegevens (GNSS = Global Navigation Satellite System) kunt genereren en naar het internet kunt pushen, en dat helemaal gratis (hoogstens eventueel de kosten van een speciale mini-PC)! U zult uw eigen muziekstreaming-service zijn! Uw rover zal die correctiegegevens kunnen ontvangen via een mobiele telefoonverbinding. Ja, we zullen het hebben over NTRIPclients en -servers en mount points, maar
maakt u zich geen zorgen – het gaat gewoon om het doorgeven van bytes van de ene computer naar de andere via het internet.
Opzet van een vast basisstation – en lasers!
In de tutorial op [2] hebben we beschreven hoe u een tijdelijk basisstation kunt maken met de 1- tot 10-minuten survey-in methode. Die tijdelijke basis-methode is flexibel, maar niet zo nauwkeurig en de ervoor benodigde tijd kan sterk variëren. De ZED-F9P heeft een veel snellere manier om basiscorrecties te geven: als u de locatie van uw antenne kent, kunt u de coördinaten van de ontvanger instellen en worden meteen al RTCM-correcties gegeven. Het probleem is dan wat de locatie van de antenne is. Het is alsof u een soldeerbout nodig hebt om uw soldeerstation in elkaar te zetten. Waar beginnen we?
Waarom gebruik ik niet gewoon survey-in om de locatie van mijn antenne te bepalen?
A. Hoewel een survey-in eenvoudig kan worden opgezet en fijn is om in het veld de locatie van een basis vast te stellen, is dit niet aan te raden voor het verkrijgen van de vaste locatie van een statisch basisstation, omdat het minder nauwkeurig is. PPP (Precise Point Positioning) is daarentegen veel nauwkeuriger; dit wordt aanbevolen voor het verkrijgen van de positie van uw antenne. Het is een vergelijkbaar proces, maar daarbij worden laserstralen door satellieten gereflecteerd... Een groot probleem is dat de voorspelde banen van satellieten vaak een meter of
Figuur 1. De u-blox antenne op de rand van het SparkFun-dak.
U wilt niet dat uw antenne beweegt wanneer u de positie ervan precies hebt bepaald. Het valt te overwegen in een kwaliteitsantenne te investeren, maar wij hebben met goed gevolg de klassieke u-blox L1/L2-antenne [9] gebruikt. Monteer de antenne op een goed grondvlak en dan op een vast oppervlak met een onbelemmerd uitzicht op de
hemel – met niets in de buurt. We hebben de u-blox-antenne op de stalen daklijst van het SparkFun-gebouw aangebracht (figuur 1). Hoewel niet echt permanent, zijn de magneten op de u-blox-antenne sterk genoeg om auto-rijwind te weerstaan – en moeten dus krachtig genoeg zijn om de windsnelheden van 160+ km/u in Colorado te doorstaan. De u-blox ANN-MB-00 antenne heeft een 5 m lange kabel, maar die was niet lang genoeg om van het SparkFun-dak de ontvanger te bereiken, en daarom hebben we een 10 m lange SMA-verlengkabel gebruikt. De meeste L1/L2-antennes hebben weliswaar een ingebouwde versterker, maar elke meter verlenging en elke connector zal het GNSS-signaal iets verzwakken. Beperk het gebruik van connector-converters en gebruik een zo kort mogelijke verlengkabel. Als u een hoogwaardige antenne wilt gebruiken zonder magnetische voet, hebben we een geweldige manier bedacht om een stabiel montagepunt te creëren zonder dat u gaten in uw dak hoeft te boren! De meeste antennes hebben onderaan 5/8“ (ongeveer 16 mm) 11-TPI-schroefdraad (threads per inch). Gelukkig hebben ook keilbouten uit de bouwmarkt 11-TPI draad. Keilbouten zijn bedoeld voor het verbinden van muren en funderingen, maar gelukkig kunnen we ze ook gebruiken om een antenne te verankeren. Voor dit doel bestaan ook epoxy-alternatieven – gebruik wat u het beste uitkomt. Ik moest een antenne aan mijn dak bevestigen. Gelukkig had ik twee overgebleven betonstenen van een eerder gebouwd weerstation dat al lang was afgeschreven (figuur 2).
Figuur 2. Weerstation op een driepoot, gezekerd met zware stenen.
Figuur 3. Ja dit is een betonsteen. Niet lachen. Het werkt!
meer afwijken. De grondstations ‘kaatsen’ daarom een laserstraal tegen de afzonderlijke satellieten als ze overkomen, en gebruiken deze nieuwe gegevens om de werkelijke banen van de satellieten te berekenen. Zodra deze nieuwe efemeriden beschikbaar zijn, kan in combinatie met de ruwe gegevens van de ontvanger een betere fix worden berekend. Dit is de gedachte achter PPP, en het proces werkt als volgt: > installeer een antenne op een vaste locatie; > verzamel 24 uur lang ruwe GNSS-data van die antenne; > geef de ruwe data door aan een PPP-verwerkingscentrum; > bereken dan de positie van de gebruikte antenne uiterst nauwkeurig, om een ‘fixed mode’ op een ontvanger in te stellen. Over PPP zijn diverse uitstekende artikelen geschreven. We gaan er hier niet te diep op in; zie voor meer informatie: > Gary Miller’s geweldige “PPP HOWTO” [6]; > Emlid’s “PPP” [7]; > Suelynn Choy’s “GNSS PPP” [8].
Zet uw antenne goed vast
maart & april 2021 - Guest edited by
29
project
Het
project
Justin Rajewski (Alchitry) (USA)
Hoe laat is het? Tijd voor een fraai project van Alchitry, daar is het tijd voor! In dit artikel ga ik u vertellen hoe ik een “ClockClock” heb gebouwd met behulp van een Alchitry Au FPGA development board om alle motoren aan te sturen.
40
lektor
maart & april 2021 - www.elektormagazine.nl
Wat is een ClockClock? Niets anders dan een klok die is opgebouwd uit klokken! Het idee is om een heleboel analoge klokken te gebruiken om de tijd digitaal weer te geven. Een meta-klok eigenlijk. Maar laat ik beginnen met te zeggen dat het oorspronkelijke idee niet van mij is. Ik kwam dit idee een paar jaar geleden tegen en dacht altijd al dat het een mooi demo-project voor FPGA’s zou zijn omdat er zoveel stuursignalen nodig zijn. De originele klok van Humans since 1982 is te vinden op [1]. Er zijn een paar redenen waarom dit project geschikt is als FPGA-demoproject. Ten eerste zijn er 48 stappenmotoren voor nodig. Er zijn 24 “klokken” en elke klok heeft twee onafhankelijke wijzers. Bij gebruik van een standaard step/direction-driver zijn twee stuursignalen per motor nodig, dus in totaal 96 uitgangen. Om stroom te sparen wilde ik de drivers kunnen uitschakelen als de klok stilstaat. Daarvoor zijn nog vier extra uitgangen nodig: één voor elk “cijfer” van de klok. Ik wilde ook een Arduino gebruiken om de animaties te genereren, omdat het veel gemakkelijker zou zijn om dit in code te doen dan in hardware. Ik heb ervoor gekozen om I2C via de Alchitry Au Qwiic-connector te gebruiken voor de communicatie met de Arduino. Daarvoor waren twee extra I/O-pinnen nodig, zodat het totaal uitkwam op 102. En toevallig heeft het Alchitry Au-board precies 102 I/O-pinnen [2].
Dit project bewijst niet alleen dat een enorme hoeveelheid IO mogelijk is met FPGA’s, het maakt ook op een nogal ongewone manier gebruik van de Qwiic-connector op de FPGA. De FPGA werkt in dit project niet als een controller maar als een randapparaat. De Arduino is de controller die alle commando’s aan de FPGA geeft. Dat zou wel eens een heel praktische aanpak kunnen zijn voor veel projecten. Sommige taken zijn heel eenvoudig te realiseren in software, maar erg ingewikkeld in hardware. Het omgekeerde komt ook voor. Door een microcontroller en een FPGA met elkaar te koppelen kon ik het beste van beide werelden combineren. De Qwiic-connector op de beide kaarten maakt dat gemakkelijk.
Benodigde materialen, gereedschappen en hardware
Om dit project te kunnen bouwen, hebt u de materialen nodig die vermeld staan in het kader Gerelateerde producten. Maar misschien hebt u al het een en ander in huis. Lees dit artikel door en doe alles wat u nog nodig hebt in uw winkelwagen. Er zijn verschillende manieren om de onderdelen voor dit project te maken; wij hebben het volgende gebruikt: > 3D-printer; > Shapeoko XXL CNC-freesmachine; > lintzaag, schaafmachine en vlakschuurmachine voor houtbewerking. Daarnaast hebt u nodig: > 48× Valve Gear-stappenmotor [3]; > 48× StepStick-stappenmotor-drivermodule met koellichaam [4]; > 1× UBEC Adjustable BEC UBEC 2-6S voor Quadcopter RC Drone [5]; > 1× ingekapselde schakelende AC/DC-voeding [6].
Aanbevolen literatuur
Als u niet bekend bent met het Qwiic-systeem, raden wij u aan de documenten te lezen die u op www.sparkfun.com/qwiic vindt. Ook is het een goed idee om deze tutorials te bekijken voordat u verder gaat: > Programming an FPGA [7]. Introductie tot het werken met Field Programmable Gate Arrays. > How Does an FPGA Work [8]. Het hoe, wat en waarom van Field Programmable Gate Arrays (meestal tot FPGA’s afgekort). > First FPGA Project – Getting Fancy with PWM [9]. Een eerste project dat gebruik maakt van de FPGA van Alchitry om met PWM te stoeien.
Om te beginnen moest ik uitzoeken hoe ik mijn 24 klokjes zou gaan maken. Die moesten met twee stappenmotoren werken die twee concentrische uitgangsassen aandrijven. Als eerste ontdekte ik superkleine stappenmotoren bij Amazon. Ze waren niet groter dan 8 × 9,2 mm! Ik ontwierp een overbrenging met twee grote en twee kleine tandwielen die op de motorassen geklemd konden worden (figuur 1). Maar deze kleine motoren bleken niet sterk genoeg om de tandwielen aan te drijven. Ze leverden maar heel weinig koppel en als ik ze zo krachtig aanstuurde dat ze het wel konden, werden ze zó heet dat de 3D-geprinte PLA-onderdelen begonnen te smelten. Daarna heb ik een stel 28BYJ-48-stappenmotoren besteld. Die zijn een stuk groter, maar nog steeds klein genoeg voor de klok. Ze zijn al voorzien van een vertraging en leveren veel koppel. Dankzij de ingebouwde vertraging houden ze ook hun positie als ze niet worden aangestuurd. Ik heb een aandrijving ontworpen waarbij de grote wijzer rechtstreeks door de motoras werd aangedreven en de kleine wijzer werd aangedreven via een tandwiel, zodat de motor aan de zijkant kon worden geplaatst. De rest van het verhaal over de bouw van de ClockClock-hardware kan het beste worden verteld als fotostrip met commentaar. Veel plezier ermee!
FPGA
Bij elk FPGA-ontwerp is het belangrijk om in grote lijnen vast te leggen wat u wilt dat het moet gaan doen alvorens u begint. In dit geval moest ik iets maken dat commando’s zou accepteren via I2C en dat de motoren kon aansturen. De commando’s bestaan uit een aantal stappen en een waarde die aangeeft hoe lang er tussen de stappen moet worden gewacht. Oorspronkelijk wilde ik de besturing wat uitgebreider maken met versnellings- en vertragingstrajecten, maar dat bleek niet nodig en zou de coördinatie tussen de wijzers alleen maar ingewikkelder maken. Ik wilde ook een reeks commando’s in een wachtrij kunnen zetten. Dat zou de Qwiic-timing makkelijker maken, omdat de commando’s gewoon één voor één zouden kunnen worden uitgevoerd. Tenslotte moest ik nog uitvogelen wanneer de stap-commando’s moesten worden uitgevoerd en wanneer ik de motoren moest inen uitschakelen (dat laatste om energie te sparen).
Fysieke constructie
Over de praktische constructie wil ik kort zijn, want dit artikel gaat vooral over FPGA-ontwerpen en niet over houtbewerking. Volg deze links om de projectbestanden te downloaden: > CAD-bestand (Fusion 360) [10] > Alchitry (FPGA) [11] > Arduino-code (ZIP) [12].
Figuur 1. Miniatuur-stappenmotor van Amazon met twee grote en twee kleine tandwielen die op de assen geklemd zijn.
maart & april 2021 - Guest edited by
41
project
Perfect parkeren
met LiDAR Rob Reynolds (USA)
Afstandssensoren zijn geweldig! Meestal zijn ze de eerste stap van een maker bij het ontwikkelen van een autonome robot, maar wist u dat er nog veel meer toepassingen zijn? U kunt het zo gek niet bedenken. Van Halloween-rekwisieten tot irritante muziekinstrumenten en begeleidingssystemen voor parkeergarages, alles is mogelijk met afstandssensoren. Dus, laten we ze uit onze stoffige werkplaats halen, er de wijde wereld mee intrekken en er iets mee doen!
Eerst bedenken wat u wilt
Ik heb nog nooit een tennisbal of iets dergelijks aan het plafond van mijn garage gehangen om me precies te laten weten wanneer ik moet stoppen als ik mijn auto de garage binnenreed. Maar nu mijn kinderen de leeftijd hebben om te gaan rijden, wordt het daar misschien tijd voor. Nou speel ik geen tennis, maar ik speel wel met elektronica, dus ik ga gebruiken wat ik heb liggen. Nee, ik ga geen Raspberry Pi aan het plafond van mijn garage hangen. Mijn plan is om een afstandssensor te gebruiken en een klein stoplicht te maken. Als de auto de garage binnenkomt, gaat er een groene LED branden. Als de auto dichterbij komt, gaat er een gele LED branden en als de auto ver genoeg naar binnen is gekomen, ziet de bestuurder een rode LED. Als behuizing wil ik een eenvoudig stoplicht ontwerpen en 3D-printen, zodat het er ook nog goed uitziet!
Welke sensor is geschikt voor u?
Met zoveel afstandssensoren om uit te kiezen (figuur 1) kan het lastig zijn om de beste keuze te maken voor uw project. Er zijn verschillende overwegingen, zoals bereik, resolutie, interface, updatefrequentie en
82
lektor
maart & april 2021 - www.elektormagazine.nl
kosten. Soms moet u beslissen welke eigenschappen minder belangrijk zijn (moet er echt 635 keer per seconde een update komen?), en welke randvoorwaarden er gelden (“de leraar zei dat we I2C-componenten moesten gebruiken”). Mijn garage is ruim acht meter lang van de achterwand tot aan de garagedeur. Misschien zou het net lukken met een van onze XL-MaxSonar ultrasoon-units, die tot ongeveer 8 meter werken, maar ik ga bij dit project voor de TFMini – Micro LiDAR Module [1]. Ik gebruik die met het SparkFun Qwiic-pakket, want daar zit een boostboard bij. De TFMini werkt op 5 V, maar communiceert op 3,3 V. Maar het boost-board dat bij het Qwiic-pakket wordt geleverd, maakt dat er geen level shifter nodig is bij gebruik van een 5V-board, en ook geen dubbele voeding als ik zou kiezen voor een 3,3V-board. Door dit te combineren met het Sparkfun Redboard, dat een ingebouwde Qwiic-connector heeft, wordt het sensorgedeelte van dit project een gewone plug&play-oplossing (figuur 2). Voeg nog wat heldere LED’s, weerstanden en een voeding toe, en we kunnen beginnen!
Qwiic-systeem = snel en eenvoudig gebruik van I2C-componenten
Het Qwiic-systeem maakt de opbouw heel eenvoudig. De TFMini Qwiic-versie wordt geleverd met het boost-board en een paar kabels. De ene kabel gaat van de module naar het boost-board, en de andere van het boost-board naar de Qwiic-connector op het RedBoard. De groene, gele en rode LED zijn verbonden met pinnen 8, 9 en 10. Voor de code heb ik gewoon de sketch LidarTest.ino (die te vinden is op de TFMini Qwiic’s Hookup Guide webpagina [2]) in geringe mate veranderd. Listing 1 toont het aangepaste programma. Ik heb ook een 3D-ontwerp van een stoplicht gemaakt, en die kan, net als de Arduino-sketch, worden gedownload van mijn GitHub-repository [3]. WAARSCHUWING! Omdat de TFMini nogal wat stroom trekt en het SparkFun RedBoard een stroombegrenzing heeft, zal het niet lukken om het complete project te voeden via de voedingsrconnector op het RedBoard. Dan blijft de groene LED branden en de chauffeur, die helemaal vertrouwt op dit mooie nieuwe project, knalt keihard tegen de muur. Voeden via de microUSB-aansluiting werkt wel zonder problemen. Dus ook al lonkt die voedingsconnector op het board, laat u daar niet door verleiden! Dat bespaart u een hoop ellende.
Nu is het uw beurt!
Dit project is heel gemakkelijk te bouwen, maar u kunt ook verder gaan! U hebt de code, u hebt de .STL-bestanden [3] en gebruik die als uitgangspunt. Er zijn allerlei mogelijkheden voor uitbreiding: > voeg wat knoppen toe om de optimale remafstand gemakkelijker in te stellen; > ontwerp en print een betere behuizing; > gebruik meer LED’s om het stoplicht beter zichtbaar te maken. Misschien kunt u zelfs het RedBoard omruilen voor een Raspberry Pi en dit project in Python programmeren, waarbij via een display meer visuele feedback mogelijk is. Biedt het gebruik van een enkelkaartcomputer zoals de Raspberry Pi bij dit project enig voordeel ten opzichte van een microcontroller? Absoluut niet. Maar waarom zou u een project simpel houden als u het ook kunt overdrijven? Happy hacking, mensen! 200698-04
[vervolg op volgende pagina]
Distance Sensor Comparison Effective Range
Sensor Cost
Current Draw
Interface Options
Sample Rate
Figuur 2. De elektronica en de 3D-geprinte behuizing voor het project ‘Perfect Parkeren met Lidar’.
Resolution
Lidar
LED
VCSEL
Ultrasonic
Figuur 1. Om de juiste afstandssensor te kiezen voor uw toepassing, moet u een afweging maken tussen de beschikbare technologieën en uw ontwerpdoel(en).
maart & april 2021 - Guest edited by
83
project
Viervoetige robots voor zelfbouw Figuur 1. Bots in het wild.
Rob Reynolds (USA)
Natuurlijk wilt u ook een viervoetige robot bouwen! We laten hier zien hoe u twee basisplatforms kunt bouwen die elk meerdere uitsparingen hebben voor het monteren van servo’s, sensoren en microcontrollers. Ik weet niet of ik voor alle makers kan spreken, maar ik denk dat toen we in onze kindertijd aan robots dachten, we tweevoeters voor ogen hadden met interactieve vaardigheden die we nu AI zouden noemen, en misschien zelfs met alle mooie fysieke mogelijkheden van de mens. Maar dat waren dromen, of creaties in films of in onze gedachten. Wezens die tot leven werden gebracht door mensen in metalen kostuums, of verborgen poppenspelers, of genieën zoals Ray Harryhausen en zijn robot-uil Bubo uit Clash of the Titans. U kunt zich wellicht voorstellen dat ik nu als volwassene verbaasd en teleurgesteld ben dat mijn huishoudrobots een stofzuiger en een ‘robot pâtissier’ zijn, en die laatste is eigenlijk gewoon een keukenmachine die helemaal
98
lektor
niks robotachtigs doet. Het lijkt er dan ook op dat ik maar één optie heb: ik zal mijn eigen robots moeten maken (figuur 1).
Het ontwerp
Een van mijn favoriete dingen bij het creëren van zoiets als een robot – of, eerlijk gezegd, elk project – is het begin. Op dat moment is alles nog mogelijk. In Stephen Sondheim’s musical “Sunday in the Park with George” zegt het personage George terwijl hij zich zijn grootvader, kunstenaar George Seurat, herinnert: “Wit. Een lege pagina, of een leeg doek. Zijn favoriet. Dan is nog alles mogelijk!” Misschien weet ik gewoon niet genoeg (en hopelijk ook nooit zal weten) om te weten wat niet mogelijk zou moeten zijn, zodat in mijn
maart & april 2021 - www.elektormagazine.nl
gedachten alles mogelijk is. Hoe moet mijn robot er dus uit zien? Voor de ‘wow-factor’ moet het misschien een tweevoeter-robot met natuurlijke vormen zijn, zoals die in de film I, Robot. Maar als ik iets wil dat zich gemakkelijk in mijn huis kan bewegen en met mij of zijn omgeving kan communiceren, dan is een robot op vier wielen waarschijnlijk de eenvoudigste oplossing. Maar daarmee keren we in principe weer terug naar de robotstofzuiger. Ik zoek de gulden middenweg: een beetje praktisch, maar toch indrukwekkend genoeg om mensen twee keer te laten kijken. Ik wilde er ook zeker van zijn dat ik het in de loop van de tijd zou kunnen aanpassen en verbeteren. Uiteindelijk heb ik besloten om voor een viervoeter te gaan. Voor inspiratie hoef ik niet verder te kijken dan Boston Dynamics en hun werk met viervoeters. Van Big Dog uit 2005, groot en onhandig uitziend en over een open veld waggelend, tot Spot uit 2018, gestroomlijnd en wendbaar, deuren openend en dansend op Uptown Funk. Dat is een prachtig voorbeeld van vooruitgang
en iteratie in de tijd. Voor mijn viervoeter wilde ik een basisplatform maken waarop ik kon uitbreiden, misschien zelfs met verwisselbare modules. Ik speelde met verschillende ontwerpen en configuraties, en uiteindelijk heb ik me op twee verschillende ontwerpen gestort. Als u ze nu bekijkt, is het heel duidelijk dat de ene geïnspireerd is door Big Dog, en de andere door Spot. Ze hebben verschillende mogelijkheden, maar beide moeten kunnen worden uitgebreid. Ik ben eerst begonnen met het ontwerpen van de kleinere en slanke Spot-achtige robot. Met een idee van de mechanica die ik wilde gebruiken, tekende ik een serie strakke rechte lijnen, resulterend in oninteressante onderdelen. Maar toen ik iets meer nadacht over de Spot van Boston Dynamics, besefte ik dat in dit geval de functie de vorm kon volgen. Ik kon me rondingen veroorloven om deze bot er beter uit te laten zien. Of dat gelukt is weet ik niet; in elk geval is hij wat ronder en structureel wat minder stabiel. Ik ben er denk ik wel in geslaagd hem er minder steriel uit te laten zien. Daarna ben ik begonnen met de tweede robot, de meer industrieel uitziende Big Dog-geïnspireerde robot. Na enkele uren ontwerpwerk kwam het bij me op dat ik waarschijnlijk het wiel niet opnieuw hoefde uit te vinden. En
inderdaad bleken er enkele ontwerpen te zijn die ik kon gebruiken, of op zijn minst als uitgangspunt kon nemen. Ik vond uiteindelijk een geweldig ontwerp van Technovation op Instructables [1]. Beide platforms hebben meerdere uitsparingen voor de montage van servo’s, het toevoegen van sensoren en het plaatsen van de microcontroller. Ik ben van plan om de SparkFun Redboard Artemis te gebruiken, die de bekende footprint van de Arduino Uno heeft. De Redboard Artemis biedt meer geheugen en snelheid dan de Uno en heeft BLE aan boord, en door deze footprint te gebruiken kan ik eenvoudig uitbreiden naar de SparkFun Artemis ATP als ik meer pinnen nodig heb, want ook die heeft dezelfde footprint. Daarnaast gebruik ik het SparkFun Wireless Motor Driver Shield.
De robotbenen van de viervoeter
Voor de benen heb ik voor elke robot een andere keus gemaakt. Voor de kleinere robot – laten we die Bluesette noemen – heb ik een vijfarmige hefconstructie gebruikt. Dat is misschien niet de ideale constructie voor een viervoeter, zeker niet als die gebruikt wordt met servomotoren, maar de moeite waard om mee te experimenteren om kennis
en inzicht in beweging en Inverse Kinematics op te doen. De vijfarmige hefconstructie is een mechanisme met twee vrijheidsgraden waarbij alle vijf de armen tot een lus zijn gekoppeld (figuur 2). Dit mechanisme regelt de x- en y-coördinaten van gewricht D, het eindpunt (of in ons geval de robotvoet) door gelijktijdig de hoeken θ 1 en θ 2 aan te passen en zo de hoek van de armen B2 en B5 te regelen. Door het eindpunt van elke arm langs een elliptisch pad te bewegen, kan de robot naar voren en naar achteren lopen, zijn hoogte aanpassen en zelfs in een cirkel draaien. Zoals ik al zei is dit voor een viervoeter met servomotoren misschien niet de beste manier van voortbewegen, maar als je een set van acht krachtige borstelloze motoren gebruikt, kan deze opstelling heel effectief zijn. Een mooi voorbeeld daarvan is het Stanford Doggo Project[2]. Met de snelheid, het vermogen en de besturing van de borstelloze motoren kan deze kleine viervoeter een meter hoog springen en zelfs een salto achterover maken (figuur 3). Mijn grotere en grovere robot, die ik Big Red heb genoemd, maakt gebruik van een meer gebruikelijk mechanisme voor viervoeters, bekend als de seriële manipulator. Dit is een mechanisme waarbij elk gewricht zijn eigen motor heeft, van de basis tot de eindactu-
Figuur 3. Beide systemen gebruiken twee servo’s om de beenpositie te besturen, maar op heel verschillende manieren.
Figuur 2. Vijf-armige mechanismen.
maart & april 2021 - Guest edited by
99
EENVOUDIGE EN SNELLE PROTOTYPING Van een berg onderdelen tot een afgewerkt product: SparkFun ondersteunt u bij uw snelle prototyping. e vierpolig eld ij z k n a kopp iger d envoud rden ge e o w n e n r e e n snell dere s kun we of an totyping ntwikkelboard o u r ie p n t l k e a a eo simp QWIIC m toren waarme er. Voeg e m c n e e n JST-con en, LCD’s, relais t toe. c sor w proje u aan sen tn a a n akt projec nte a e m n o n u p F m co n Spark e een ductlijn va halverweg ro t a -p a t D s O in ier- of M en stelt u wissel carr De MICRO r ig e d V u . o n v e n ig e er z e ften zond liteit te wij e upgrades a o n h e io t b c n w fu elang u project de zijn. n alnaarg te n ri rp de nodig o o s c e d in proces ijzigingen dat veel w
Met SparkFun À La Carte (ALC) kunt u printen op maat ontwerpen om de kloof tussen prototypen en productie te overbruggen! ALC stelt uw print samen op basis van de componenten die u kiest, waardoor iedereen precies kan samenstellen wat nodig is.
BEZOEK VOOR MEER INFORMATIE www.sparkfun.com/qwiic www.sparkfun.com/micromod www.alc.sparkfun.com 116
lektor
maart & april 2021 - www.elektormagazine.nl