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!