Ervaring met het maken van de eerste robot op Arduino (robot “hunter”)

Hallo

In dit artikel wil ik het proces beschrijven van het assembleren van mijn eerste robot met behulp van Arduino. Het materiaal zal nuttig zijn voor andere beginners zoals ik, die een soort ‘zelfrijdende kar’ willen maken. Het artikel is een beschrijving van de fasen van het werken met mijn toevoegingen aan verschillende nuances. Aan het einde van het artikel vindt u een link naar de definitieve code (hoogstwaarschijnlijk niet de meest ideale).

Ervaring met het maken van de eerste robot op Arduino (robot “hunter”)

Waar mogelijk heb ik mijn zoon (8 jaar oud) betrokken bij deelname. Wat er precies mee werkte en wat niet - ik heb hier een deel van het artikel aan gewijd, misschien zal het voor iemand nuttig zijn.

Algemene beschrijving van de robot

Eerst een paar woorden over de robot zelf (идея). Ik had aanvankelijk niet echt zin om iets standaards in elkaar te zetten. Tegelijkertijd was de set componenten vrij standaard: chassis, motoren, ultrasone sensor, lijnsensor, LED's, tweeter. Aanvankelijk werd uit deze “soepset” een robot uitgevonden die zijn territorium bewaakt. Hij rijdt naar de overtreder die de cirkellijn heeft overschreden en keert vervolgens terug naar het midden. Deze versie vereiste echter een getekende lijn, plus extra wiskunde om te allen tijde in de cirkel te blijven.

Daarom veranderde ik, na enig nadenken, het idee enigszins en besloot een "jager" -robot te maken. In het begin draait hij om zijn as en kiest een doelwit (persoon) in de buurt. Als de “prooi” wordt gedetecteerd, zet de “jager” de zwaailichten en sirene aan en begint er naartoe te rijden. Wanneer de persoon wegloopt/wegrent, selecteert de robot een nieuw doelwit en achtervolgt dit, enzovoort. Zo'n robot heeft geen beperkte cirkel nodig en kan in open ruimtes werken.

Zoals je kunt zien, lijkt dit veel op een inhaalspel. Hoewel de robot uiteindelijk niet snel genoeg bleek te zijn, gaat hij eerlijk om met de mensen om hem heen. Vooral kinderen vinden het leuk (soms lijkt het echter alsof ze op het punt staan ​​het te vertrappen, hun hart maakt een sprongetje...). Ik denk dat dit een goede oplossing is om technisch ontwerp te populariseren.

Robotstructuur

Dus we hebben besloten tot het idee, laten we verder gaan indeling. De lijst met elementen wordt gevormd op basis van wat de robot zou moeten kunnen. Alles is hier vrij duidelijk, dus laten we meteen naar de nummering kijken:

Ervaring met het maken van de eerste robot op Arduino (robot “hunter”)

De “hersenen” van de robot zijn een Arduino Uno-bord (1); zat in een set besteld uit China. Voor onze doeleinden is het voldoende (we concentreren ons op het aantal gebruikte pinnen). Uit dezelfde set hebben we een kant-en-klaar chassis (2) gehaald, waarop twee aandrijfwielen (3) en één achterwiel (vrij roterend) (4) zijn bevestigd. De set bevatte ook een kant-en-klaar batterijcompartiment (5). Voor de robot bevindt zich een ultrasone sensor (HC-SR04) (6), achterin bevindt zich een motordriver (L298N) (7), in het midden bevindt zich een LED-flitser (8) en een beetje om aan de zijkant bevindt zich een tweeter (9).

In de lay-outfase kijken we naar:

- zodat alles past
- in evenwicht zijn
- rationeel geplaatst zijn

Onze Chinese collega’s hebben dit al gedeeltelijk voor ons gedaan. Het zware batterijcompartiment is dus in het midden geplaatst en de aandrijfwielen bevinden zich er ongeveer onder. Alle andere planken zijn lichtgewicht en kunnen op de rand worden geplaatst.

nuances:

  1. Het chassis uit de kit heeft veel fabrieksgaten, maar ik ben er nog steeds niet achter wat de logica daarin is. De motoren en het accupakket werden zonder problemen vastgezet, daarna begon het “afstellen” met het boren van nieuwe gaten om dit of dat bord vast te zetten.
  2. De koperen rekken en andere bevestigingsmiddelen uit opslagruimtes waren een grote hulp (soms moesten we ze eruit halen).
  3. Ik heb de rails van elk bord door de klemmen gehaald (opnieuw vond ik ze in de opslag). Heel handig, alle draden liggen mooi en bungelen niet.

Individuele blokken

Nu ga ik door blokken en ik zal je persoonlijk over elk ervan vertellen.

batterijcompartiment

Het is duidelijk dat de robot over een goede energiebron moet beschikken. Opties kunnen variëren, ik heb gekozen voor de optie met 4 AA batterijen. In totaal geven ze ongeveer 5 V, en deze spanning kan rechtstreeks worden toegepast op de 5V-pin van het Arduino-bord (waarbij de stabilisator wordt omzeild).

