Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Onderdelen en benodigdheden

Arduino 101 1
WIZnet WIZ750SR 1
Android-apparaat 1
Robotarm (elke andere robotarm kan, maar code moet misschien aangepast worden) 1
Metal Gear Micro Servo 4

Apps en online diensten

  • Arduino IDE
  • WIZnet S2E Configuration Tool
  • Android Studio

Over dit project

Inleiding

Ik hou van robotarmen. Ik vind het leuk dat je met enkele simpele mechanische onderdelen, een paar servos of motoren en goede software een apparaat kunt maken dat niet alleen spectaculair en leuk is, maar ook echt nuttig. Ik wilde er al lang een bouwen sinds ik een robotica-cursus volgde die ik erg leuk vond.

Je kunt er veel van leren als je een robotarm bouwt, dus ik denk dat dit een geweldig project voor gevorderden is om je kennis in robotica te verdiepen. Laten we beginnen!

Robotarm

Je kunt robotarmen kopen vanaf ongeveer $20. Voor experimenteren wilde ik beginnen met een goedkope. Later bouw of koop ik een serieuzere, maar voor nu werk ik met deze $25 DIY robotarm van Banggood.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Dit is een 4DoF (graden van vrijheid) robotarm, waar 3 servos voor beweging gebruikt worden en één voor de effector (ik noem het greifer in het project). Dit betekent dat de greifer in elke positie in een specifiek gebied verplaatst kan worden, maar de hoeken niet veranderd kunnen worden. Dit is een significante beperking, maar voor nu ok en nog steeds goed voor veel dingen.

De DIY-kit wordt geleverd met 4 servos, dus je hebt eigenlijk elk component om de robotarm te bouwen behalve een controller. Deze servos zijn niet slecht, maar ik prefereerde deze:

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Deze servos zijn sneller dan de blauwe en gebruiken metalen tandwielen in plaats van plastic.

De robotonderdelen kwamen in 4 plastic velletjes. Je moet de onderdelen uit deze vellen halen.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

De robotarm-kit bestaat uit een hoop onderdelen. Ik raad je aan de volgende video te bekijken. In deze video bouwt een Russische vent hetzelfde type robotarm. Het bouwen begint op 7:43.

Ik kreeg een link op de verpakking over hoe de robotarm te bouwen, maar die was erg lage kwaliteit in zowel afbeeldingen als instructies. De video is veel beter. Misschien kun je zelf uitvinden wat wat is, maar dan zit je in een bijna oneindige lus van monteren, demonteren, opnieuw monteren.

Wees heel heel voorzichtig bij het plaatsen van de servos. Dit ontwerp met dit soort plastic breekt heel snel als je de schroeven aandraait. De optimale vastheid van de schroeven is ook belangrijk op enkele andere onderdelen. Maak ze te vast en je kunt de segmenten van de robotarm niet meer met de servos bewegen.

Na wat bouwen eindig je met je eigen robotarm.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

De positioneringsservos hebben een lang genoeg kabel, maar de greifer heeft een veel langere nodig. Ik haalde die servo uit elkaar, desoldeerde de oude kabel en gebruikte een kabel die tenminste twee keer zo lang was.

Brein

Oké, de robotarm is klaar, maar je wilt hem waarschijnlijk op een of andere manier besturen. Ik had een microcontroller nodig en koos mijn Arduino 101.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Het is het enige officiële Arduino-bord dat een Intel-microcontroller gebruikt (Intel Curie). Het heeft een ingebouwde gyroscoop en versnellingsmeter. Het heeft ook Bluetooth, wat de mogelijkheid openhoudt om de robot in de toekomst via BLE te besturen. Een ander nuttig kenmerk is hoe de seriële communicatie werkt. In tegenstelling tot de meeste Arduinos zijn de USB-seriële en de UART op pin 1 en 0 (TX en RX) niet hetzelfde. Het heeft voordelen zoals: ik hoef geen andere communicatieschakelingen van pin 0 en 1 los te koppelen als ik de Arduino herprogrameer. Het is ook handig voor debug-doeleinden.

Als je de USB-poort seriële wilt gebruiken, gebruik je 'Serial'; als je de GPIO0 en GPIO1 pinnen wilt gebruiken, heb je 'Serial1'.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

De Arduino 101 heeft 4 PWM-capable GPIO's (GPIO3, GPIO5, GPIO6 en GPIO9) en ik gebruikte ze allemaal om de servos te besturen.

Communicatie

Mijn robotarm kan via seriële (Serial1) bestuurd worden. Ik gebruikte mijn nieuwste communicatiemodule, de WIZ750SR.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Dit is een kleine Ethernet-module met een Cortex-M0 MCU. In zijn basisfunctionaliteit is het een Serial-naar-Ethernet-module, maar je kunt de module eenvoudig herprogrammeren om aan je behoeften te voldoen. Je kunt dit bord omtoveren in een I2C-naar-Ethernet-bord als je wilt.

Een heel coole feature is de onboard TCP-server (of client). Met de TCP-server kun je de Arduino op afstand besturen, net alsof je dat via USB-serieel zou doen, maar van overal ter wereld! Aan de Arduino-kant is het volledig transparant. Je hoeft geen extra code aan je sketch toe te voegen om deze module te gebruiken.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel
Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Ik heb ook een WIZ750SR-TTL-EVB evaluatiebord. Ik kon de WIZ750SR ermee voeden en het heeft een debug USB-poort, maar ik gebruikte het alleen voor wat early experimenteren.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Zowel de Arduino 101 als de WIZ750SR gebruiken 3.3V, dus ik hoefde geen level shifting te gebruiken voor de TX en RX pinnen. De Arduino voedt de Ethernet-module ook vanuit zijn voeding. Het schema is heel simpel en te vinden in de Schema's-sectie. De servos hebben hun eigen 5V voeding.

De module instellen

Om dit bord te gebruiken moet je het eerst configureren. Ik ga dit niet opnieuw documenteren omdat de WIZnet-mensen dat al gedaan hebben hier en je zeker bent van de meest actuele documentatie.

Hun documentatie is geweldig, maar ik heb wat goed-te-weten info en had enkele (opgeloste) issues die het waard zijn te delen.

Allereerst kun je het bord voeden via de USB-poort van het evaluatiebord, maar behalve dat wordt deze poort vooral gebruikt voor debuggen en flashen. Ik geloof dat je niet met de TCP-server van de WIZ750SR kunt communiceren via de USB-poort, maar je ontvangt wel debug-informatie als je verbindt met deze COM-poort. Dit verwarde me een beetje in het begin omdat ik niet wist wat ik mocht verwachten.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Tweedens, als de blauwe LED aan gaat wanneer de WIZ750SR verbindt met je netwerk, dan werkt je bord correct, ga verder met de Configuration Tool, die het bord zou moeten vinden.

Mijn grootste probleem ontstond hier toen ik in de Configuration Tool naar het apparaat zocht. De eerste keer werkte het perfect, maar toen had ik geen tijd en stopte ik. Na twee weken probeerde ik het opnieuw, maar het kon het bord niet meer vinden onder meerdere OS's en computers op meerdere netwerken.

Ik deed een reflash via de debug USB-poort van het evaluatiebord met de nieuwste firmware en het werkte. Mijn Windows PC kon het nog steeds niet vinden, maar de Python-versie onder Ubuntu wel. Ik weet niet wat het probleem was, maar deze stappen losten het op. Na succesvolle configuratie kon mijn Windows PC het ook weer vinden, dus ik ging door.

Volgens wat ik las, kunnen VM's met hun virtuele netwerkadapters ook de zoekopdracht in de war brengen, dus als je problemen ondervindt met zoeken, kijk daar eens naar.

Een geweldig tool voor het testen van TCP-communicatie is NetCat. Met deze software kun je verbinden met de TCP-server op de WIZ750SR. Na installatie gebruik je dit commando:

nc [tcp_server_ip] [tcp_server_port]

Daarna kun je direct data sturen en ontvangen van de WIZ750SR. Ik heb deze tool veel gebruikt.

Bewegen van A naar B

Om een robotarm te bewegen, moet je de controller vertellen wat je wilt. De simpelste manier is om direct alle servo-hoeken bij te werken. Het bijwerken van de gewrichtshoeken kan met wat trial-and-error en werkt eigenlijk best goed.

