Ervaring met het creëren van de eerste robot op Arduino (robot-"jager")

Hallo.

In dit artikel wil ik het proces beschrijven van het bouwen van mijn eerste robot op Arduino. Het materiaal zal nuttig zijn voor andere beginners zoals ik, die een soort 'zelfrijdend wagentje' willen maken. Het artikel biedt een beschrijving van de verschillende stappen in het werk, met mijn aanvullingen over verschillende nuances. Een link naar de uiteindelijke code (waarschijnlijk niet de meest ideale) wordt aan het einde van het artikel gegeven.

Ervaring met het creëren van de eerste robot op Arduino (robot-"jager")

Waar mogelijk heb ik mijn zoon (8 jaar) betrokken. Wat hij precies wel en niet kon doen, heb ik in een deel van het artikel verwerkt; mogelijk is het nuttig voor iemand.

Algemene beschrijving van de robot

Laten we eerst wat woorden besteden aan de robot (idee). Het had me niet echt aangesproken om iets typisch te bouwen. Tegelijkertijd was de set componenten vrij standaard - chassis, motoren, ultrasone sensor, lijnsensor, LED's, zoemer. Aanvankelijk was er met deze 'soepkit' een robot bedacht die zijn territorium bewaakt. Hij rijdt naar de indringer die de lijn van de cirkel heeft gekruist en keert dan terug naar het midden. Echter, in deze variant was een getrokken lijn nodig, plus wat extra wiskunde om binnen de cirkel te blijven.

Daarom heb ik na enige overpeinzing het idee iets aangepast en besloten een robot-'jager' te maken. Bij de start draait hij om zijn as en kiest een doel (een persoon) in de buurt. Als de 'prooi' wordt gedetecteerd, activeert de 'jager' de knipperlichten en sirene en begint hij ernaartoe te rijden. Wanneer de persoon zich verwijdert of wegloopt, kiest de robot een nieuw doel en vervolgt deze, en zo verder. Deze robot heeft geen beperkte cirkel nodig en kan op open terrein werken.

Zoals je kunt zien, lijkt dit veel op het spel 'achtervolgen'. Hoewel de robot uiteindelijk niet erg snel was, interacteert hij eerlijk met de mensen om hem heen. Dit vinden vooral kinderen leuk (soms lijkt het echter alsof ze hem gaan verpletteren, waardoor mijn hart even stopt…). Ik denk dat dit een goede oplossing is voor de popularisering van technische constructie.

Structuur van de robot

Dus we hebben de idee vastgesteld, laten we verder gaan met de indeling. De lijst van elementen wordt gevormd uit wat de robot moet kunnen. Dit is vrij duidelijk, laten we dus meteen naar de nummering kijken:

Ervaring met het creëren van de eerste robot op Arduino (robot-"jager")

De 'hersenen' van de robot zijn de Arduino Uno (1); deze zaten in een kit die we uit China hebben besteld. Voor onze doeleinden is deze absoluut voldoende (we kijken naar het aantal gebruikte pinnen). Uit dezelfde kit hebben we een voorgemonteerd chassis (2) genomen, waarop twee aangedreven wielen (3) en een achterwiel (vrij draaiend) (4) zijn bevestigd. Ook was er een voorgemonteerde batterijhouder (5) bij de kit. Aan de voorkant van de robot staat een ultrasoon sensor (HC-SR04) (6), aan de achterkant - een motordriver (L298N) (7), in het midden - een knipperende LED (8) en een beetje verderop - een piezo luidspreker (9).

Tijdens de assemblage kijken we:

— of alles past
— of het in balans is
— of het efficiënt is geplaatst

De Chinezen hebben al deels voor ons gezorgd. Zo is de zware batterijhouder in het midden geplaatst en staan de aangedreven wielen daar ongeveer onder. Alle andere printplaten zijn licht, die kunnen aan de rand worden geplaatst.

Details:

  1. In het chassis van de kit zijn veel fabrieksmatige gaten aanwezig, maar ik begrijp de logica daarachter nog niet. De motoren en de batterij zijn zonder problemen vastgezet, daarna begon het 'passen' met het boren van nieuwe gaten om bepaalde printplaten vast te zetten.
  2. De messing steunen en ander bevestigingsmateriaal uit de voorraad hebben ons erg geholpen (soms moesten we improviseren).
  3. Ik heb de draden van elke printplaat door klemmen geleid (ook weer gevonden in de voorraad). Heel handig, alle draden liggen netjes en hangen niet los.

Losse blokken

Nu ga ik door de blokken en ik zal individueel over elk spreken.

Batterijhouder

Het is duidelijk dat de robot een goede energiebron moet hebben. De opties kunnen verschillen, ik heb gekozen voor een optie met 4 AA-batterijen. In totaal leveren ze ongeveer 5 V, en die spanning kan rechtstreeks op pin 5V van de Arduino worden aangesloten (langs de stabilisator).