Natuurlijk was ik voorzichtig, maar deze oplossing is redelijk werkbaar.

Omdat overal stroom nodig is, heb ik voor het gemak twee connectoren in het midden van de robot gemaakt: de ene "verdeelt" de grond (aan de rechterkant) en de tweede - 5 V (aan de linkerkant).

Ervaring met het maken van de eerste robot op Arduino (robot “hunter”)

Motoren en bestuurder

Allereerst over het monteren van de motoren. De houder is in de fabriek gemaakt, maar gemaakt met grote toleranties. Met andere woorden: de motoren kunnen een paar millimeter naar links en rechts wiebelen. Voor onze taak is dit niet kritisch, maar op sommige plekken kan het wel effect hebben (de robot gaat opzij bewegen). Voor het geval dat, heb ik de motoren strikt parallel gezet en met lijm vastgezet.

Ervaring met het maken van de eerste robot op Arduino (robot “hunter”)

Om de motoren aan te sturen, zoals ik hierboven schreef, wordt de L298N-driver gebruikt. Volgens de documentatie heeft hij drie pinnen voor elke motor: één voor het veranderen van de snelheid en een paar pinnen voor de draairichting. Er is hier één belangrijk punt. Het blijkt dat als de voedingsspanning 5 V is, de snelheidsregeling simpelweg niet werkt! Dat wil zeggen, het draait helemaal niet, of het draait naar het maximum. Dit is de functie die ervoor zorgde dat ik een paar avonden “dode”. Uiteindelijk vond ik ergens op een van de forums een vermelding.

Over het algemeen had ik een lage rotatiesnelheid nodig bij het draaien van de robot, zodat hij tijd had om de ruimte te scannen. Maar omdat er niets uit dit idee kwam, moest ik het anders doen: een kleine bocht - stop - draai - stop, enz. Nogmaals, niet zo elegant, maar wel werkbaar.

Ik zal hier ook aan toevoegen dat de robot na elke achtervolging een willekeurige richting kiest voor een nieuwe bocht (met de klok mee of tegen de klok in).

Ultrasoon sensor

Ervaring met het maken van de eerste robot op Arduino (robot “hunter”)

Weer een stukje hardware waarbij we op zoek moesten naar een compromisoplossing. De ultrasone sensor produceert onstabiele cijfers op echte obstakels. Eigenlijk werd dit verwacht. Idealiter werkt het ergens in wedstrijden met gladde, gelijkmatige en loodrechte oppervlakken, maar als iemands benen ervoor "flitsen", moet er extra verwerking worden geïntroduceerd.

Als zodanig heb ik de verwerking ingesteld middenfilter voor drie tellen. Op basis van tests op echte kinderen (er zijn geen kinderen gewond geraakt tijdens de tests!), bleek dit ruim voldoende om de gegevens te normaliseren. De natuurkunde hier is eenvoudig: signalen worden door ons gereflecteerd nodig objecten (die de vereiste afstand opleveren) en gereflecteerd door verder weg gelegen objecten, bijvoorbeeld muren. Deze laatste zijn willekeurige emissies in metingen van de vorm 45, 46, 230, 46, 46, 45, 45, 310, 46... Het zijn deze die het mediaanfilter afsnijdt.

Na alle verwerking krijgen we de afstand tot het dichtstbijzijnde object. Is deze lager dan een bepaalde drempelwaarde, dan zetten wij het alarm aan en rijden recht op de “indringer” af.

Flitser en sirene

Misschien wel de eenvoudigste elementen van al het bovenstaande. Ze zijn te zien op de foto's hierboven. Er valt hier niets over hardware te schrijven, dus laten we nu verder gaan code.

Controleprogramma

Ik zie het nut niet in om de code in detail te beschrijven, wie deze nodig heeft - de link staat aan het einde van het artikel, alles is daar redelijk leesbaar. Maar het zou leuk zijn om de algemene structuur uit te leggen.

Het eerste dat we moesten begrijpen was dat een robot een real-time apparaat is. Om precies te zijn, om te onthouden, want zowel vroeger als nu werk ik nog steeds in de elektronica. We vergeten dus meteen de uitdaging vertraging(), die ze graag gebruiken in voorbeeldschetsen, en die het programma eenvoudigweg voor een bepaalde tijdsduur “bevriest”. In plaats daarvan introduceren we, zoals ervaren mensen adviseren, timers voor elk blok. Het vereiste interval is verstreken - de actie is uitgevoerd (de helderheid van de LED verhoogd, de motor aangezet, enzovoort).

Timers kunnen met elkaar worden verbonden. Zo werkt de tweeter synchroon met de flasher. Dit vereenvoudigt het programma een beetje.

Uiteraard verdelen we alles in afzonderlijke functies (knipperende lichten, geluid, draaien, vooruit rijden, enzovoort). Als je dit niet doet, kun je niet achterhalen wat waar en waar vandaan komt.

