Хичээл 32 Алхамт моторыг удирдлагаар удирдах

Бид өмнөх хичээлээр алхамт мотор болон IR удирдлагатай ажилласан. Энэ удаагийн хичээлээр бид өмнөх мэдлэг дээрээ тулгуурлан удирдлага ашиглан алхамт моторийг удирдах юм.

Хэрэглэгдэхүүн:

  1. Ардиуно 1ш
  2. Туршилтын хавтан 1ш
  3. IR хүлээн аварч 1ш
  4. IR удирдлага 1ш
  5. ULN2003 stepper motor driver module 1ш
  6. Stepper motor 1ш
  7. Тэжээлийн блок 1ш
  8. 9V 1A adapter 1ш
  9. F-М утас 9ш
  10. М-М утас 1ш

Зарчмын схем

Зарчмын схем
Зарчмын схем

Программ

Программын нь зорилго удирдлаганаас орж ирсэн мэдээллийг уншин гаралтын төхөөрөмж болох алхамт моторыг удирдах юм. Энэхүү кодыг ашиглан нь удирдлагаар алхамт моторын чиглэлийг удирдаж болно. Үүнийг хөгжүүлэн удирдлага ашиглан алхамт моторын хурдыг удирдах боломжтой болгоорой.

#include "Stepper.h"
#include "IRremote.h"

/*----- Variables, Pins -----*/
#define STEPS  32   // Number of steps per revolution of Internal shaft
int  Steps2Take;  // 2048 = 1 Revolution
int receiver = 12; // Signal Pin of IR receiver to Arduino Digital Pin 6

/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4

Stepper small_stepper(STEPS, 8, 10, 9, 11);
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

void setup()
{ 
  irrecv.enableIRIn(); // Start the receiver
}

void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?

  {
    switch(results.value)

    {

      case 0xFFA857: // VOL+ button pressed
                      small_stepper.setSpeed(500); //Max seems to be 500
                      Steps2Take  =  2048;  // Rotate CW
                      small_stepper.step(Steps2Take);
                      delay(2000); 
                      break;

      case 0xFF629D: // VOL- button pressed
                      small_stepper.setSpeed(500);
                      Steps2Take  =  -2048;  // Rotate CCW
                      small_stepper.step(Steps2Take);
                      delay(2000); 
                      break;
                
    }
    
      irrecv.resume(); // receive the next value
                 digitalWrite(8, LOW);
                 digitalWrite(9, LOW);
                 digitalWrite(10, LOW);
                 digitalWrite(11, LOW);       
  }  


}/* --end main loop -- */
Бодит зураг