Ik had natuurlijk enige terughoudendheid, maar deze oplossing werkt prima.

Omdat stroom overal nodig is, heb ik voor het gemak in het midden van de robot twee aansluitingen gemaakt: een die de massa 'verdeelt' (rechts) en een andere die 5 V levert (links).

Ervaring met het creëren van de eerste robot op Arduino (robot-"jager")

Motoren en driver

Eerst over de motorbevestiging. De bevestiging is fabrieksmatig, maar met ruime tolerantie gemaakt. Met andere woorden, de motoren kunnen een paar millimeter naar links en rechts 'wiebelen'. Voor onze taak is dit niet kritiek, maar ergens kan dit invloed hebben (de robot begint naar één kant te trekken). Voor de zekerheid heb ik de motoren strikt parallel geplaatst en met lijm vastgezet.

Ervaring met het creëren van de eerste robot op Arduino (robot-"jager")

Voor de besturing van de motoren, zoals ik hierboven heb geschreven, wordt de L298N-driver gebruikt. Volgens de documentatie heeft deze drie pinnen voor elke motor: één voor het wijzigen van de snelheid en een paar pinnen voor de draairichting. Er is hier één belangrijk punt. Blijkbaar werkt de snelheidsregeling gewoon niet als de voedingsspanning 5 V is! Dat wil zeggen, ofwel draait hij helemaal niet, of draait hij op maximaal. Dit is zo'n bijzonderheid, waardoor ik een paar avonden heb 'verloren'. Uiteindelijk vond ik ergens op een van de forums een vermelding.

Over het algemeen had ik een lage draaisnelheid nodig bij het draaien van de robot — zodat hij de tijd had om de ruimte te scannen. Maar, aangezien deze opzet niet werkte, moest ik het anders aanpakken: beetje draaien — stoppen — draaien — stoppen, enzovoort. Weer niet zo elegant, maar werkbaar.

Daarnaast voeg ik hieraan toe dat de robot na elke achtervolging een willekeurige richting voor de nieuwe draai kiest (met of tegen de klok in).

Ultrasone sensor

Ervaring met het creëren van de eerste robot op Arduino (robot-"jager")

Nog een apparaatje waarvoor ik een compromisoplossing moest zoeken. De ultrasone sensor geeft instabiele cijfers bij echte obstakels. Eigenlijk was dit te verwachten. Ideaal werkt hij ergens op wedstrijden, waar er gladde, vlakke en verticale oppervlakken zijn, maar als er 'benen storen' voor hem, dan moet er extra verwerking worden geïmplementeerd.

Als dergelijke verwerking heb ik geplaatst een medianfilter op drie metingen. Op basis van testen met echte kinderen (tijdens de testen is geen enkel kind gewond geraakt!), bleek dit voldoende te zijn voor het normaliseren van de gegevens. De fysica hier is eenvoudig: we hebben signalen die zijn weerkaatst van de benodigde objecten (die de vereiste afstand geven) en die van verder weg, bijvoorbeeld wanden. Laatstgenoemden zijn willekeurige uitschieters in de metingen van het type 45, 46, 230, 46, 46, 45, 45, 310, 46... Precies die worden door het medianfilter eruit gefilterd.

Na afloop van alle verwerking hebben we de afstand tot het dichtstbijzijnde object. Als deze kleiner is dan een bepaalde drempelwaarde, schakelen we de alarmmelding in en gaan we rechtstreeks naar de "overtreder".

Flitser en sirene

Dit zijn misschien wel de eenvoudigste elementen van alles wat hierboven is genoemd. Ze zijn zichtbaar op de foto's hierboven. Wat betreft de hardware valt hier niet veel over te zeggen, dus laten we nu overgaan naar de code.

Beheerprogramma

Ik beschouw het als zinloos om de code gedetailleerd uit te schrijven; voor wie dat nodig heeft, staat er een link aan het einde van het artikel, waar alles vrij leesbaar is. Maar het zou goed zijn om de algemene structuur uit te leggen.

Het eerste dat ik moest begrijpen: een robot is een apparaat in real-time. Eigenlijk om te herinneren, omdat ik zowel vroeger als nu nog steeds bezig ben met elektronica. Dus we vergeten meteen de oproep aan delay(), die erg populair is in voorbeeldprogramma's en die simpelweg het programma "bevriesd" voor de opgegeven tijd. In plaats daarvan, zoals ervaren mensen adviseren, introduceren we timers voor elk blok. De gevraagde periode is verstreken — voer de actie uit (verhoog de helderheid van de LED, schakel de motor in, enzovoort).

Timere kunnen met elkaar verbonden zijn. Zo werkt bijvoorbeeld de pieper synchroon met de flitser. Dit vereenvoudigt het programma iets.

Natuurlijk splitsen we alles op in aparte functies (flitser, geluid, draaien, vooruit bewegen, enzovoort). Als we dat niet doen, is het later moeilijk te begrijpen wat waar vandaan komt en waar het naartoe gaat.

