Descriere proiect:
În acest pas al proiectului am creat o carcasă pentru controller, motor și bluetooth. Se văd în imaginile de mai jos cam cum a ieșit, dar părerea mea este că această carcasă este suficient de compactă pentru a o folosi în continuare.
Documentatie proiect:
– Am învățat câteva tehnici de proiectare de pe site-ul tinkercad.com, site de proiectare pentru începători.
Componente:
– Plastic PLA incolor
– Imprimanta 3D
– Smartphone cu bluetooth
– Applicatie Android – Arduino Bluetooth controller v1.3

Schema electronică/sistem:

Cod de test:



#include "SoftwareSerial.h"
#include "BasicStepperDriver.h"
#include "StepperDriver.h"
#include "AccelStepper.h"
#include "A4988.h"
#define MS1 6
#define MS2 7
#define MS3 8
#define ENABLE 5
// Motor steps per revolution. Most steppers are 200 steps or 1.8 degrees/step
#define MOTOR_STEPS 200
#define RPM 360
// Acceleration and deceleration values are always in FULL steps / s^2
#define MOTOR_ACCEL 2000
#define MOTOR_DECEL 1000
// Since microstepping is set externally, make sure this matches the selected mode
// If it doesn't, the motor will move at a different RPM than chosen
// 1=full step, 2=half step etc.
#define MICROSTEPS 8

// All the wires needed for full functionality
#define DIR 3
#define STEP 4

//Global Variables
String command = ""; // Stores response of the HC-06 Bluetooth device
// defines pins numbers
const int stepPin = STEP;
const int dirPin = DIR;
char _btRxData; //Most recent received byte from BT Shield
String _btRxBuff=""; //Local buffer for received data
int speedmot=RPM;
short microsteps=1;
// 2-wire basic config, microstepping is hardwired on the driver
A4988 stepper(MOTOR_STEPS, DIR, STEP, ENABLE, MS1, MS2, MS3);

void setup() {
Serial.begin(57600);
BluetoothInit();
stepper.begin(RPM, MICROSTEPS);
stepper.enable();
/*
* Set LINEAR_SPEED (accelerated) profile.
*/
stepper.setSpeedProfile(stepper.LINEAR_SPEED, MOTOR_ACCEL, MOTOR_DECEL);
Serial.println("START");
/*
* Using non-blocking mode to print out the step intervals.
* We could have just as easily replace everything below this line with
* stepper.rotate(360);
*/
stepper.startRotate(360);
}

void loop() {
static int step = 0;
unsigned wait_time = stepper.nextAction();
//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 1
{
speedmot +=1; // Enables the motor to move in a particular direction
Serial.println(speedmot); //Debug: Send to PC Console
stepper.enable();
}
else if(_btRxData == '3') // Checks whether value of data is equal to 0
{
speedmot -=1; //If value is 0 then LED turns OFF
Serial.println(speedmot); //Debug: Send to PC Console
stepper.enable();
}
if(_btRxData == 'x') // Checks whether value of data is equal to 1
{
speedmot = 0; // Enables the motor to move in a particular direction
microsteps=1;
Serial.println(speedmot); //Debug: Send to PC Console
stepper.disable();
Serial.println("END");
}
if(_btRxData == 'b') // Checks whether value of data is equal to 1
{
speedmot = 1; // Enables the motor to move in a particular direction
Serial.println(speedmot); //Debug: Send to PC Console
stepper.enable();
}
if(_btRxData == 'c') // Checks whether value of data is equal to 1
{
speedmot = 90; // Enables the motor to move in a particular direction
Serial.println(speedmot); //Debug: Send to PC Console
stepper.enable();
}
if(_btRxData == 'p') // Checks whether value of data is equal to 1
{
speedmot = 180; // Enables the motor to move in a particular direction
Serial.println(speedmot); //Debug: Send to PC Console
stepper.enable();
}
if(_btRxData == 't') // Checks whether value of data is equal to 1
{
speedmot = 360; // Enables the motor to move in a particular direction
Serial.println(speedmot); //Debug: Send to PC Console
stepper.enable();
}
if(_btRxData == 's')
{
microsteps++;
stepper.setMicrostep(microsteps);
Serial.println(microsteps); //Debug: Send to PC Console
}
}

/*
* Moving motor one full revolution using the degree notation
*/
stepper.rotate(speedmot);

}

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

Urmează pasul următor, care cuprinde tijele pentru conectarea mecanică cu senzorul și un panou alb în spatele obiectului.
Weekend plăcut tuturor!

De admin

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *


The reCAPTCHA verification period has expired. Please reload the page.