In mijn volgende robotarm-project ga ik inverse kinematica gebruiken om de robotarm met wereldcoördinaten te besturen, maar voor nu bestuur ik de robotarm alleen met gewrichtshoeken.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

De snelheid van het systeem is een kernpunt. De servos zijn snel, maar ze hebben toch tijd nodig om de ontvangen positie te bereiken. Aan de andere kant, de draadbruggetjes houden niet van heel snelle bewegingen, dus ik moest dingen vertragen. Zowel op hardware- als softwaregedeelte.

Ik deed dit door een padberekening aan het systeem toe te voegen en een vertraging in te voegen. Wanneer je nieuwe gewrichtshoeken voor de robotarm stuurt, moet je een extra parameter meegeven: snelheid (mDelay). Je vertelt de robotarm-controller de minimale stap-tijd van de lus. De padcalculator berekent een optionele stapgrootte voor elke positioneringsservo. Dit betekent dat alle servos ongeveer tegelijkertijd hun doel bereiken en de snelheid afhangt van de vertraging. Het resultaat is een heel mooie en soepele lineaire beweging elke keer.

De effector werkt anders. Hij kan alleen open of dicht zijn (met 3 verschillende krachtgraden van dicht), zonder soepele overgang. Natuurlijk wil je het object zo snel mogelijk grijpen, terwijl bewegen soepel en mooi moet zijn.

Er zijn momenteel 2 typen commando's in dit systeem. Hier zijn voorbeelden voor beide:

  • G 1 → Greifer sluiten, licht. 0 betekent open.
  • A 10 130 120 110 → Robotarm bewegen met 10ms stap-tijd, 130° bovenste gewrichtshoek, 120° onderste gewrichtshoek, 110° basisrotatiehoek.

Android-app voor remote control

Op dit moment kan ik de robotarm van overal ter wereld besturen, maar ik moet handmatig elk nieuw commando intypen. Dat is niet veel plezier. Ik had een veel gebruiksvriendelijkere manier nodig, dus ik maakte een Android-applicatie.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

De app heeft een TCP-client, dus kan direct verbinden met de TCP-server van de WIZ750SR. De robotarm slaat het plot voor oude en toekomstige bewegingen niet op. Het kent alleen een huidige doelpositie. Dit betekent dat de applicatie niet het hele bewegingsplot naar de robotarm stuurt, maar periodiek een nieuwe positie stuurt, gebaseerd op de positie-terugkoppeling. Als je de app sluit of de verbinding met de WIZ750SR verbreekt, stopt de robotarm met bewegen zodra hij de laatste ontvangen positie bereikt heeft.

Na het verbinden met de robotarm kom je op het Configure-scherm. Het bevat 3 pagina's. De eerste is Run (meer daar later over), de tweede is Init en de derde is Loop. Init en Loop zijn eigenlijk hetzelfde, hun enige verschil is waar ze de positie opslaan.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Het scherm bevat 4 zoomschuifbalken en een greifer-knop naast de bewaar-knop. Deze schuifbalken worden gebruikt om de positie en snelheid van de beweging in te stellen, terwijl de greifer-knop de effector opent of sluit. Alle veranderingen zijn direct, dus je ziet de nieuwe positie op de robotarm onmiddellijk, maar je moet op de bewaar-knop klikken om het aan het plot toe te voegen. Hier is een korte demonstratie:

Als je zowel de greifer-status als de robotarm-positie wijzigt, wordt dat als twee verschillende commando's opgeslagen. Eerst het greifer-commando, dan het positie-commando.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Zoals je verwacht, wordt het draaien van het plot gestart met init. Init en loop werken net als Arduino's setup en loop functies. Init is goed voor bewegingen die later niet herhaald hoeven te worden. Wanneer de init-commando's klaar zijn, volgen de loop-commando's. De loop-commando's worden oneindig herhaald, of tenminste tot je het plot stopt. Als je geen van beide nodig hebt, laat je dat veld leeg.

Deze velden zijn EditText-velden, wat betekent dat je de inhoud eenvoudig kunt bewerken of verwijderen. Als je de schuifbalken niet wilt gebruiken, kun je de commando's handmatig invoeren. Je kunt ook het plot kopiëren en plakken. De applicatie onthoudt het laatste plot dat je draaide voor later gebruik.