Pedagogische nuances

Alles wat hierboven is beschreven, heb ik in mijn vrije tijd 's avonds gedaan. In een ontspannen tempo heb ik ongeveer drie weken aan de robot besteed. Hier zou het eigenlijk bij kunnen blijven, maar ik heb ook beloofd jullie te vertellen over het werken met kinderen. Wat is haalbaar op deze leeftijd?

Werk volgens de instructies

Elke component hebben we eerst afzonderlijk gecontroleerd — LEDs, pieper, motoren, sensoren, enzovoort. Er zijn veel kant-en-klare voorbeelden — sommige vind je direct in de ontwikkelomgeving, andere kun je op het internet vinden. Dat is zonder twijfel een opluchting. We nemen de code, sluiten de component aan, controleren of alles werkt, en beginnen vervolgens aanpassingen te maken voor onze specifieke taak. De aansluitingen volgens het schema en onder mijn toezicht maakt het kind zelf. Dat is goed. Je moet ook leren om strikt volgens de instructies te werken.

Werkvolgorde ("van specifiek naar algemeen")

Dit is een ingewikkeld punt. We moeten leren dat een groot project (‘een robot maken’) bestaat uit kleinere taken (‘een sensor aansluiten’, ‘de motoren aansluiten’...), en die op hun beurt weer uit nog kleinere stappen (‘een programma vinden’, ‘de printplaat aansluiten’, ‘de firmware uploaden’...). Door meer of minder begrijpelijke taken op een lager niveau uit te voeren, ‘sluiten’ we de taken op gemiddeld niveau af, en daarvan ontstaat het eindresultaat. Ik heb het uitgelegd, maar ik denk dat het besef nog niet snel zal komen. Misschien ergens rond de adolescence.

Montage

Boren, schroefdraad, schroeven, moeren, solderen en de geur van hars — waar zouden we zonder kunnen? Het kind heeft de basisvaardigheid ‘werken met een soldeerbout’ verworven — het is gelukt om enkele verbindingen te solderen (ik heb een beetje geholpen, dat geef ik toe). Vergeet de uitleg over veiligheidsvoorschriften niet.

Werken op de computer

Ik heb het programma voor de robot geschreven, maar er zijn toch enkele nevenresultaten behaald.

Eerste: Engels. Op school is men net begonnen, dus we hebben met veel moeite geprobeerd te begrijpen wat pishalka, migalka, yarkost en andere transliteraties zijn. We hebben dit in ieder geval begrepen. Ik besloot bewust geen Engelse woorden te gebruiken, omdat we dat niveau nog niet hadden bereikt.

Tweede: efficiënt werken. We leerden handige toetscombinaties, hoe we snel standaardoperaties kunnen uitvoeren. Af en toe, wanneer we het programma schreven, wisselden mijn zoon en ik van positie, en ik zei wat er moest gebeuren (vervangen, zoeken, enz.). Ik moest keer op keer herhalen: ‘selecteer met een dubbele klik’, ‘houd Shift ingedrukt’, ‘houd Ctrl ingedrukt’ enzovoort. Het leerproces gaat hier niet snel, maar ik denk dat de vaardigheden geleidelijk in het onderbewustzijn zullen worden opgeslagen.

Verborgen tekstJe zou kunnen zeggen dat het bovenstaande bijna vanzelfsprekend is. Maar, eerlijk gezegd, dit najaar had ik de kans om informatica in de 9e klas op een school te geven. Het is verschrikkelijk. Leerlingen weten zulke elementaire zaken niet als Ctrl + Z, Ctrl + C en Ctrl + V, tekst selecteren met ingedrukte Shift of door dubbel te klikken op een woord, en andere dingen. Dit terwijl ze al het derde jaar informatica krijgen... Maak zelf de conclusie.

Derde: blind typen. Ik liet het kind de opmerkingen in de code typen (laat hem oefenen). We hebben meteen de handen goed gezet, zodat de vingers geleidelijk de plaatsing van de toetsen onthouden.

Zoals je ziet, begint het voor ons nog maar net. We zullen de vaardigheden en kennis blijven aanscherpen, ze zullen van pas komen in het leven.

Trouwens, over de toekomst...

Verdere ontwikkeling

De robot is gemaakt, beweegt, knippert en piept. Wat nu? Geïnspireerd door wat we hebben bereikt, zijn we van plan om verder aan hem te werken. We hebben het idee om hem op afstand te besturen — zoals een maanlander. Het zou interessant zijn om vanaf een soort van afstandsbediening de beweging van de robot te controleren, die zich op een heel andere plek bevindt. Maar dat wordt een ander verhaal...

En tot slot, de helden van dit artikel (video bij klik):

Ervaring met het creëren van de eerste robot op Arduino (robot-"jager")

Bedankt voor uw aandacht!

→ Link naar de code

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster