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

Robotarm bestuurd via Ethernet

Componenten en benodigdheden

Arduino 101
× 1
WIZnet WIZ750SR
× 1
Android-apparaat
× 1
Robotarm
Je kunt elke andere robotarm gebruiken, maar als je robotarm te verschillend
× 1
Metal Gear Micro Servo
× 4

Apps en online services

Arduino IDE
WIZnet S2E-configuratieprogramma
Android Studio

Over dit project

Inleiding

Ik ben dol op robotarmen. Ik vind het leuk dat je alleen wat eenvoudige mechanische onderdelen nodig hebt, wat servo's of motoren en goede software en je kunt een apparaat krijgen dat niet alleen spectaculair en leuk is, maar ook echt heel handig. Ik wilde er een bouwen omdat ik een robotica-cursus had die ik erg leuk vond.

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

Robotarm

Je kunt robotarmen kopen vanaf ongeveer $ 20. Om te experimenteren wilde ik beginnen met een goedkopere. Later zal ik een serieuzere robotarm bouwen of kopen, maar voor nu zal ik werken aan deze 25 $ DIY-robotarm van Banggood.

Dit is een 4DoF (Degrees of Freedom) robotarm, waarbij 3 servo's worden gebruikt om te bewegen en één voor de effector (ik noemde het in het project grijper). Het betekent dat de grijper in elke positie in een specifiek gebied kan worden verplaatst, maar de hoeken kunnen niet worden gewijzigd. Dit is een aanzienlijke beperking, maar voor nu is het oké en het is nog steeds goed voor veel dingen.

De doe-het-zelf-kit kwam met 4 servo's, dus eigenlijk krijg je naast een controller elk onderdeel om de robotarm te bouwen. Deze servo's zijn niet slecht, maar ik gaf de voorkeur aan deze:

Deze servo's zijn sneller dan de blauwe en deze gebruiken metalen tandwielen in plaats van plastic.

De robotonderdelen werden geleverd in 4 plastic vellen. U moet de onderdelen van deze vellen verwijderen.

De robotarmkit bestaat uit een aantal onderdelen. Ik raad je aan om de volgende video te bekijken. In deze video bouwt een Rus hetzelfde type robotarm. Het bouwgedeelte begint om 7:43.

Ik kreeg een link op het pakket over hoe de robotarm te bouwen, maar het was van zeer lage kwaliteit in zowel afbeeldingen als instructies. Dat filmpje is veel beter. Mogelijk kun je erachter komen wat wat is, maar als je dit doet, kom je terecht in een bijna oneindige lus van montage, demontage en hermontage.

Wees heel erg voorzichtig bij het plaatsen van de servo's. Dit ontwerp met dit soort plastic heeft de neiging om heel gemakkelijk te breken als je de schroeven aandraait. Ook op sommige andere onderdelen van de robot is de optimale aandraaiing van de schroeven van belang. Maak ze te strak en je kunt de segmenten van de robotarm niet bewegen met de servo's.

Na wat bouwen heb je je eigen robotarm.

De positioneringsservo's hebben een kabel die lang genoeg is, maar de grijper heeft een veel langere kabel nodig. Ik heb die servo gedemonteerd, de oude kabel gedesoldeerd en ik heb een minstens twee keer zo lange kabel gebruikt.

Hersenen

Oké, de robotarm is klaar, maar het is meer dan waarschijnlijk dat je hem op de een of andere manier wilt besturen. Daar had ik een microcontroller voor nodig en voor deze klus koos ik mijn Arduino 101.

Het is het enige officiële Arduino-bord dat een Intel-microcontroller (Intel Curie) gebruikt. Het heeft een ingebouwde gyroscoop en versnellingsmeter. Het heeft ook Bluetooth, dus het laat me de mogelijkheid om de robot in de toekomst via BLE te besturen. Een andere zeer handige functie van dit bord is hoe de seriële communicatie werkt. In tegenstelling tot de meeste Arduino's zijn de USB-serieel en de UART op pin 1 en 0 (TX en RX) niet hetzelfde. Het heeft zijn voordelen, zoals dat ik geen andere communicatiecircuits van pin 0 en 1 hoef los te koppelen wanneer ik de Arduino herprogrammeer. Het is ook handig voor het opsporen van fouten.

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

