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

Gebaarbesturingsrobot

Componenten en benodigdheden

Arduino UNO
× 1
Arduino Nano R3
× 1
RF-433 zenderontvanger
× 1
HT12-encoder en decoder
× 1
Adafruit analoge versnellingsmeter:ADXL335
× 1
Motorschild voor Uno
× 1
DC-motor (generiek)
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)

Over dit project

De robot voor gebarenbesturing is een van de meest voorkomende projecten van hobbyisten en studenten om kennis van microcontrollers te begrijpen en te implementeren in een fysiek en praktisch project. Het concept erachter is eenvoudig:de oriëntatie van de handpalm regelt de beweging van de robotauto. Hoe doet het dat, vraag je? Laten we het opsplitsen.

Om een ​​goed begrip te krijgen, gaan we verder door de rol en functie van elk onderdeel te begrijpen en deze vervolgens te combineren om de gewenste prestatie te bereiken.

1. ADXL335 (versnellingsmeter)

De functie van de versnellingsmeter is eenvoudig:de oriëntatie van de pols voelen. De accelerometer meet de acceleratie inclusief de acceleratie als gevolg van de zwaartekracht 'g'. Zo kunnen we de versnellingsmeter gebruiken om de oriëntatie van de pols waar te nemen door de component van 'g' in een bepaalde as van ADXL335 te meten, zoals weergegeven in onderstaande afbeelding:

Door de kanteling van de hand werkt de hoek van de X- en/of Y-as met verticale veranderingen en dus ook een component van de versnelling van de 'g' erop, die kan worden gemeten en dus de oriëntatie van de hand aangeeft.

De ADXL335 kan tot 3g versnelling meten en is gekoppeld aan Arduino door zijn aspinnen aan te sluiten op analoge pinnen van Arduino. De accelerometer geeft spanningswaarden af ​​die evenredig zijn met de acceleratie.

In dit project is Accelerometer verbonden met Arduino Nano en bevestigd aan de handpalm. De ADXL335 voert een spanning uit in het bereik van 0 tot Vcc (toegepaste spanning meestal 3,3 V) en wordt gelezen door Arduino's analoge pinnen. Dus voor de gebruiker krijgen we een waarde in het bereik van 0 tot 1024 (10-bits ADC). De verschillende oriëntatie levert voor elke as een andere analoge waarde op, die vervolgens wordt toegewezen aan verschillende robotbewegingen.

Het schakelschema voor de versnellingsmeter is:

Een testcode om de werking van ADXL335 te begrijpen is als volgt:

