3D scanner (3) - Controlarea directiei si vitezei motorului Nema17 folosind bluetooth HC06

Descriere proiect:
Controlul de pe telefon prin bluetooth a motorului pas cu pas NEMA17. Se poate controla direcția și viteza de rotire. Asta o sa ma ajute să opresc sau sa reduc viteza de scanare.

Documentatie proiect:
-Arduino-and-hc-06

Componente:
- Motor NEMA17
- Driver A4988
- Arduino Pro micro
- Cabluri de conectare
- Breadborad
- Suport motor și suport soclu printate 3D
- Bluetooth HC-06 (postari mai vechi legate de bluetooth)


Schema electronica/sistem:

Cod de test:

#include "SoftwareSerial.h"

//Global Variables

// defines pins numbers
const int stepPin = 4; 
const int dirPin = 5; 

char _btRxData; //Most recent received byte from BT Shield
String _btRxBuff=""; //Local buffer for received data
int speedmot=0;

void setup() {
  Serial.begin(57600);
  BluetoothInit();
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}

void loop() {

  //If new byte of data to receive from BT Shield
  if(Serial1.available())
  {
     _btRxData = Serial1.read(); //Read it
     _btRxBuff += _btRxData;   //Add it to buffer
     Serial.print(_btRxData);  //Debug: Send to PC Console 

      if(_btRxData == '1') // Checks whether value of data is equal to 1
         digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
      else if(_btRxData == '0')     //  Checks whether value of data is equal to 0
         digitalWrite(dirPin, LOW); //If value is 0 then LED turns OFF
      
      if(_btRxData == '2') // Checks whether value of data is equal to 2
         speedmot +=100; // If value is 2 then increase the motor speed

      else if(_btRxData == '3')//  Checks whether value of data is equal to 3
         speedmot -=100;   //If value is 3 then reduce the motor speed

      if(_btRxData == 'x') // Checks whether value of data is equal to x
         speedmot = 0; // stop the motor

      if(_btRxData == 'b')// Checks whether value of data is equal to b
         speedmot = 6000; //  set the motor speed

      if(_btRxData == 'c') // Checks whether value of data is equal to c
         speedmot = 60000; // set the motor speed

      if(_btRxData == 'p') // Checks whether value of data is equal to p
         speedmot = 600; // set the motor speed

      if(_btRxData == 't')// Checks whether value of data is equal to t
         speedmot = 500; //set the motor speed
  }
  
  
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(speedmot); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(speedmot); 
  }
}

void BluetoothInit()
{  
  Serial1.begin(57900);
  Serial1.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
  Serial1.print("\r\n+STNA=SeeedBTSlave\r\n"); //set the bluetooth name as "SeeedBTSlave"
  Serial1.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
  Serial1.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
  delay(2000); // This delay is required.
  Serial1.print("\r\n+LOSSRECONN=0\r\n");
  delay(2000);
  Serial1.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable 
  delay(2000); // This delay is required.
  Serial1.flush();
}

In următorul pas o sa lipesc toate componentele pe o placa separata cât mai compactă. Apoi în următorul , probabil și ultimul pas, o sa încep sa scanez câteva obiecte, dar o sa am nevoie și de o placa rotunda foarte dreapta pe care obiectele sa se rotească fără a se înclina.
O seara faină tuturor!