De Arduino 101 heeft 4 PWM-compatibele GPIO's (GPIO3, GPIO5, GPIO6 en GPIO9) en ik heb ze allemaal gebruikt om de servo's te besturen.

Communicatie

Mijn robotarm kan serieel worden bestuurd (Serial1 om specifiek te zijn). Ik heb hiervoor mijn nieuwste communicatiemodule, de WIZ750SR, gebruikt.

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

Een erg coole functie is de onboard TCP-server (of client). Met behulp van de TCP-server kunt u de Arduino op afstand bedienen, net zoals u zou doen via USB-serieel, maar van overal ter wereld! Aan de kant van de Arduino is het volledig transparant. U hoeft geen extra code aan uw schets toe te voegen om deze module te gebruiken.

Ik heb ook een WIZ750SR-TTL-EVB evaluatiebord. Ik zou de WIZ750SR van stroom kunnen voorzien en heeft een USB-poort voor foutopsporing, maar ik heb hem niet gebruikt, afgezien van wat vroege experimenten.

Zowel de Arduino 101 als de WIZ750SR gebruiken 3.3V en dus hoefde ik geen niveauverschuiving te gebruiken voor de TX- en RX-pinnen. De Arduino voedt ook de Ethernet-module via zijn voeding. Het circuit is heel eenvoudig en je kunt het vinden in het gedeelte Schema's van dit project. De servo's hebben hun eigen 5V voeding.

De module instellen

Om dit bord te gebruiken, moet je het eerst configureren. Ik zal dit deel niet opnieuw documenteren omdat de WIZnet-jongens dat hier al hebben gedaan en je kunt er zeker van zijn dat je daar altijd de nieuwste documentatie krijgt.

Hun documentatie is geweldig, maar ik heb goede informatie en ik had een aantal (opgeloste) problemen die het delen waard waren.

Ten eerste kun je het bord van stroom voorzien via de USB-poort van het evaluatiebord, maar daarnaast wordt deze poort voornamelijk gebruikt voor debuggen en flashen. Ik geloof dat je niet kunt communiceren met de TCP-server van de WIZ750SR via de USB-poort, maar je krijgt wel debug-informatie als je verbinding maakt met deze COM-poort. Het veroorzaakte in het begin wat verwarring omdat ik niet wist wat ik kon verwachten.

Ten tweede, als de blauwe LED brandt wanneer de WIZ750SR verbinding maakt met uw netwerk, dan zou uw bord correct moeten werken, ga verder met de configuratietool, het zou het bord moeten vinden.

Mijn grootste probleem deed zich op dit moment voor toen ik probeerde naar het apparaat te zoeken in de configuratietool. De eerste keer werkte het wonderwel, maar toen had ik geen tijd dus stopte ik daar. Na twee weken probeerde ik het opnieuw, maar hij kon het bord niet meer vinden onder meerdere besturingssystemen 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 zeker wat het probleem was, maar deze stappen hebben mijn probleem uiteindelijk opgelost. Nadat ik de WIZ750SR met succes had geconfigureerd, kon mijn Windows-pc hem ook weer vinden, dus ik ging door met het werk.

Zoals ik lees, verknoeien VM's met hun virtuele netwerkadapters ook het zoeken, dus als je problemen ondervindt met zoeken, moet je daar eens naar kijken.

Een geweldig hulpmiddel voor het testen van TCP-communicatie is NetCat. Met behulp van deze software kunt u verbinding maken met de TCP-server op de WIZ750SR. Nadat u NetCat hebt geïnstalleerd, gebruikt u deze opdracht om verbinding te maken:

nc [tcp_server_ip] [tcp_server_port]  

Daarna kunt u direct gegevens verzenden en ontvangen van de WIZ750SR. Ik heb deze tool veel gebruikt.