void setup(){ pinMode(A0,INPUT); // x-as is verbonden met A0 pinMode (A1, INPUT); // y-as is verbonden met A1 pinMode (A2, INPUT); //z-as is verbonden met A2Serial.begin (9600); // Om gegevens af te drukken naar Serial Monitor}void loop(){ Serial.print(" X="); Serial.println(analogRead(A0)); Serieel.print(" Y="); Serial.println(analogRead(A1)); Serial.print(" Z="); Serial.println(analogRead(A2)); vertraging(1000);} 

U kunt dit programma uitvoeren om te zien welke waarden u krijgt voor voorwaartse, achterwaartse, linkse en rechtse kanteling van uw handpalm en pols, die uiteindelijk zullen worden gebruikt voor het besturen van de robot.

2. RF-433 zender en ontvanger

De functie van de RF-module is eenvoudig:om opdrachtgegevens van de Arduino Nano op de pols te verzenden naar de motor die de Arduino Uno bestuurt. De RF-module maakt gebruik van radiogolven met een frequentie van 433 Hz en vandaar de naam RF-433. Ze gebruiken Amplitude Modulatie om gegevens te verzenden, maar komen niet in veel technische details en houden de dingen eenvoudig, ze zullen worden gebruikt om commando's naar de robot te verzenden, dat wil zeggen:vooruit, achteruit, rechts of links. En als er geen gegevens zijn, sta dan stil. Ze werken goed tot een bereik van 10 meter.

Om nu te begrijpen hoe we de RF-module in ons project kunnen implementeren, gaan we achtereenvolgens aan de zender- en ontvangercircuits werken.

Zendercircuit

Het zendercircuit bestaat uit twee delen:de zender RF en de encoder HT12E. De zender bestaat uit één datapin, één antenne, één aarde en voeding. Het is het werk van de HT12E-encoder om gegevens aan de zender te verstrekken. De encoder bestaat uit 4 datapinnen waarvan de data kan worden verzonden. We zullen deze 4 gegevenspinnen gebruiken om de vier bewegingen weer te geven, een HOOG op deze pinnen staat afzonderlijk voor een van de vier bewegingen en een LAAG op alle pinnen staat voor stilstaan.

Het schakelschema is zoals weergegeven:

De linker pinnen (A0-A7) zijn de adrespinnen en definiëren het paar dat gegevens zal uitwisselen (zender en ontvanger met dezelfde adressen zullen alleen gegevens delen). We stellen A0-A7 in op LAAG (Grounded).

De Data In-pinnen zijn verbonden met Arduino digitale pinnen (in dit project 6 tot 9) en ze zullen de opdrachtgegevens uitvoeren als:

Digitale pinopdracht (wanneer HOOG)

9 Vooruit

10 Achteruit

11 Links

12 Rechts

We zullen de digitale pinnen digitaal schrijven als HOOG op basis van de invoer van ADXL335 om de vereiste beweging uit te voeren.

Ontvangercircuit

Het ontvangercircuit is volledig vergelijkbaar met het zendercircuit zoals weergegeven, maar in plaats van dat de datapinnen als uitvoer van Arduino worden gebruikt, worden ze in dit geval gelezen als invoer om de opdracht voor Arduino Uno op te nemen en de motoren naar wens te laten draaien:

Om het eenvoudiger te maken, kunt u de LED in serie op pin 17 aansluiten met een 1K-weerstand in plaats van het complexe circuit zoals weergegeven om de juiste verbinding met de zender aan te geven.

3. MOTORSCHILD

Het motorschild is het gemakkelijkst te hanteren onderdeel vanwege de beschikbaarheid van de Adafruit-bibliotheek AFMotor, link:- https://github.com/adafruit/Adafruit-Motor-Shield-library

Download en kopieer de bibliotheek in de map Arduino-bibliotheken om deze op te nemen in de programmaschets.

Een voorbeeld van een AFMotor-bibliotheek is als volgt:

#include AF_DCMotor motor(4);//Bevestig motordraden aan punt Motor 4 op shieldvoid setup() { Serial.begin(9600); // stel seriële bibliotheek in op 9600 bps Serial.println ("Motor test!"); // zet motor motor.setSpeed ​​(200) aan; motor.run(RELEASE);}void loop() { uint8_t i; Serial.print("vinkje"); motor.run(VOORUIT); voor (i=0; i<255; i++) { motor.setSpeed(i); vertraging(10);} voor (i=255; i!=0; i--) { motor.setSpeed(i); vertraging(10);} Serial.print("tock"); motor.run(ACHTERUIT); voor (i=0; i<255; i++) { motor.setSpeed(i); vertraging(10);} voor (i=255; i!=0; i--) { motor.setSpeed(i); vertraging(10);} Serial.print("tech"); motor.run(RELEASE); vertraging(1000); 

4. Alles combineren

Het laatste en laatste deel omvat het combineren van alle bovenstaande onderdelen om de complete robot te vormen die de commando's van de hand volgt!

Omdat het motorschild bijna alle digitale pinnen gebruikt, zullen we de analoge pinnen van Arduino Uno gebruiken om de ontvangergegevens te lezen. Het definitieve schakelschema is als volgt:

De motorafscherming zorgt voor de aansluitingen op de motoren. Sluit een 9V-batterij aan op de stroomingang van het schild.

OPMERKING:Persoonlijk geef ik er de voorkeur aan om 2 of zelfs 3,9V-batterijen parallel aan de stroomingang van het schild aan te sluiten om voldoende stroom te leveren om alle vier de motoren te laten werken. Ik heb de vier motoren in een groep van 2 aangesloten (motoren aan dezelfde kant zijn parallel aan elkaar geschakeld en hebben dus alleen motorpunt 3 en 4 nodig om te draaien).

De definitieve code

Voor Arduino Nano:

int x_axis =0;int y_axis =0;int vooruit =9;int achteruit =10;int rechts =11;int links =12;void setup(){ pinMode(A0, INPUT); //X-as pinMode (A3, UITGANG); // Y-as pinMode (vooruit, OUTPUT); // HOOG om vooruit te gaan pinMode (achteruit, OUTPUT); // HOOG om achteruit pinMode te verplaatsen (rechts, OUTPUT); // HOOG om de rechter pinMode (links, OUTPUT) te verplaatsen; //HIGH om Left Serial.begin (9600) te verplaatsen;}void loop (){ x_axis =analogRead (A0); y_axis =analoog lezen (A3); Serieel.print(" X ="); Serieel.println(x_as); Serieel.print(" Y ="); Serieel.println(y_as); if (y_axis>=390) { Serial.println ("Forward"); digitalWrite (vooruit, HOOG); } else { if (y_axis <=310) { Serial.println("BACK"); digitalWrite (achteruit, HOOG); } else { if (x_axis>=380) { Serial.println("RIGHT"); digitalWrite(rechts, HOOG); } else { if (x_axis <=320) { Serial.println("LEFT"); digitalWrite(links, HOOG); } Serieel.println(" "); } } } vertraging (200); if (x_axis> 320 &&x_axis <380 &&y_axis> 310 &&y_axis <390) { digitalWrite(forward, LOW); digitalWrite (achteruit, LAAG); digitalWrite(rechts, LAAG); digitalWrite (links, LAAG); }} 

Voor Arduino Uno:

#includeAF_DCMotor motor_right(3);AF_DCMotor motor_left(4);int forward=0;int backward=0;int right=0;int left=0;void setup() { pinMode (A2, INVOER); pinMode (A3, INGANG); pinMode (A4, INGANG); pinMode(A5,INVOER); Serieel.begin(9600); motor_right.setSpeed(255); motor_left.setSpeed(255); motor_right.run(RELEASE); motor_left.run(RELEASE);}void loop() {forward=digitalRead(A0); achteruit =digitaal lezen (A1); rechts =digitaal lezen (A2); links =digitaal lezen (A3); if(forward==HIGH) {motor_right.run(FORWARD); motor_left.run(VOORUIT); Serial.println("Forward"); } if(backward==HIGH) { motor_right.run(ACHTERWAARTS); motor_left.run(ACHTERUIT); Serial.println("Omgekeerde"); } if(right==HIGH) { motor_right.run(VOORUIT); motor_left.run(RELEASE); Serial.println("RECHTS"); } if(left==HIGH) { motor_right.run(RELEASE); motor_left.run(VOORUIT); Serial.println("LINKS"); } if(left==LAAG&&right==LAAG&&forward==LAAG&&backward==LAAG) { motor_right.run(RELEASE); motor_left.run(RELEASE); } vertraging(100);} 

De foto's en video's zijn hier:


Productieproces

  1. Bedien muntvangers met Arduino
  2. Arduino-controlecentrum
  3. Arduino met Bluetooth om een ​​LED te bedienen!
  4. Lijnvolger Robot
  5. Eenvoudige UNO-rekenmachine
  6. Arduino-luchtbevochtigerbediening
  7. Spraakgestuurde robot
  8. Persistentie van visie
  9. Autobesturing met Arduino Uno en Bluetooth
  10. Bedien de Arduino-robotarm met Android-app
  11. 25 kHz 4-pins PWM-ventilatorregeling met Arduino Uno