De eerste regel onder "Configure" wordt gebruikt als visuele feedback voor testen. Het linkerdeel toont de laatste doelpositie voor de robotarm (S - verzonden), het rechterveld de huidige positie (R - ontvangen). De app stuurt een nieuwe doelpositie naar de robotarm zodra de doel- en huidige posities gelijk zijn.

Zoals je ziet, stopte de robotarm zodra de init-commando's klaar waren toen er alleen init was.

Met mijn app kun je al een heel eind komen, maar er zijn nog veel verbeteringsmogelijkheden voor de toekomst. Ik plan om functies, conditionele controle, lussen met argumenten, etc. in de plots te gebruiken.

Als je een vergelijkbare robot wilt bouwen, vind je zowel de Arduino-code als de Robot Arm Controller-applicatie in de Code-sectie van dit project.

Resultaten

Ik gebruikte zowel init- als loop-commando's en kon daarmee enkele matig complexe taken uitvoeren. Hier is een video over hoe mijn robotarm enkele rubber eendjes opstelt (init) en ze daarna één voor één om zich heen blijft bewegen, voor eeuwig (loop).

Zoals je ziet, als je in aanmerking neemt dat dit een heel goedkope robotarm is met serieuze hardware-gerelateerde beperkingen, zijn de bewegingen heel soepel, continu en accuraat.

Conclusie

Mijn software werkt heel goed en in de toekomst zal ik zeker doorwerken aan het verbeteren van deze robotarm, of een geavanceerdere bouwen. Ik heb alles bereikt wat ik voor dit project had gepland en zonder serieuze blokkerende problemen.

De Arduino 101 is geweldig voor dit doel. De enige beperking is de slechts 4 PWM-capable GPIO's. Dat kan in de toekomst een probleem worden als ik een nieuwe robotarm bouw met meer graden van vrijheid, maar de gescheiden USB-seriële en GPIO-seriële is erg handig tijdens ontwikkeling en dit bord kan ook veel rekenkracht leveren.

Ik vind de Android-applicatie een goed idee, maar ik moet het robuuster, gebruiksvriendelijker maken en de functionaliteit uitbreiden. Het is op dit moment een alpha-versie.

De WIZ750SR was een heel leuke verrassing. Ik vreesde dat ik meer issues zou hebben met dit bord, maar na de configuratie werkte het perfect. Het was volledig transparant en ik had nul issues. Dit is een heel makkelijk te gebruiken apparaat en de beste Ethernet-module die ik ooit met een van mijn microcontrollers heb gebruikt.

Werken met robotarmen is ontzettend leuk, dus ik ga zeker meer erover leren en mijn kennis in de toekomst met jullie delen! Bedankt voor het lezen!

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Code

Arduino Web Editor

Je kunt de Arduino Web Editor gebruiken om de Arduino-code van mijn project direct te openen en te uploaden.

Arduino en Android code

https://github.com/abysmalsb/Robot-Arm-Controller

Schema's

Op dit moment gebruikt het systeem twee afzonderlijke voedingsbronnen. Eén van de USB-poort van de Arduino en een andere 5V-bron voor de servos.

Ethernet-gestuurde robotarm: Remote control gemaakt simpel

Productieproces

  1. Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
  2. Gebaren-gecontroleerde Robot Aangedreven door Raspberry Pi
  3. Bouw een Spraak-gecontroleerde Robot met Windows 10 IoT Core op Raspberry Pi 2
  4. Bouw een Wi-Fi-gecontroleerde Raspberry Pi Robot met Python – Stap-voor-stap Gids
  5. ROObockey: Precisie-geassisteerde Remote-gecontroleerde Straathockey-robot
  6. MeArm robotarm V1.0 – Bouw je eigen Arduino- en Raspberry Pi-aangedreven robotarm
  7. LED's bedienen met Alexa via Raspberry Pi – Eenvoudige stapsgewijze handleiding
  8. Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
  9. Bouw een Stemgecontroleerde Robot met Arduino Nano
  10. PiBot: De Arduino-aangedreven pianorobot voor precisiemuziek
  11. Dual-Arm SCARA Robot: Geavanceerde Montage- & Productieoplossingen