Verhuizen van A naar B

Om een ​​robotarm te bewegen, moet je de controller vertellen wat je wilt. De eenvoudigste manier is om de hoeken van alle servo's direct bij te werken. Het bijwerken van de verbindingshoeken kan met wat vallen en opstaan ​​en het kan zelfs goed werken.

In mijn volgende robotarmproject zal ik inverse kinematica gebruiken om de robotarm te besturen met wereldcoördinaten, maar voor nu zal ik de robot besturen met alleen gewrichtshoeken.

De snelheid van het systeem is hierbij een belangrijk punt. De servo's zijn erg snel, maar ze hebben nog tijd nodig om de ontvangen positie te bereiken. Aan de andere kant houden de jumperdraden niet van erg snelle bewegingen, dus ik moest het langzamer aan doen. Zowel op het hardware- als het softwaregedeelte.

Ik heb dit gemaakt door een padberekening naar het systeem te maken en vertraging in te voegen. Wanneer u nieuwe gewrichtshoeken voor de robotarm verzendt, moet u een extra parameter opgeven:snelheid (mDelay). In feite vertelt u de robotarmcontroller de minimale staptijd van de lus. De padcalculator berekent een optionele stapgrootte voor elke positioneringsservo. Dit betekent dat alle servo's ongeveer tegelijkertijd hun doel zullen bereiken en dat de snelheid afhankelijk is van de vertraging. Het resultaat is elke keer een zeer mooie en vloeiende lineaire beweging.

De effector werkt op een andere manier. In principe kan het alleen een open of gesloten (met 3 verschillende niveaus van gesloten sterkte) hebben, zonder een vloeiende overgang. Natuurlijk wil je het object zo snel mogelijk pakken, terwijl bewegen soepel en mooi moet zijn.

Er zijn momenteel 2 soorten opdrachten in dit systeem. Hier is een voorbeeld van beide:

  • G 1 --> De grijper lichtjes sluiten. 0 betekent openen
  • A 10 130 120 110 --> Bewegen van de robotarm met 10 ms staptijd, 130º bovenste gewrichtshoek, 120º onderste gewrichtshoek en 110º basisrotatorhoek.

Android-app voor afstandsbediening

Oké, dus op dit moment kan ik de robotarm overal ter wereld besturen, maar ik moet elke nieuwe opdracht handmatig schrijven. Op deze manier is het niet zo leuk. Ik had een veel gebruiksvriendelijkere manier nodig om de robotarm te besturen, dus heb ik een Android-applicatie gemaakt om precies dat te doen.

De app heeft een TCP-client, zodat deze rechtstreeks verbinding kan maken met de TCP-server van de WIZ750SR. De robotarm slaat de plot niet op voor oude en toekomstige bewegingen. Het kent alleen een huidige doelpositie. Dit betekent dat de applicatie niet alleen de hele bewegingsgrafiek naar de robotarm stuurt, maar periodiek nieuwe posities naar de robotarm stuurt op basis van de positiefeedback. Als u de app sluit of de verbinding met de WIZ750SR verbreekt, stopt de robotarm met bewegen zodra deze de laatst ontvangen positie bereikt.

Nadat u verbinding hebt gemaakt met de robotarm, komt u in het scherm Configureren. Het bevat 3 pagina's. De eerste is Run (daarover later meer), de tweede is Init en de derde is Loop. Init en Loop zijn in principe hetzelfde, hun enige verschil is waar ze de positie opslaan.

Het scherm bevat naast de save-knop 4 zoekbalken en een grijperknop. Deze schuifregelaars worden gebruikt voor het instellen van de positie en de snelheid van de beweging, terwijl de grijperknop wordt gebruikt om de effector te openen of te sluiten. Alle wijzigingen worden onmiddellijk doorgevoerd, dus u ziet de nieuwe positie op de robotarm onmiddellijk, maar u moet op de knop Opslaan klikken om deze aan de plot toe te voegen. Hier is een korte demonstratie over:

