——
#DonLucElectronics #DonLuc #Robotics #Arduino #Fio #XBee #Stepper #EasyDriver #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant
——
——
——
——
Stepper Motor
A stepper motor, also known as step motor or stepping motor, is a brushless DC electric motor that divides a full rotation into a number of equal steps. The motor’s position can be commanded to move and hold at one of these steps without any position sensor for feedback, as long as the motor is correctly sized to the application in respect to torque and speed. Switched reluctance motors are very large stepping motors with a reduced pole count, and generally are closed-loop commutated.
EasyDriver – Stepper Motor Driver
The EasyDriver is a simple to use stepper motor driver, compatible with anything that can output a digital 0 to 5V pulse. The EasyDriver requires a 6V to 30V supply to power the motor and can power any voltage of stepper motor. The EasyDriver has an on board voltage regulator for the digital interface that can be set to 5V. Connect a 4-wire stepper motor and a microcontroller and you’ve got precision motor control! EasyDriver drives bi-polar motors, and motors wired as bi-polar.
DL2112Mk06
2 x Fio v3 – ATmega32U4
2 x XBee S1
2 x Lithium Ion Battery – 850mAh
1 x Thumb Joystick
1 x SparkFun Thumb Joystick Breakout
1 x Slide Pot (Small)
1 x Slide Potentiometer Knob
1 x RGB Smart NeoPixel
1 x Pololu Adjustable Step-Up Voltage Regulator U1V11A
2 x EasyDriver
2 x Small Stepper
1 x Nine Volt Battery
1 x 9V Battery Connector
1 x Half-Size Breadboard
1 x Full-Size Breadboard
1 x SparkFun Cerberus USB Cable
Fio v3 – ATmega32U4 – Transmitter
XBee S1: Transmitter
CH Channel: C
PAN Id: 3333
SH Serial Number: 13A200
SL Serial Number: 40717A1F
CE Coordinator: Coordinator
BD: 9600
RX0 – Digital 0
TX0 – Digital 1
PO0 – Analog A0
JY0 – Analog A1
JY1 – Analog A2
SE0 – Digital 16
VIN – +3.3V
GND – GND
DL2112Mk06t.ino
/* ***** Don Luc Electronics © *****
Software Version Information
Project #12: Robotics - XBee S1 - Transmitter - Mk16
12-06
DL2112Mk06t.ino
1 x Fio v3 - ATmega32U4
1 x XBee S1
1 x Lithium Ion Battery - 850mAh
1 x Thumb Joystick
1 x SparkFun Thumb Joystick Breakout
1 x Slide Pot (Small)
1 x Slide Potentiometer Knob
1 x SparkFun Cerberus USB Cable
*/
// Include the Library Code
// EEPROM library to read and write EEPROM with unique ID for unit
#include <EEPROM.h>
// Communication
unsigned long dTime = 200;
// Slide Pot (Small)
// Select the input pin for the slide pot
// Power
const int iSP1 = A0;
// Power to store the value
int iPower = 0;
// Connections to joystick
// Vertical
const int VERT = A1;
// Horizontal
const int HORIZ = A2;
// Pushbutton
const int SEL = 16;
// Initialize variables for analog and digital values
int vertical;
int horizontal;
int select;
// Software Version Information
// Version
String sver = "12-16t";
// Unit ID Information
// UID
String uid = "";
void loop()
{
// Thumb Joystick
isThumbJoystick();
// Process Message
isProcessMessage();
delay( dTime );
}
getEEPROM.ino
// EEPROM
// is UID
void isUID()
{
// Is Unit ID
// UID
uid = "";
for (int x = 0; x < 5; x++)
{
uid = uid + char(EEPROM.read(x));
}
}
getProcessMessage.ino
// Process Message
// isProcessMessage
void isProcessMessage() {
// Loop through serial buffer
// Print = "<" + vertical + "|" + horizontal + "|" + select + "|" + iValue + "|" + sver + "|" + uid + "*"
Serial1.print( '<' );
Serial1.print( vertical );
Serial1.print( '|' );
Serial1.print( horizontal );
Serial1.print( '|' );
Serial1.print( select );
Serial1.print( '|' );
Serial1.print( iPower );
Serial1.print( '|' );
Serial1.print( sver );
Serial1.print( '|' );
Serial1.print( uid );
Serial1.println( '*' );
}
getThumbJoystick.ino
// Thumb Joystick
void isThumbJoystick() {
// Read all values from the joystick
// Joystick was sitting around 520 for the vertical and horizontal values
// Will be 0-1023
vertical = analogRead(VERT);
// Will be 0-1023
horizontal = analogRead(HORIZ);
// Will be HIGH (1) if not pressed, and LOW (0) if pressed
select = digitalRead(SEL);
// Read the value
// Power be 0-1023
iPower = analogRead( iSP1 );
}
setup.ino
// Setup
void setup()
{
// EEPROM Unit ID
isUID();
// Pause
delay(5);
// Make the SEL line an input
pinMode(SEL, INPUT_PULLUP);
// Open Serial1 port at 9600 baud
Serial1.begin( 9600 );
// Pause
delay(5);
}
——
Fio v3 – ATmega32U4 – Receiver
XBee S1: Receiver
CH Channel: C
PAN Id: 3333
SH Serial Number: 13A200
SL Serial Number: 4076E2C5
CE Coordinator: End Device
BD: 9600
RX0 – Digital 0
TX0 – Digital 1
DR0 – Digital 2
ST0 – Digital 3
DR1 – Digital 4
ST1 – Digital 5
NEO – Digital 6
VIN – +3.3V
GND – GND
DL2112Mk06r.ino
/* ***** Don Luc Electronics © *****
Software Version Information
Project #12: Robotics - EasyDriver - Mk16
12-06
DL2112Mk06r.ino
1 x Fio v3 - ATmega32U4
1 x XBee S1
1 x Lithium Ion Battery - 850mAh
1 x RGB Smart NeoPixel
1 x Pololu Adjustable Step-Up Voltage Regulator U1V11A
2 x EasyDriver
2 x Small Stepper
1 x Nine Volt Battery
1 x 9V Battery Connector
1 x Half-Size Breadboard
1 x Full-Size Breadboard
1 x SparkFun Cerberus USB Cable
*/
// Include the library code:
// EEPROM library to read and write EEPROM with unique ID for unit
#include <EEPROM.h>
// NeoPixels
#include <Adafruit_NeoPixel.h>
// 2 x EasyDriver - 2 x Stepper
// EasyDriver Right
int dirPinR = 2;
// stepPin Right
int stepPinR = 3;
// EasyDriver Left
int dirPinL = 4;
// stepPin Left
int stepPinL = 5;
// Microsteps
int i = 0;
// Power be 0-1023
int iPower = 0;
String POW = "";
// Joystick was sitting around 520 for the vertical and horizontal values
// Will be 0-1023
// Vertical
int vertical;
String VER = "";
// Horizontal
// Will be 0-1023
int horizontal;
String HOR = "";
// Select
// Will be HIGH (1) if not pressed, and LOW (0) if pressed
int select;
String SEL = "";
int firstClosingBracket = 0;
// Map Vertical and Horizontal
int mapVer = 0;
int mapHor = 0;
int iVer = 0;
int iHor = 0;
// NeoPixels
// On digital pin 6
#define PIN 6
// NeoPixels NUMPIXELS = 1
#define NUMPIXELS 1
// Pixels
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// Red
int red = 0;
// Green
int green = 0;
// Blue
int blue = 0;
// Neopix
int iNeo = 0;
// Value
int zz = 0;
// Process Message
// Start
bool bStart = false;
// End
bool bEnd = false;
// Variable to store the incoming byte
int incb = 0;
// Message
String msg = "";
// Index
byte in = 0;
int x = 0;
// Software Version Information
String sver = "12-16r";
// Unit ID information
String uid = "";
void loop() {
// Check for serial messages
isProcessMessage();
}
getEEPROM.ino
// EEPROM
// isUID
void isUID()
{
// Is Unit ID
uid = "";
for (int x = 0; x < 5; x++)
{
uid = uid + char(EEPROM.read(x));
}
}
getNeopix.ino
// NeoPixels
// Neopix
void isNeopix()
{
// Pixels
pixels.setBrightness( 130 );
// Pixels color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor( iNeo, pixels.Color(red,green,blue) );
// This sends the updated pixel color to the hardware
pixels.show();
// Delay for a period of time (in milliseconds)
delay(50);
}
// isNUMPIXELS
void isNUMPIXELS()
{
// Neopix Value
switch ( zz ) {
case 0:
// NeoPixels Green
// Red
red = 0;
// Green
green = 255;
// Blue
blue = 0;
// Neopix
iNeo = 0;
isNeopix();
break;
case 1:
// NeoPixels Blue
// Red
red = 0;
// Green
green = 0;
// Blue
blue = 255;
// Neopix
iNeo = 0;
isNeopix();
break;
case 2:
// NeoPixels Red
// Red
red = 255;
// Green
green = 0;
// Blue
blue = 0;
// Neopix
iNeo = 0;
isNeopix();
break;
case 3:
// NeoPixels Yellow
// Red
red = 255;
// Green
green = 255;
// Blue
blue = 0;
// Neopix
iNeo = 0;
isNeopix();
break;
case 4:
// NeoPixels Magenta
// Red
red = 255;
// Green
green = 0;
// Blue
blue = 255;
// Neopix
iNeo = 0;
isNeopix();
break;
case 5:
// NeoPixels Cyan
// Red
red = 0;
// Green
green = 255;
// Blue
blue = 255;
// Neopix
iNeo = 0;
isNeopix();
break;
case 6:
// NeoPixels White
// Red
red = 255;
// Green
green = 255;
// Blue
blue = 255;
// Neopix
iNeo = 0;
isNeopix();
break;
}
}
// isNUMPIXELSoff
void isNUMPIXELSoff()
{
// Black Off
// NeoPixels
// Red
red = 0;
// Green
green = 0;
// Blue
blue = 0;
isNeopix();
}
getProcessMessage.ino
// ProcessMessage
// isProcessMessage
void isProcessMessage() {
// Loop through serial buffer one byte at a time until you reach * which will be end of message
while ( Serial1.available() > 0 )
{
// Read the incoming byte:
incb = Serial1.read();
// Start the message when the '<' symbol is received
if(incb == '<')
{
// Start
bStart = true;
in = 0;
msg = "";
}
// End the message when the '*' symbol is received
else if(incb == '*')
{
// End
bEnd = true;
x = msg.length();
msg.remove( x , 1);
// Done reading
break;
}
// Read the message
else
{
// Message
msg = msg + char(incb);
in++;
}
}
// Start - End
if( bStart && bEnd)
{
// isStepper => Message
isStepper();
// Start - End
in = 0;
msg = "";
bStart = false;
bEnd = false;
vertical;
horizontal;
iPower;
}
}
getStepper.ino
// Stepper
// isStepperSetup
void isStepperSetup() {
// 2 x EasyDriver
pinMode(dirPinR, OUTPUT);
pinMode(stepPinR, OUTPUT);
pinMode(dirPinL, OUTPUT);
pinMode(stepPinL, OUTPUT);
}
// isStepper
void isStepper() {
// msg = vertical + "|" + horizontal + "|" + select + "|" + iValue + "|" + sver + "|" + uid
firstClosingBracket = 0;
// Vertical
firstClosingBracket = msg.indexOf('|');
VER = msg;
VER.remove(firstClosingBracket);
vertical = VER.toInt();
// Horizontal
firstClosingBracket = firstClosingBracket + 1;
msg.remove(0, firstClosingBracket );
firstClosingBracket = msg.indexOf('|');
HOR = msg;
HOR.remove(firstClosingBracket);
horizontal = HOR.toInt();
// Select
firstClosingBracket = firstClosingBracket + 1;
msg.remove(0, firstClosingBracket );
firstClosingBracket = msg.indexOf('|');
SEL = msg;
SEL.remove(firstClosingBracket);
select = SEL.toInt();
// Power
firstClosingBracket = firstClosingBracket + 1;
msg.remove(0, firstClosingBracket );
firstClosingBracket = msg.indexOf('|');
POW = msg;
POW.remove(firstClosingBracket);
iPower = POW.toInt();
// EasyDriver Right
// Set the direction
// Joystick was sitting around 520 for the vertical and horizontal values
// Will be 0-1023
mapVer = map(vertical, 0, 1023, -512, 512);
mapHor = map(horizontal, 0, 1023, -512, 512);
// Vertical and Horizontal
if ( mapVer == -512 ) {
// Horizontal
if ( mapHor == -512 ) {
// Left
// NeoPixels Yellow
zz = 3;
isNUMPIXELS();
iVer = 3;
} else if ( mapHor == 512 ) {
// Right
// NeoPixels Magenta
zz = 4;
isNUMPIXELS();
iVer = 4;
} else {
// Down
// NeoPixels Blue
zz = 1;
isNUMPIXELS();
iVer = 1;
}
} else if ( mapVer == 512 ) {
// Horizontal
if ( mapHor == -512 ) {
// Left
// NeoPixels Yellow
zz = 3;
isNUMPIXELS();
iVer = 3;
} else if ( mapHor == 512 ) {
// Right
// NeoPixels Magenta
zz = 4;
isNUMPIXELS();
iVer = 4;
} else {
// Up
// NeoPixels Green
zz = 0;
isNUMPIXELS();
iVer = 4;
iVer = 2;
}
} else if ( mapHor == -512 ) {
// Left
// NeoPixels Yellow
zz = 3;
isNUMPIXELS();
iVer = 3;
} else if ( mapHor == 512 ) {
// Right
// NeoPixels Magenta
zz = 4;
isNUMPIXELS();
iVer = 4;
} else {
// Stop
// NeoPixels Red
zz = 2;
isNUMPIXELS();
iVer = 5;
}
// XBee Car
switch ( iVer ) {
case 1:
// 2 x EasyDriver - Up
// Set the direction LOW
digitalWrite(dirPinR, LOW);
delay(5);
digitalWrite(dirPinL, LOW);
delay(5);
break;
case 2:
// Stepper 2 - Back
// Set the direction HIGH
digitalWrite(dirPinR, HIGH);
delay(5);
digitalWrite(dirPinL, HIGH);
delay(5);
break;
case 3:
// Stepper 3 - Right
digitalWrite(dirPinR, LOW);
delay(5);
digitalWrite(dirPinL, HIGH);
delay(5);
break;
case 4:
// Stepper 4 - Left
digitalWrite(dirPinR, HIGH);
delay(5);
digitalWrite(dirPinL, LOW);
delay(5);
break;
case 5:
// Stop
// NeoPixels Red
zz = 2;
isNUMPIXELS();
iVer = 5;
break;
default:
// Stop
// NeoPixels Red
zz = 2;
isNUMPIXELS();
iVer = 5;
}
if ( iVer == 5 ) {
// Stepper Stop
// 2 x EasyDriver
// Set the direction
digitalWrite(dirPinR, LOW);
delay(5);
// Set the direction
digitalWrite(dirPinL, LOW);
delay(5);
// This LOW
digitalWrite(stepPinR, LOW);
digitalWrite(stepPinL, LOW);
} else {
// Iterate for 200 microsteps
for (i = 0; i<200; i++)
{
// This LOW to HIGH change is what creates the
digitalWrite(stepPinR, LOW);
// "Rising Edge" so the easydriver knows to when to step.
digitalWrite(stepPinR, HIGH);
// This delay time is close to top speed.
delayMicroseconds(iPower);
// This LOW to HIGH change is what creates the
digitalWrite(stepPinL, LOW);
// "Rising Edge" so the easydriver knows to when to step.
digitalWrite(stepPinL, HIGH);
// This delay time is close to top speed.
delayMicroseconds(iPower);
}
}
}
setup.ino
// Setup
void setup() {
// Open the serial port at 9600 bps:
Serial1.begin( 9600 );
// Pause
delay(5);
// EEPROM Unit ID
isUID();
// Pause
delay(5);
// 2 x EasyDriver
isStepperSetup();
// Pause
delay(5);
// NeoPixels
// This initializes the NeoPixel library
pixels.begin();
// Delay for a period of time (in milliseconds)
delay(50);
// isNUMPIXELS Off
isNUMPIXELSoff();
}
——
People can contact us: https://www.donluc.com/?page_id=1927
Technology Experience
- Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi,Espressif, etc…)
- IoT
- Robotics
- Camera and Video Capture Receiver Stationary, Wheel/Tank and Underwater Vehicle
- Unmanned Vehicles Terrestrial and Marine
- Research & Development (R & D)
- Desktop Applications (Windows, OSX, Linux, Multi-OS, Multi-Tier, etc…)
- Mobile Applications (Android, iOS, Blackberry, Windows Mobile, Windows CE, etc…)
- Web Applications (LAMP, Scripting, Java, ASP, ASP.NET, RoR, Wakanda, etc…)
- Social Media Programming & Integration (Facebook, Twitter, YouTube, Pinterest, etc…)
- Content Management Systems (WordPress, Drupal, Joomla, Moodle, etc…)
- Bulletin Boards (phpBB, SMF, Vanilla, jobberBase, etc…)
- eCommerce (WooCommerce, OSCommerce, ZenCart, PayPal Shopping Cart, etc…)
Instructor and E-Mentor
- IoT
- PIC Microcontrollers
- Arduino
- Raspberry Pi
- Espressif
- Robotics
- DOS, Windows, OSX, Linux, iOS, Android, Multi-OS
- Linux-Apache-PHP-MySQL
Follow Us
J. Luc Paquin – Curriculum Vitae – 2021 English & Español
https://www.jlpconsultants.com/luc/
Web: https://www.donluc.com/
Web: https://www.jlpconsultants.com/
Facebook: https://www.facebook.com/neosteam.labs.9/
YouTube: https://www.youtube.com/channel/UC5eRjrGn1CqkkGfZy0jxEdA
Twitter: https://twitter.com/labs_steam
Pinterest: https://www.pinterest.com/NeoSteamLabs/
Instagram: https://www.instagram.com/neosteamlabs/
Don Luc





