Nuances van pedagogie

Alles wat hierboven beschreven is, deed ik in mijn vrije tijd in de avonduren. Op mijn gemak heb ik ongeveer drie weken aan de robot gewerkt. Dit had hier kunnen eindigen, maar ik heb ook beloofd je te vertellen over het werken met een kind. Wat kun je op deze leeftijd doen?

Werk volgens instructies

We hebben eerst elk detail afzonderlijk gecontroleerd: LED's, tweeter, motoren, sensoren, enz. Er zijn een groot aantal kant-en-klare voorbeelden - sommige rechtstreeks in de ontwikkelomgeving, andere zijn te vinden op internet. Dit maakt mij zeker blij. We nemen de code, verbinden het onderdeel, zorgen ervoor dat het werkt en beginnen het vervolgens aan te passen aan onze taak. Het kind maakt de aansluitingen volgens het schema en onder mijn toezicht. Dit is goed. Daarnaast dien je strikt volgens instructies te kunnen werken.

Volgorde van werken (“van bijzonder naar algemeen”)

Dit is een moeilijk punt. Je moet leren dat een groot project (“een robot maken”) uit kleine taken bestaat (“een sensor aansluiten”, “motoren verbinden”…), en dat die op hun beurt weer uit nog kleinere stappen bestaan ​​(“een programma,” “een bord aansluiten.” ", "firmware downloaden"...). Door min of meer begrijpelijke taken van het lagere niveau uit te voeren, 'sluiten' we de taken van het middelste niveau af, en daaruit wordt het algehele resultaat gevormd. Ik heb het uitgelegd, maar ik denk dat het besef niet snel zal komen. Ergens waarschijnlijk in de adolescentie.

Installatie

Boren, draad, schroeven, moeren, solderen en de geur van hars - waar zouden we zijn zonder? Het kind kreeg de basisvaardigheid "Werken met een soldeerbout" - hij slaagde erin verschillende verbindingen te solderen (ik hielp een beetje, ik zal het niet verbergen). Vergeet de veiligheidsuitleg niet.

Computerwerk

Ik schreef het programma voor de robot, maar slaagde er toch in enkele gunstige resultaten te behalen.

Ten eerste: Engels. Het was net begonnen op school, dus we hadden moeite om erachter te komen wat pishalka, migalka, yarkost en andere transliteraties waren. Wij begrepen dit tenminste. Ik heb bewust geen Engelse moedertaalwoorden gebruikt, omdat we dit niveau nog niet hebben bereikt.

Ten tweede: efficiënt werken. We leerden sneltoetscombinaties en hoe je snel standaardbewerkingen kunt uitvoeren. Tijdens het schrijven van het programma wisselden mijn zoon en ik af en toe van plaats en zei ik wat er moest gebeuren (vervanging, zoeken, enz.). Ik moest het keer op keer herhalen: "dubbelklik op selecteren", "Houd Shift ingedrukt", "Houd Ctrl ingedrukt" enzovoort. Het leerproces is hier niet snel, maar ik denk dat de vaardigheden geleidelijk ‘in de subcortex’ zullen worden gedeponeerd.

Verborgen tekstJe kunt zeggen dat het bovenstaande bijna voor de hand liggend is. Maar eerlijk gezegd kreeg ik dit najaar de kans om computerwetenschappen te onderwijzen in de 9e klas van één school. Dat is verschrikkelijk. Leerlingen kennen basiszaken niet als Ctrl + Z, Ctrl + C en Ctrl + V, het selecteren van tekst terwijl ze Shift ingedrukt houden of dubbelklikken op een woord, enzovoort. Dit ondanks het feit dat ze in het derde jaar van hun studie informatica zaten... Trek je eigen conclusie.

Ten derde: blind typen. Ik vertrouwde het commentaar in de code toe aan het kind om te typen (laat hem oefenen). We plaatsten onze handen onmiddellijk correct, zodat onze vingers zich geleidelijk de locatie van de toetsen herinnerden.

Zoals je ziet zijn we nog maar net begonnen. We zullen onze vaardigheden en kennis blijven aanscherpen; ze zullen nuttig zijn in het leven.

Trouwens, over de toekomst...

Verdere ontwikkeling

De robot is gemaakt, rijdt, knippert en piept. Wat nu? Geïnspireerd door wat we hebben bereikt, zijn we van plan dit verder te verfijnen. Er is een idee om een ​​afstandsbediening te maken, zoals een maanrover. Het zou interessant zijn om, zittend achter een afstandsbediening, de beweging te besturen van een robot die op een heel andere plek rijdt. Maar dat zal een ander verhaal zijn...

En uiteindelijk de helden van dit artikel (video door te klikken):

Ervaring met het maken van de eerste robot op Arduino (robot “hunter”)

Dank je wel!

Codekoppeling

Bron: www.habr.com

Voeg een reactie