Aansluiting pololu metal gear motors

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 4
Geregistreerd: 24 Nov 2012, 13:00

Aansluiting pololu metal gear motors

Berichtdoor kelly.vanloon » 24 Nov 2012, 13:20

Hallo

Ik ben bezig met een line following robot.
Ik gebruik een arduino uno met daarboven een adafruit motor shield
Ik gebruik ook een QTR-8RC line sensor en 2 micro metal gear Motors
Wanneer ik de motors aansluit op het motorshield krijg ik zeer weinig power.
Wanneer ik een draad van beide motors met de ground verbind krijg ik super veel power.
Ik volg de tutorial: http://www.instructables.com/id/Arduino-based-line-follower-using-Pololu-QTR-8RC-l/

Weet iemand hier een oplossing voor?
Bijlagen
Naamloos-1.jpg
Naamloos-1.jpg (127.3 KiB) 5832 keer bekeken

Advertisement

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Aansluiting pololu metal gear motors

Berichtdoor pjh » 25 Nov 2012, 01:27

heb je de stroom wel in de juiste schroefconnectors gedaan? Op je plaatjes zijn ze leeg....

Afbeelding

Berichten: 4
Geregistreerd: 24 Nov 2012, 13:00

Re: Aansluiting pololu metal gear motors

Berichtdoor kelly.vanloon » 25 Nov 2012, 16:11

Ik verbind een 9V batterij met mijn arduino

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Aansluiting pololu metal gear motors

Berichtdoor pjh » 26 Nov 2012, 17:33

Toen ik eerder met dit ding bezig was, maakte ik een filmpje. Daarop staat als eerste de 9 volt die ik op een externe powersupply heb staan. Hier link: https://www.youtube.com/watch?v=sJF2TcdQhXc

9 volt batterij op de arduino alleen is niet genoeg. Ook te weinig AMPERAGE.

Hier klein overzichtje:
AAA- 1150mAh
AA - 2850mAh
D - 18000mAh
9v - 595mAh

Verder is het onverstandig je 'logica' (arduino) op dezefde stroom te zetten als je motors. Ze kunnen Zo veel stroom trekken, dat alle digitale éénen, prompt nullen worden. Op ADAFRUIT.COM schrijven ze:
2-pin terminal block and jumper to connect external power, for separate logic/motor supplies


Er zit dus weinig 'jus' in die 9 volters. En op de arduino komt deze 9 Volt op de Vin-pin naar buiten. En volgens mij wordt deze niet "afgetapt" op het motorshield. Je werkt dus met 5 en niet met 9 volt.

NB: alleen de servo's krijgen stroom via de arduino. Het motor block (4x DC motor, of 2 x stepper) moet via het eerder genoemde schroefblokje van stroom worden voorzien.

Wat verder is: zie schema van je kaart op adafruit.com. De V+ op de driver chips komt echt van een tweede extra powersupply (rechter bovenhoek)
Afbeelding

Advies: 6 tot 8 x AA op omcircelde 2 schroeven header doen. Daarna verslag doen op de site hier. Ben benieuwd....

Berichten: 4
Geregistreerd: 24 Nov 2012, 13:00

Re: Aansluiting pololu metal gear motors

Berichtdoor kelly.vanloon » 09 Jan 2013, 13:01

Hallo

ik heb een code voor een line follower, maar mijn robot stopt bij een zwarte lijn. Kan iemand eens kijken naar mijn code en me helpen wat er verkeerd zou zijn.

Alvast bedankt.

#include <QTRSensors.h>
#include <AFMotor.h>

AF_DCMotor motor1(1, MOTOR12_64KHZ);
AF_DCMotor motor2(2, MOTOR12_64KHZ);

#define KP .2
#define KD 5
#define M1_DEFAULT_SPEED 50
#define M2_DEFAULT_SPEED 50
#define M1_MAX_SPEED 255
#define M2_MAX_SPEED 255
#define MIDDLE_SENSOR 3
#define NUM_SENSORS 5
#define TIMEOUT 2500
#define EMITTER_PIN 2 // emitter is controlled by digital pin 2
#define DEBUG 0

QTRSensorsRC qtrrc((unsigned char[]) { 4,5,6,7,8} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);

unsigned int sensorValues[NUM_SENSORS];

void setup() // voorbereiding
{
delay(1000); // 1000 miliseconden
manual_calibration(); // De methode wordt opgeroepen
set_motors(0,0); // De methode wordt opgeroepen
}

int lastError = 0;
int last_proportional = 0;
int integral = 0;


void loop()
{
unsigned int sensors[5];
// Het aantal sensors definiëren
int position = qtrrc.readLine(sensors);
// 0 tot 5000, waarbij 0 betekent direct onder de sensor of de lijn werd verloren
int error = position - 2000;
// error = positie - 2000
int motorSpeed = KP * error + KD * (error - lastError);
// De snelheid van de motor is gelijk aan 0,2 * error + 5 * (error - lastError)
lastError = error;
// De lastError = error

int leftMotorSpeed = M1_DEFAULT_SPEED + motorSpeed;
// linkermotor = 150 + motorspeed
int rightMotorSpeed = M2_DEFAULT_SPEED - motorSpeed;
// rechtermotor = 150 + motorspeed

set_motors(leftMotorSpeed, rightMotorSpeed);
// Zet de motor snelheid op (linkermotorsnelheid, rechtermotorsnelheid)
}

void set_motors(int motor1speed, int motor2speed)
{
if (motor1speed > M1_MAX_SPEED ) motor1speed = M1_MAX_SPEED;
// limiet van de snelheid van motor 1
if (motor2speed > M2_MAX_SPEED ) motor2speed = M2_MAX_SPEED;
// limiet van de snelheid van motor 2
if (motor1speed < 0) motor1speed = 0;
// Houd motor 1 boven de 0
if (motor2speed < 0) motor2speed = 0;
// Houd motor 2 boven de 0
motor1.setSpeed(motor1speed);
// Zet de motorsnelheid van motor 1 om in rotatie per minuut
motor2.setSpeed(motor2speed);
// Zet de motorsnelheid van motor 2 om in rotatie per minuut
motor1.run(FORWARD);
// Laat de motor 1 voorwaarts rijden
motor2.run(FORWARD);
// laat de motor 2 voorwaarts rijden
}


void manual_calibration() {
int i;
for (i = 0; i < 250; i++)
// de kalibratie neemt enkele seconden
{
qtrrc.calibrate(QTR_EMITTERS_ON);
// Het zet de emitter pin aan
delay(20);
// met een tussenstop van 20 miliseconden
}
if (DEBUG) {
// Als het juist is, zendt de sensor de data naar de seriele output
Serial.begin(9600);
for (int i = 0; i < NUM_SENSORS; i++)
// verhoog i, zolang i kleiner is dan het aantal sensors
{
Serial.print(qtrrc.calibratedMinimumOn[i]);
// print de kalibratie tot een minimum bij een emitter pin die on is, bij sensor i
Serial.print(' ');
// daarna een lege print
}
Serial.println();
// print data naar de seriele output, als menselijke taal via de ASCII tabel
for (int i = 0; i < NUM_SENSORS; i++)
// verhoog i, zolang i kleiner is dan het aantal sensors
{
Serial.print(qtrrc.calibratedMaximumOn[i]);
// print de kalibratie tot een maximum bij een emitter pin die on is, bij sensor i
Serial.print(' ');
// daarna een lege print
}
Serial.println();
// print data naar de seriele output, als menselijke taal via de ASCII tabel
Serial.println();
// print data naar de seriele output, als menselijke taal via de ASCII tabel
}
}

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 19 gasten