INHOUDSOPGAWE:

Die botterrobot: die Arduino -robot met eksistensiële krisis: 6 stappe (met foto's)
Die botterrobot: die Arduino -robot met eksistensiële krisis: 6 stappe (met foto's)

Video: Die botterrobot: die Arduino -robot met eksistensiële krisis: 6 stappe (met foto's)

Video: Die botterrobot: die Arduino -robot met eksistensiële krisis: 6 stappe (met foto's)
Video: die 2024, Julie
Anonim
Image
Image

Hierdie projek is gebaseer op die geanimeerde reeks "Rick and Morty". In een van die episodes maak Rick 'n robot met die enigste doel om botter te bring. As studente van Bruface (Brussel Fakulteit Ingenieurswese) het ons 'n opdrag vir die megatronika -projek om 'n robot te bou wat gebaseer is op 'n voorgestelde onderwerp. Die opdrag vir hierdie projek is: Maak 'n robot wat slegs botter bedien. Dit kan 'n eksistensiële krisis hê. Natuurlik is die robot in die episode van Rick en Morty 'n redelik ingewikkelde robot en moet 'n paar vereenvoudigings gemaak word:

Aangesien die enigste doel is om botter te bring, is daar meer eenvoudige alternatiewe. In plaas daarvan om die robot te laat lyk en die botter te gryp, kan die robot die botter die hele tyd dra voordat hy dit by die regte persoon bring. Die belangrikste idee is dus om 'n wa te maak wat die botter vervoer na waar dit moet wees.

Afgesien van die vervoer van die botter, moet die robot weet waarheen hy die botter moet bring. In die episode gebruik Rick sy stem om die robot te bel en te beveel. Dit verg 'n duur stelsel vir spraakherkenning en is te ingewikkeld. In plaas daarvan kry almal aan die tafel 'n knoppie: sodra hierdie knoppie geaktiveer is, kan die robot hierdie knoppie opspoor en daarheen beweeg.

Om 'n opsomming te maak, moet die robot aan die volgende vereistes voldoen:

  • Dit moet veilig wees: dit moet hindernisse vermy en voorkom dat dit van die tafel val;
  • Die robot moet klein wees: die ruimte op die tafel is beperk en niemand wil 'n robot hê wat botter bedien nie, maar die helfte groter is as die tafel self;
  • Die werking van die robot kan nie afhang van die grootte of vorm van die tafel nie; dit kan op verskillende tafels gebruik word;
  • Dit moet die botter na die regte persoon by die tafel bring.

Stap 1: Hoofkonsep

Aan die voorafgaande vereistes kan met verskillende tegnieke voldoen word. Die besluite oor die belangrikste ontwerp wat geneem is, word in hierdie stap verduidelik. Besonderhede oor hoe hierdie idees geïmplementeer word, kan in die volgende stappe gevind word.

Om sy plig uit te voer, moet die robot beweeg totdat die bestemming bereik is. Met inagneming van die toepassing van die robot, is dit eenvoudig dat dit beter is om wiele in plaas van 'n "loop" -beweging te laat beweeg. Aangesien 'n tafel 'n plat oppervlak is en die robot nie baie hoë snelhede sal bereik nie, is twee bedieningswiele en 'n rolbal die eenvoudigste en maklikste om te beheer. Die aangedrewe wiele moet deur twee motors aangedryf word. Die motors moet 'n groot wringkrag hê, maar hulle hoef nie 'n hoë snelheid te bereik nie, daarom word deurlopende servomotors gebruik. 'N Ander voordeel van servomotore is die eenvoud van gebruik met 'n Arduino.

Die opsporing van hindernisse kan gedoen word met behulp van 'n ultrasoniese sensor wat die afstand meet, wat aan 'n servomotor geheg is om die rigting van die meting te kies. Die rande kan opgespoor word met behulp van LDR -sensors. Om LDR -sensors te gebruik, benodig die bou van 'n toestel wat beide 'n LED -lig en 'n LDR -sensor bevat. 'N LDR -sensor meet die weerkaatste lig en kan gesien word as 'n soort afstandsensor. Dieselfde beginsel bestaan met infrarooi lig. Daar bestaan 'n paar infrarooi nabyheidssensors met 'n digitale uitset: naby of nie naby nie. Dit is presies wat die robot nodig het om die rande op te spoor. Deur twee randsensors wat soos twee insekantennas geplaas is, en een ultraklank sensor te kombineer, behoort die robot hindernisse en rande te kan vermy.

Die knoppie -opsporing kan ook bewerkstellig word met behulp van IR -sensors en LED's. Die voordeel van IR is dat dit onsigbaar is, wat die gebruik daarvan nie steurend maak vir die mense aan tafel nie. Lasers kan ook gebruik word, maar dan is die lig sigbaar en ook gevaarlik as iemand die laser in 'n ander se oog wys. Die gebruiker sal ook die sensors op die robot moet rig met slegs 'n dun laserstraal, wat nogal irriterend sal wees. Deur die robot toe te rus met twee IR-sensors en die knoppie met 'n IR-gelei te ontwerp, weet die robot watter rigting hy moet gaan deur die intensiteit van die IR-lig te volg. As daar geen knoppie is nie, kan die robot omdraai totdat een van die LED's die sein van een van die knoppies vang.

Die botter word in 'n kompartement bo -op die robot gesit. Hierdie kompartement kan bestaan uit 'n boks en 'n bedekte deksel om die boks oop te maak. Om die deksel oop te maak en die ultrasoniese sensor te beweeg om die hindernisse wat ons benodig, te skandeer en op te spoor, en vir hierdie doel is nie -deurlopende servomotore meer aangepas omdat die motors in 'n sekere posisie moet gaan en die posisie moet behou.

'N Bykomende kenmerk van die projek was om met 'n robotstem met die eksterne omgewing te kommunikeer. 'N Gonser is eenvoudig en aangepas vir hierdie doel, maar dit kan nie op enige tyd gebruik word nie, want die huidige trekking is hoog.

Die grootste probleme van die projek hang af van die kodering, aangesien die meganiese deel redelik eenvoudig is. Baie gevalle moet in ag geneem word om te voorkom dat die robot vassteek of iets ongewens doen. Die belangrikste probleme wat ons moet oplos, is die verlies van die IR -sein as gevolg van 'n hindernis en stop as dit by die knoppie kom!

Stap 2: materiaal

Meganiese onderdele

  • 3D -drukker en lasersnymasjien

    • PLA sal gebruik word vir 3D -druk, maar u kan ook ABS gebruik
    • 'N Bord van 3 mm berkhout laaghout sal gebruik word vir lasersnyding, aangesien dit die moontlikheid bied om later maklik veranderings aan te bring; plexiglas kan ook gebruik word, maar dit is moeiliker om dit eers aan te pas sodra dit laser gesny is sonder om dit te vernietig
  • Boute, moere, ringe

    Die meeste komponente word bymekaar gehou met behulp van M3 -knoppies, ringe en moere, maar sommige van hulle benodig M2- of M4 -boute. Die lengte van die boute is tussen 8 en 12 mm

  • PCB afstandhouders, 25 mm en 15 mm
  • 2 Servomotors met versoenbare wiele
  • 'N Dik metaaldraad met 'n deursnee van 1-2 mm

Elektroniese onderdele

  • Mikrobeheerder

    1 arduino UNO -bord

  • Servomotors

    • 2 groot servomotore: Voetech deurlopende 6 kg 360 grade
    • 2 mikro servomotore: Feetech FS90
  • Sensors

    • 1 Ultrasoniese sensor
    • 2 IR nabyheid sensors
    • 2 IR fotodiodes
  • Batterye

    • 1 9V batteryhouer + battery
    • 1 4AA batteryhouer + batterye
    • 1 9V battery boks + battery
  • Bykomende komponente

    • 'N Paar springdrade, drade en soldeerplate
    • Sommige weerstande
    • 1 IR LED
    • 3 skakelaars
    • 1 gonser
    • 1 knoppie
    • 1 Arduino tot 9V batteryaansluiting

Stap 3: Toets die elektronika

Toets die elektronika
Toets die elektronika
Toets die elektronika
Toets die elektronika

Skep van die knoppie:

Die knoppie word eenvoudig gemaak deur 'n skakelaar, 'n infrarooi LED en 'n 220 Ohm -weerstand in serie, aangedryf deur 'n 9V -battery. Dit word in 'n 9V -batterypak geplaas vir 'n kompakte en skoon ontwerp.

Skep van die infrarooi ontvanger modules:

Hierdie modules is vervaardig met soldeerborde wat deur gate gemaak word, wat later met skroewe aan die robot geheg sal word. Die stroombane vir hierdie modules word in die algemene skemas uitgebeeld. Die beginsel is om die intensiteit van die infrarooi lig te meet. Om die metings te verbeter, kan kollimators (gemaak met krimpbuise) gebruik word om op 'n sekere rigting te fokus.

Met behulp van elektroniese toestelle moet verskillende vereistes van die projek bereik word. Die aantal toestelle moet beperk word om 'n relatiewe lae kompleksiteit te behou. Hierdie stap bevat die bedradingskemas en elke kode om al die onderdele afsonderlik te toets:

  • Deurlopende Servomotors;
  • Ultrasoniese sensor;
  • Nie -deurlopende Servomotors;
  • Gonser;
  • IR knoppie rigting opsporing;
  • Randopsporing deur nabyheidsensors;

Hierdie kodes kan help om die komponente aan die begin te verstaan, maar dit is ook baie handig vir ontfouting in latere stadiums. As 'n sekere probleem voorkom, kan die fout makliker opgespoor word deur al die komponente afsonderlik te toets.

Stap 4: Ontwerp met 3D -drukwerk en lasersnit

3D -gedrukte en laser gesnyde stukke ontwerp
3D -gedrukte en laser gesnyde stukke ontwerp
3D -gedrukte en laser gesnyde stukke ontwerp
3D -gedrukte en laser gesnyde stukke ontwerp
3D -gedrukte en laser gesnyde stukke ontwerp
3D -gedrukte en laser gesnyde stukke ontwerp

Laser gesnyde stukke

Die samestelling bestaan uit drie horisontale hoofplate wat deur PCB -afstandhouers aan mekaar gehou word om 'n oop ontwerp te kry wat maklik toegang tot die elektronika bied indien nodig.

Die plate moet die nodige gate laat sny om die afstandhouers en ander komponente vir die finale samestelling vas te skroef. Al drie plate het hoofsaaklik gate op dieselfde plek vir die afstandhouers en spesifieke gate vir die elektronika wat op elke plaat vasgemaak is. Let op dat die middelste plaat 'n gat het om drade in die middel te laat loop.

Kleiner stukke word in die afmetings van die groot servo gesny om dit aan die vergadering vas te maak.

3D -gedrukte stukke

Benewens laser sny, moet 'n paar stukke 3D -gedruk word:

  • Die ondersteuning vir die ultrasoniese sensor, wat dit koppel aan 'n arm met 'n mikro -servomotor
  • Die ondersteuning vir die wielwiel en die twee IR -rand sensors. Die spesifieke ontwerp van die tipe boksvormige ente van die stuk vir die IR -sensors dien as 'n skerm om interferensies te vermy tussen die knoppie wat IR -sein uitstraal en die IR -sensors wat slegs moet fokus op wat op die grond gebeur.
  • Die ondersteuning vir die mikroservomotor wat die deksel oopmaak
  • En laastens die deksel self, uit twee stukke om 'n groter werkhoek te hê, deur te voorkom dat botsing met die mikroservomotor die deksel oopmaak:

    • Die onderste een word aan die boonste plaat vasgemaak
    • En die bokant wat met 'n skarnier aan die onderkant gekoppel is, en deur die servo met 'n dik metaaldraad aangedryf word. Ons het besluit om 'n bietjie persoonlikheid by die robot te voeg deur 'n kop daarvoor te gee.

Sodra al die stukke ontwerp is en die lêers uitgevoer is in die korrekte formaat vir die gebruikte masjiene, kan die stukke eintlik gemaak word. Hou in gedagte dat 3D -druk baie tyd verg, veral met die afmetings van die boonste deel van die deksel. Miskien het u een of twee dae nodig om al die stukke te druk. Laser sny is egter net 'n kwessie van minute.

Al die SOLIDWORKS-lêers kan gevind word in die rits-lêergids.

Stap 5: Montering en bedrading

Image
Image
Montage en bedrading
Montage en bedrading
Montage en bedrading
Montage en bedrading
Montage en bedrading
Montage en bedrading

Die samestelling bestaan uit 'n mengsel van bedrading en die skroef van die komponente, van onder na bo.

Onderplaat

Die onderste plaat is saamgestel met die 4AA-batterypak, die servomotore, die gedrukte deel (wat die kogel onder die plaat vasmaak), die twee randsensors en 6 afstandhouers tussen die wyfies.

Middelplaat

Vervolgens kan die middelste plaat gemonteer word om die servomotors tussen die twee plate saam te pers. Hierdie bord kan dan reggemaak word deur nog 'n stel afstandhouers daarop te sit. Sommige kabels kan deur die middelste gat gelei word.

Die ultrasoniese module kan aan 'n nie-deurlopende servo gekoppel word, wat op die middelste plaat vasgemaak is met die Arduino, die 9V-batterypak (wat die arduino aandryf) en die twee infrarooi ontvanger-modules aan die voorkant van die robot. Hierdie modules word gemaak met soldeerborde wat deur deurgatings gemaak word en met skroewe aan die plaat vasgemaak. Die stroombane vir hierdie modules word in die algemene skemas uitgebeeld.

Boonste bord

In hierdie deel van die vergadering is die skakelaars nie vasgemaak nie, maar die robot kan reeds alles doen behalwe aksies wat die deksel vereis, sodat ons 'n toets kan doen om die drempelwaarde reg te stel, die bewegingskode aan te pas en maklik te wees toegang tot die hawens van die arduino.

As dit alles bereik is, kan die boonste plaat met afstandhouers vasgemaak word. Die laaste komponente, die twee skakelaars, die knoppie, die servo, die zoemer en die dekselsisteem, kan uiteindelik aan die boonste plaat vasgemaak word om die vergadering te voltooi.

Die laaste ding om te toets en reg te stel, is die hoek van die servo om die deksel korrek oop te maak.

Die drumpel van die randsensors moet aangepas word met die meegeleverde potensiometer (met behulp van 'n plat skroewedraaier) vir verskillende tafeloppervlaktes. 'N Wit tafel moet byvoorbeeld 'n laer drumpel hê as 'n bruin tafel. Ook die hoogte van die sensors sal die benodigde drempel beïnvloed.

Aan die einde van hierdie stap is die samestelling klaar en die laaste oorblywende deel is die ontbrekende kodes.

Stap 6: Kodering: Alles saamvoeg

Al die nodige kode om die robot te laat werk, is in die zip -lêer wat afgelaai kan word. Die belangrikste is die 'hoof' kode wat die opstel en funksionele lus van die robot insluit. Die meeste ander funksies word in sub-lêers geskryf (ook in die rits-gids). Hierdie sub-lêers moet in dieselfde gids (met die naam 'hoof') as die hoofskrip gestoor word voordat dit na die Arduino opgelaai word

Eerstens word die algemene snelheid van die robot saam met die veranderlike "herinner" gedefinieer. Hierdie 'herinner' is 'n waarde wat onthou in watter rigting die robot gedraai het. As "herinner = 1", draai/draai die robot links, as "herinner = 2", draai/draai die robot regs.

int spoed = 9; // Algemene snelheid van die robot

int herinner = 1; // Aanvanklike rigting

In die opstelling van die robot word die verskillende sub-lêers van die program geïnisialiseer. In hierdie sub-lêers word die basiese funksies vir die beheer van die motors, sensors, … geskryf. Deur hulle in die opset te initialiseer, kan die funksies wat in elk van hierdie lêers beskryf word, in die hooflus gebruik word. Deur die funksie r2D2 () te aktiveer, sal die robot 'n geluid maak soos die R2D2 -robot uit die Star Wars -filmfranchise wanneer dit begin. Hier is die funksie r2D2 () uitgeskakel om te verhoed dat die zoemer te veel stroom trek.

// Opstel @ reset // ----------------

ongeldige opstelling () {initialize_IR_sensors (); initialize_obstacles_and_edges (); inisialiseer_beweging (); initialize_lid (); initialize_buzzer (); // r2D2 (); int herinner = 1; // aanvanklike rigting Starter (herinner); }

Die opstartfunksie (herinner) word eers in die opstelling gebruik. Hierdie funksie laat die robot omdraai en soek na die IR -sein van een van die knoppies. Sodra die knoppie gevind is, verlaat die program die Starter -funksie deur die veranderlike 'kond' na 'false' te verander. Dit word elke keer nagegaan voordat dit omdraai. Sodra die robot 'n hindernis of rand opspoor, word die protokol om hierdie hindernisse of rande te vermy uitgevoer. Hierdie protokolle sal later in hierdie stap verduidelik word. Die beginfunksie het een veranderlike, die herinneringsveranderlike wat voorheen bespreek is. Deur die herinneringswaarde aan die Starter -funksie te gee, weet die robot in watter rigting hy moet draai om na die knoppie te soek.

// Beginlus: draai om en soek na die knoppie // ------------------------------------ ----------------

void Starter (intinner) {if (isedgeleft () || isedgeright ()) {// Ontdek die rande edgeDetected (reminder); } anders {bool cond = true; terwyl (cond == waar) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } anders {if (remember == 1) {// Ons het links gedraai as (isobstacleleft ()) {stopspeed (); vermy_obbel (herinner); } anders as (isedgeleft () || isedgeright ()) {// Ontdek die rande edgeDetected (herinner); } anders {draai links (spoed); }} anders as (herinner == 2) {if (isobstacleright ()) {stopspeed (); vermy_obbel (herinner); } anders as (isedgeleft () || isedgeright ()) {// Ontdek die rande edgeDetected (herinner); } anders {regs (spoed); }}}}}}}

As die robot die knoppie vind, word die eerste Starter -lus verlaat en begin die belangrikste, funksionele lus van die robot. Hierdie hooflus is redelik ingewikkeld, want elke keer moet die robot opspoor of daar 'n hindernis of 'n rand voor is. Die belangrikste idee is dat die robot die knoppie volg deur dit te vind en dit elke keer te verloor. Deur twee IR -sensors te gebruik, kan ons drie situasies onderskei:

  • die verskil tussen die IR -lig wat deur die linker en regter sensor waargeneem word, is groter as 'n sekere drempel, en daar is 'n knoppie.
  • die verskil in IR -lig is kleiner as die drumpel, en daar is 'n knoppie voor die robot.
  • die verskil in IR -lig is kleiner as die drumpel, en daar is GEEN knoppie voor die robot nie.

Die manier waarop die baanroetine werk, is soos volg: as die knoppie opgespoor word, beweeg die robot na die knoppie deur in dieselfde rigting te draai as wat hy gedraai het (met behulp van die herinneringsveranderlike) en beweeg terselfdertyd 'n bietjie vorentoe. As die robot te ver draai, gaan die knoppie weer verlore, en op hierdie punt onthou die robot dat hy in die ander rigting moet draai. Dit word ook gedoen terwyl u 'n bietjie vorentoe beweeg. Deur dit te doen, draai die robot voortdurend links en draai hy regs, maar vorder intussen steeds na die knoppie. Elke keer as die robot die knoppie vind, bly hy net draai totdat hy dit verloor het, in welke geval dit in die ander rigting begin beweeg. Let op die verskil in funksies wat in die beginlus en die hooflus gebruik word: "turnleft ()" of "turnright ()", terwyl die hooflus "moveleft ()" en "moveright ()" gebruik. Die bewegings-/regterfunksies laat die robot nie net draai nie, maar laat hom terselfdertyd vorentoe beweeg.

/ * Funksionele lus ---------------------------- Hier is slegs die baanroetine */

int verlore = 0; // As verlore = 0 word die knoppie gevind, as dit verlore = 1 is, verloor die knoppie leemte () {if (isedgeleft () || isedgeright ()) {

as (! isobstacle ()) {

vorentoe (spoed); vertraging (5); } anders {vermy_obbel (herinner); } anders {if (reminder == 1 && lost == 1) {// Ons draai links na stopsnelheid (); as (! isobstacleright ()) {beweeg (spoed); // Draai om om die knoppie te vind} anders {avoid_obstacle (herinner); } herinner = 2; } anders as (herinner == 2 && verlore == 1) {stopspeed (); as (! isobstacleleft ()) {moveleft (spoed); // Ons draai regs} anders {avoid_obstacle (herinner); } herinner = 1; } anders as (verlore == 0) {if (herinnering == 1) {// Ons draai links as (! isobstacleleft ()) {moveleft (spoed); // Ons draai regs} anders {stopspeed (); vermy_obbel (herinner); } //} anders as (herinner == 2) {if (! isobstacleright ()) {moveright (spoed); // Draai om om die knoppie te vind} else {stopspeed (); vermy_obbel (herinner); }}} vertraging (10); verlore = 0; }} //}}

Nou word 'n bietjie verduideliking gegee van die twee mees komplekse roetines:

Vermy rande

Die protokol om rande te vermy, word gedefinieer in 'n funksie genaamd "edgeDetection ()" wat in die sub-lêer "beweging" geskryf is. Hierdie protokol berus daarop dat die robot slegs 'n voorsprong moet ondervind wanneer hy sy bestemming bereik het: die knoppie. Sodra die robot 'n rand opspoor, is die eerste ding wat hy doen om 'n bietjie terug te beweeg om veilig van die rand af te kom. Sodra dit gedoen is, wag die robot 2 sekondes. As iemand in die twee sekondes op die knoppie aan die voorkant van die robot druk, weet die robot dat dit die persoon bereik het wat die botter wil hê, en maak die botterkompartement oop en bied die botter aan. Op hierdie stadium kan iemand botter uit die robot neem. Na 'n paar sekondes raak die robot moeg om te wag en maak die botterdeksel toe. Sodra die deksel toegemaak is, voer die robot die Starter -lus uit om na 'n ander knoppie te soek. As dit gebeur dat die robot 'n rand teëkom voordat hy sy bestemming bereik en die knoppie aan die voorkant van die robot nie ingedruk word nie, sal die robot nie die botterdeksel oopmaak nie en sal die Starter -lus onmiddellik uitgevoer word.

Vermy hindernisse

Die Avoid_obstacle () funksie is ook geleë in die sub-lêer "beweging". Die moeilike deel om hindernisse te vermy, is die feit dat die robot 'n redelik groot blindekol het. Die ultrasoniese sensor word aan die voorkant van die robot geplaas, wat beteken dat dit struikelblokke kan opspoor, maar nie weet wanneer dit verby hom is nie. Om dit op te los, word die volgende beginsel gebruik: Sodra die robot 'n hindernis teëkom, gebruik hy die veranderlike om in die ander rigting te draai. Op hierdie manier vermy die robot die hindernis. Die robot bly draai totdat die ultrasoniese sensor nie meer die hindernis opspoor nie. Gedurende die tyd wat die robot draai, word 'n teller verhoog totdat die hindernis nie meer opgespoor word nie. Hierdie toonbank gee dan 'n benadering van die lengte van die hindernis. Deur dan vorentoe te beweeg en die toonbank terselfdertyd te verminder, kan die hindernis vermy word. Sodra die teller 0 bereik het, kan die beginfunksie weer gebruik word om die knoppie te verskuif. Natuurlik doen die robot die Starter -funksie deur te draai in die rigting waarin hy onthou dat dit gaan voordat hy die hindernis teëkom (weer met die herinneringsveranderlike).

Noudat u die kode ten volle verstaan het, kan u dit begin gebruik!

Pas die drempels by u omgewing aan (IR -refleksie is byvoorbeeld hoër op wit tafels) en pas die verskillende parameters aan by u behoeftes. Groot aandag moet ook gegee word aan die drywing van die verskillende modules. Dit is van groot belang dat die servomotors nie deur die Arduino 5V -poort aangedryf word nie, aangesien dit baie stroom neem (dit kan die mikrobeheerder beskadig). As dieselfde kragbron vir die sensors gebruik word as die een vir die servo's, kan daar probleme met die meet ontstaan.

Aanbeveel: