——
——
——
——
——
DL2002Mk01
1 x Arduino UNO – R3
1 x Arduino UNO – SparkFun RedBoard
1 x ProtoScrewShield
1 x Adafruit RGB LCD Shield 16×2 Character Display
2 x XBee S1
1 x SparkFun XBee Explorer Regulated
1 x Breakout Board for XBee Module
2 x EasyDriver
2 x Small Stepper
6 x Jumper Wires 3″ M/M
12 x Jumper Wires 6″ M/M
1 x Full-Size Breadboard
1 x SparkFun XBee Explorer USB
1 x DIGI XCTU Software
1 x SparkFun USB Mini-B Cable
1 x SparkFun Cerberus USB Cable
Arduino UNO
TX0 – Digital 1
RX0 – Digital 0
VIN – +5V
GND – GND
XBee S1: Transmitter
CH Channel: C
PAN Id: 3333
SH Serial Number: 13A200
SL Serial Number: 40717A1F
CE Coordinator: Coordinator
BD: 9600
DL2002Mk01p.ino
// ***** Don Luc Electronics © *****
// Software Version Information
// Project #12: Robotics - Unmanned Vehicles 1c - Mk07
// 02-01
// DL2002Mk01p.ino 12-07
// Arduino UNO - R3
// ProtoScrewShield
// Adafruit RGB LCD Shield 16×2 Character Display
// EEPROM with Unique ID
// Transmitter
// XBee S1
// Stepper
// Include the library code:
// EEPROM library to read and write EEPROM with unique ID for unit
#include <EEPROM.h>
// Adafruit RGB LCD Shield
#include <Adafruit_RGBLCDShield.h>
// Adafruit RGB LCD Shield
Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield();
// These #defines make it easy to set the backlight color
#define OFF 0x0
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7
// Momentary Button
int yy = 0;
uint8_t momentaryButton = 0;
// Communication
unsigned long dTime = 50;
// The current address in the EEPROM (i.e. which byte we're going to read to next)
// Version
String sver = "12-7.p";
// Unit ID Information
String uid = "";
void loop() {
// Clear
RGBLCDShield.clear();
// set the cursor to column 0, line 0
RGBLCDShield.setCursor(0,0);
RGBLCDShield.print("Robotics"); // Robotics
// Momentary Button
momentaryButton = RGBLCDShield.readButtons();
switch ( yy ) {
case 1:
// Up
isSwitch1();
break;
case 2:
// Down
isSwitch2();
break;
case 3:
// Right
isSwitch3();
break;
case 4:
// Left
isSwitch4();
break;
case 5:
// Stop
isSwitch5();
break;
default:
// Stop
yy = 5;
RGBLCDShield.setBacklight(RED);
isSwitch5();
}
if ( momentaryButton ) {
if ( momentaryButton & BUTTON_UP ) {
yy = 1;
// Up
RGBLCDShield.setBacklight(GREEN);
}
if ( momentaryButton & BUTTON_DOWN ) {
yy = 2;
// Down
RGBLCDShield.setBacklight(VIOLET);
}
if ( momentaryButton & BUTTON_LEFT ) {
yy = 3;
// Right
RGBLCDShield.setBacklight(TEAL);
}
if ( momentaryButton & BUTTON_RIGHT ) {
yy = 4;
// Left
RGBLCDShield.setBacklight(YELLOW);
}
if ( momentaryButton & BUTTON_SELECT ) {
yy = 5;
// Stop
RGBLCDShield.setBacklight(RED);
}
}
// Process Message
isProcessMessage();
delay( dTime );
}
getEEPROM.ino
// EEPROM
// isUID
void isUID()
{
// Is Unit ID
uid = "";
for (int x = 0; x < 5; x++)
{
uid = uid + char(EEPROM.read(x));
}
}
getProcessMessage.ino
// ProcessMessage
// isProcessMessage
void isProcessMessage() {
// String msg = "";
/// Loop through serial buffer one byte at a time until you reach * which will be end of message
//while ( Serial.available() )
// {
// Print => XBEE + Unit ID + Version + *
// msg = "XBEE|" + uid + "|" + sver + "|" + yy + "|*";
Serial.print( '<' );
Serial.print( yy );
Serial.println( '*' );
// }
}
getSwitch.ino
// Switch
// Switch 1
void isSwitch1(){
yy = 1;
// Stepper
// Up
RGBLCDShield.setCursor(0,1);
RGBLCDShield.print("Up");
}
// Switch 2
void isSwitch2(){
yy = 2;
// Stepper
// Down
RGBLCDShield.setCursor(0,1);
RGBLCDShield.print("Down");
}
// Switch 3
void isSwitch3(){
yy = 3;
// Stepper
// Right
RGBLCDShield.setCursor(0,1);
RGBLCDShield.print("Right");
}
// Switch 4
void isSwitch4(){
yy = 4;
// Stepper
// Left
RGBLCDShield.setCursor(0,1);
RGBLCDShield.print("Left");
}
// Switch 5
void isSwitch5(){
yy = 5;
// Stepper
// Stop
RGBLCDShield.setCursor(0,1);
RGBLCDShield.print("Stop");
}
setup.ino
// Setup
void setup() {
// Open serial port at 9600 baud
Serial.begin( 9600 );
// Pause
delay(5);
// EEPROM Unit ID
isUID();
// Pause
delay(5);
// Adafruit RGB LCD Shield
// Set up the LCD's number of columns and rows:
RGBLCDShield.begin(16, 2);
RGBLCDShield.setBacklight(GREEN);
// Display
// Set the cursor to column 0, line 0
RGBLCDShield.setCursor(0,0);
RGBLCDShield.print("Don Luc Electron"); // Don luc Electron
// Set the cursor to column 0, line 1
RGBLCDShield.setCursor(0, 1);
RGBLCDShield.print("Robotics"); // Robotics
// Serial
// Serial.println( "Don Luc Electronics");
// Serial.println( "Robotics");
delay(5000);
// Clear
RGBLCDShield.clear();
// Display
// Set the cursor to column 0, line 0
RGBLCDShield.setCursor(0,0);
RGBLCDShield.print("Version: "); // Version
RGBLCDShield.print( sver );
// Set the cursor to column 0, line 1
RGBLCDShield.setCursor(0, 1);
RGBLCDShield.print("UID: "); // Unit ID Information
RGBLCDShield.print( uid );
// Serial
// Serial.print( "Software Version Information: ");
// Serial.println( sver );
// Serial.print( "Unit ID Information: ");
// Serial.println( uid );
delay(5000);
// Clear
RGBLCDShield.clear();
}
Arduino UNO – SparkFun RedBoard
SP1 – Digital 3
DI1 – Digital 2
SP2 – Digital 5
DI2 – Digital 4
TX0 – Digital 1
RX0 – Digital 0
VIN – +3.3V
GND – GND
XBee S1: Receiver
CH Channel: C
PAN Id: 3333
SH Serial Number: 13A200
SL Serial Number: 4076E2C5
CE Coordinator: End Device
BD: 9600
DL2002Mk01Rp.ino
// ***** Don Luc Electronics © *****
// Software Version Information
// Project #12: Robotics - Unmanned Vehicles 1c - Mk07
// 02-01
// DL2002Mk01Rp.ino 12-07
// Arduino UNO - SparkFun RedBoard
// EEPROM with Unique ID
// Receiver
// Breakout Board for XBee Module
// XBee S1
// 2 x EasyDriver
// 2 x Small Stepper
// Include the library code:
// EEPROM library to read and write EEPROM with unique ID for unit
#include <EEPROM.h>
// Momentary Button
int yy = "";
// 2 x EasyDriver - 2 x Stepper
int dirPinR = 2; // EasyDriver Right
int stepPinR = 3; // stepPin Right
int dirPinL = 4; // EasyDriver Left
int stepPinL = 5; // stepPin Left
int i = 0;
// Software Version Information
String sver = "12-07";
// Unit ID information
String uid = "";
void loop() {
// Check for serial messages
if ( Serial.available() )
{
isProcessMessage();
}
// Switch
isSwitch();
}
getEEPROM.ino
// EEPROM
// isUID
void isUID()
{
// Is Unit ID
uid = "";
for (int x = 0; x < 5; x++)
{
uid = uid + char(EEPROM.read(x));
}
}
getProcessMessage.ino
// ProcessMessage
// isProcessMessage
void isProcessMessage() {
int incb = 0;
String msg = "";
String zzz = "";
// Loop through serial buffer one byte at a time until you reach * which will be end of message
while ( Serial.available() )
{
// Read the incoming byte:
incb = Serial.read();
// Add character to string
msg = msg + char(incb);
// Check if receive character is the end of message *
if ( incb == 42 )
{
// Serial.println(msg);
zzz = msg.charAt( 1 );
// Serial.println(zzz);
yy = zzz.toInt();
// Serial.println( yy );
}
}
}
getStepper.ino
// Stepper
// isStepperSetup
void isStepperSetup() {
// 2 x EasyDriver
pinMode(dirPinR, OUTPUT);
pinMode(stepPinR, OUTPUT);
pinMode(dirPinL, OUTPUT);
pinMode(stepPinL, OUTPUT);
}
// isStepper1
void isStepper1(){
// 2 x EasyDriver - Up
digitalWrite(dirPinR, LOW); // Set the direction.
delay(5);
digitalWrite(dirPinL, LOW); // Set the direction.
delay(5);
for (i = 0; i<300; i++) // Iterate for 1000 microsteps.
{
digitalWrite(stepPinR, LOW); // This LOW to HIGH change is what creates the
digitalWrite(stepPinR, HIGH); // "Rising Edge" so the easydriver knows to when to step.
delayMicroseconds(300); // This delay time is close to top speed.
digitalWrite(stepPinL, LOW); // This LOW to HIGH change is what creates the
digitalWrite(stepPinL, HIGH); // "Rising Edge" so the easydriver knows to when to step.
delayMicroseconds(300); // This delay time is close to top speed.
}
}
// isStepper2
void isStepper2(){
// 2 x EasyDriver
digitalWrite(dirPinR, HIGH); // Set the direction.
delay(5);
digitalWrite(dirPinL, HIGH); // Set the direction.
delay(5);
for (i = 0; i<1000; i++) // Iterate for 1000 microsteps.
{
digitalWrite(stepPinR, LOW); // This LOW to HIGH change is what creates the
digitalWrite(stepPinR, HIGH); // "Rising Edge" so the easydriver knows to when to step.
delayMicroseconds(300); // This delay time is close to top speed.
digitalWrite(stepPinL, LOW); // This LOW to HIGH change is what creates the
digitalWrite(stepPinL, HIGH); // "Rising Edge" so the easydriver knows to when to step.
delayMicroseconds(300); // This delay time is close to top speed.
}
}
// Switch 3
void isStepper3(){
// Right
// 2 x EasyDriver
digitalWrite(dirPinR, LOW); // Set the direction.
delay(5);
digitalWrite(dirPinL, HIGH); // Set the direction.
delay(5);
for (i = 0; i<300; i++) // Iterate for 1000 microsteps.
{
digitalWrite(stepPinR, LOW); // This LOW to HIGH change is what creates the
digitalWrite(stepPinR, HIGH); // "Rising Edge" so the easydriver knows to when to step.
delayMicroseconds(300); // This delay time is close to top speed.
digitalWrite(stepPinL, LOW); // This LOW to HIGH change is what creates the
digitalWrite(stepPinL, HIGH); // "Rising Edge" so the easydriver knows to when to step.
delayMicroseconds(300); // This delay time is close to top speed.
}
}
// Switch 4
void isStepper4(){
// Left
// 2 x EasyDriver
digitalWrite(dirPinR, HIGH); // Set the direction.
delay(5);
digitalWrite(dirPinL, LOW); // Set the direction.
delay(5);
for (i = 0; i<300; i++) // Iterate for 1000 microsteps.
{
digitalWrite(stepPinR, LOW); // This LOW to HIGH change is what creates the
digitalWrite(stepPinR, HIGH); // "Rising Edge" so the easydriver knows to when to step.
delayMicroseconds(300); // This delay time is close to top speed.
digitalWrite(stepPinL, LOW); // This LOW to HIGH change is what creates the
digitalWrite(stepPinL, HIGH); // "Rising Edge" so the easydriver knows to when to step.
delayMicroseconds(300); // This delay time is close to top speed.
}
}
// isStepperStop
void isStepperStop() {
// 2 x EasyDriver
digitalWrite(dirPinR, LOW); // Set the direction.
delay(5);
digitalWrite(dirPinL, LOW); // Set the direction.
delay(5);
digitalWrite(stepPinR, LOW); // This LOW to HIGH change is what creates the
digitalWrite(stepPinL, LOW); // This LOW to HIGH change is what creates the
}
getSwitch.ino
// Switch
// isSwitch
void isSwitch(){
switch ( yy ) {
case 1:
// Stepper 1 - Up
isStepper1();
break;
case 2:
// Stepper 2 - Back
isStepper2();
break;
case 3:
// Stepper 3 - Right
isStepper3();
break;
case 4:
// Stepper 4 - Left
isStepper4();
break;
case 5:
// Stepper Stop
isStepperStop();
break;
default:
// Stepper Stop
isStepperStop();
}
}
setup.ino
// Setup
void setup() {
// Open the serial port at 9600 bps:
Serial.begin( 9600 );
// Pause
delay(5);
// EEPROM Unit ID
isUID();
// Pause
delay(5);
// Serial
// Serial.print( "Software Version Information: ");
// Serial.println( sver );
// Serial.print( "Unit ID Information: ");
// Serial.println( uid );
// delay(5000);
// 2 x EasyDriver
isStepperSetup();
}
Follow Us
J. Luc Paquin – Curriculum Vitae
https://www.donluc.com/DLHackster/LucPaquinCVEngMk2020a.pdf
Web: https://www.donluc.com/
Web: http://www.jlpconsultants.com/
Web: https://www.donluc.com/DLHackster/
Web: https://www.hackster.io/neosteam-labs
Web: http://neosteamlabs.com/
YouTube: https://www.youtube.com/channel/UC5eRjrGn1CqkkGfZy0jxEdA
Facebook: https://www.facebook.com/neosteam.labs.9/
Instagram: https://www.instagram.com/neosteamlabs/
Pinterest: https://www.pinterest.com/NeoSteamLabs/
Twitter: https://twitter.com/labs_steam
Etsy: https://www.etsy.com/shop/NeoSteamLabs
Don Luc

















