Als u zowel de grijperstatus als de robotarmpositie wijzigt, wordt dit opgeslagen als twee verschillende opdrachten. Eerst het grijpercommando en dan het positiecommando.

Zoals je zou verwachten, wordt de plot gestart met init. Init en loop werken net als Arduino's setup- en loop-functies. Init is goed voor bewegingen die later niet worden herhaald. Als de init-commando's klaar zijn, volgen de loop-commando's. De lusopdrachten worden voor altijd herhaald, of in ieder geval totdat u de plot stopt. Als je geen loop of init nodig hebt, laat je dat veld gewoon leeg.

Deze velden zijn EditText-velden, wat betekent dat u hun inhoud gemakkelijk kunt bewerken of verwijderen. Als u de schuifregelaars niet wilt gebruiken, kunt u de opdrachten met de hand schrijven. U kunt de plot ook kopiëren en plakken. De applicatie onthoudt de laatste plot die u hebt uitgevoerd voor later gebruik.

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

Zoals je kunt zien, stopte de robotarm toen er alleen init was, zodra hij klaar was met de init-commando's.

Met mijn app kun je heel wat dingen doen, maar er zijn veel mogelijkheden voor verbetering in de toekomst. Ik ben van plan om functies, voorwaardelijke controle, lussen met argumenten, enz. in de plots te gebruiken.

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

Resultaten

Ik gebruikte zowel init- als loop-commando's en het stelde me in staat om een ​​aantal redelijk complexe taken uit te voeren. Hier is een video over hoe mijn robotarm een ​​paar badeendjes opzet (init) en ze vervolgens een voor een om zichzelf heen begint te bewegen, voor altijd (lus).

Zoals je kunt zien als je er rekening mee houdt dat dit een zeer goedkope robotarm is met ernstige hardwaregerelateerde beperkingen, zijn de bewegingen erg soepel, continu en nauwkeurig.

Conclusie

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

De Arduino 101 is geweldig voor dit doel. De enige beperking van het bord zijn de enige 4 PWM-compatibele GPIO's. Het kan in de toekomst een probleem worden als ik een nieuwe robotarm bouw met meer vrijheidsgraden, maar de aparte USB-serieel en GPIO-serieel is erg handig tijdens de ontwikkeling en dit bord kan ook veel rekenkracht leveren.

Ik denk dat de Android-applicatie een goed idee was, maar ik zal het robuuster en gebruiksvriendelijker moeten maken en de functionaliteit ervan moeten vergroten. Het is momenteel een alfaversie.

De WIZ750SR was een erg leuke verrassing. Ik was bang dat ik meer problemen zou krijgen met dit bord, maar na de configuratie werkte het perfect. Het was volledig transparant en ik had er geen problemen mee. Dit is een zeer gebruiksvriendelijk 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 er zeker meer over leren en in de toekomst mijn kennis met jullie delen! Bedankt voor het lezen!

Code

Arduino-webeditor
U kunt Arduino Web Editor gebruiken om de Arduino-code van mijn project te openen en direct te uploaden
Arduino- en Android-code
https://github.com/abysmalsb/Robot-Arm-Controller

Schema's

Op dit moment maakt het systeem gebruik van twee aparte stroombronnen. Een van de USB-poort van de Arduino en een andere 5V-bron die wordt gebruikt voor het verplaatsen van de servo's.

Productieproces

  1. Raspberry Pi-robot bestuurd via Bluetooth
  2. Gebaargestuurde robot met Raspberry Pi
  3. Windows 10 IoT Core:spraakgestuurde robot
  4. Wifi-gestuurde robot met Raspberry Pi
  5. ROObockey:op afstand bestuurbare, door het doel ondersteunde straathockeyrobot
  6. Dual Arm SCARA-robot
  7. MeArm Robotarm - Uw robot - V1.0
  8. Alexa gestuurde LED's via Raspberry Pi
  9. Nunchuk-gestuurde robotarm (met Arduino)
  10. Spraakgestuurde robot
  11. Arduino-gestuurde pianorobot:PiBot