Arduino Pilotare Metal DC Geared Motor 12V 122rpm con Encoder

Premessa: questo è un motoriduttore con encoder , modello n. GB37Y3530-12V-90EN. È un potente motore a 12V con un cambio in metallo 90:1 e un encoder di quadratura integrato che fornisce una risoluzione di 64 conteggi per giro dell’albero motore, che corrisponde a 5756 conteggi per giro dell’albero di uscita del cambio. Queste unità hanno un albero di uscita a forma di D lungo 0,61″ di diametro 6 mm. Questo motore è progettato per l’uso a 12V, sebbene il motore possa iniziare a ruotare a tensioni basse come 1V. La piastra frontale ha sei fori di montaggio distribuiti uniformemente attorno al bordo esterno filettato per viti M3. Questi fori di montaggio formano un esagono regolare e i centri dei fori adiacenti sono distanti 15,5 mm. Questo motore è un’opzione ideale per il tuo progetto di robot mobile .

Avvertenza: non avvitare troppo nei fori di montaggio poiché le viti possono colpire gli ingranaggi. Il produttore consiglia di avvitare non più di 3mm (1/8″) nel foro della vite.

CARATTERISTICHE TECNICHE

  • Gear ratio: 90:1
  • No-load speed: 122 10% RPM
  • No-load current: 350 mA
  • Start Voltage: 1.0 V
  • Stall Torque: 38 Kg.com
  • Stall Current: 7 A
  • Insulation resistance: 20 M Ω
  • EncoderOperating Voltage: 5 V
  • Encoder type: Hall
  • Encoder Resolution: 16CPR(motor shaft)/1440CPR(gearbox shaft)
  • Weight: 205g

LISTA MATERIALI

SCHEMA DI COLLEGAMENTO

INTERRUPT PORTE SCHEDE ARDUINO

CODICE DI ESEMPIO

//The sample code for driving one way motor encoder
const byte encoder0pinA = 2;//A pin -> the interrupt pin 0
const byte encoder0pinB = 4;//B pin -> the digital pin 4
byte encoder0PinALast;
int duration;//the number of the pulses
boolean Direction;//the rotation direction


void setup()
{
  Serial.begin(57600);//Initialize the serial port
  EncoderInit();//Initialize the module
}

void loop()
{
  Serial.print("Pulse:");
  Serial.println(duration);
  duration = 0;
  delay(100);
}

void EncoderInit()
{
  Direction = true;//default -> Forward
  pinMode(encoder0pinB,INPUT);
  attachInterrupt(0, wheelSpeed, CHANGE);
}

void wheelSpeed()
{
  int Lstate = digitalRead(encoder0pinA);
  if((encoder0PinALast == LOW) && Lstate==HIGH)
  {
    int val = digitalRead(encoder0pinB);
    if(val == LOW && Direction)
    {
      Direction = false; //Reverse
    }
    else if(val == HIGH && !Direction)
    {
      Direction = true;  //Forward
    }
  }
  encoder0PinALast = Lstate;

  if(!Direction)  duration  ;
  else  duration--;
}

Buon Progetto.