——

——

——

——

——

——
DL2002Mk05
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
1 x Adafruit PowerBoost 500 Shield
1 x Lithium Ion Battery – 2Ah
1 x LED Green
1 x Slide Pot (Small)
1 x Knob
7 x Jumper Wires 3″ M/M
16 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
LP1 – Analog A0
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
DL2002Mk05p.ino
// ***** Don Luc Electronics © *****
// Software Version Information
// Project #12: Robotics - Unmanned Vehicles 1d - Mk09
// 02-05
// DL2002Mk01p.ino 12-09
// Arduino UNO - R3
// ProtoScrewShield
// Adafruit RGB LCD Shield 16×2 Character Display
// EEPROM with Unique ID
// Transmitter
// XBee S1
// Stepper
// Slide Pot (Small)
// Knob
// 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;
// Slide Pot (Small)
int iSP1 = A0; // Select the input pin for the slide pot
int iValue = 0; // Variable to store the value
// The current address in the EEPROM (i.e. which byte we're going to read to next)
// Version
String sver = "12-9.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);
}
}
// Read the value
iValue = analogRead( iSP1 );
// 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.print( '|' );
Serial.print( iValue );
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
LEG – Digital 6
SP1 – Digital 3
DI1 – Digital 2
SP2 – Digital 5
DI2 – Digital 4
TX0 – Digital 1
RX0 – Digital 0
VIN – +5V
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
DL2002Mk05Rp.ino
// ***** Don Luc Electronics © *****
// Software Version Information
// Project #12: Robotics - Unmanned Vehicles 1e - Mk09
// 02-05
// DL2002Mk05Rp.ino 12-09
// Arduino UNO - SparkFun RedBoard
// EEPROM with Unique ID
// Receiver
// Breakout Board for XBee Module
// XBee S1
// 2 x EasyDriver
// 2 x Small Stepper
// Adafruit PowerBoost 500 Shield
// Lithium Ion Battery - 2Ah
// LED Green
// delayMicroseconds
// 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;
// LED Green
int iLEDGreen = 6;
// Process Message
bool bStart = false; // Start
bool bEnd = false; // End
int incb = 0; // Variable to store the incoming byte
String msg = ""; // Message
String zzz = "";
byte in = 0; // Index
int x = 0;
// delayMicroseconds
int dMicro = 0;
// Software Version Information
String sver = "12-09";
// 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() {
// 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();
// Start the message when the '<' symbol is received
if(incb == '<')
{
bStart = true;
in = 0;
msg = "";
}
// End the message when the '*' symbol is received
else if(incb == '*')
{
bEnd = true;
x = msg.length();
msg.remove( x , 1);
break; // Done reading
}
// Read the message
else
{
if(in < 8) // Make sure there is room
{
msg = msg + char(incb);
in++;
}
}
}
if( bStart && bEnd)
{
// Stepper
zzz = msg.charAt( 0 );
yy = zzz.toInt();
msg.remove( 0 , 2);
// delayMicroseconds
dMicro = msg.toInt() + 300;
in = 0;
zzz = "";
msg = "";
bStart = false;
bEnd = false;
}
}
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.
digitalWrite(dirPinL, LOW); // Set the direction.
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(dMicro); // 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(dMicro); // This delay time is close to top speed.
}
// isStepper2
void isStepper2(){
// 2 x EasyDriver
digitalWrite(dirPinR, HIGH); // Set the direction.
digitalWrite(dirPinL, HIGH); // Set the direction.
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(dMicro); // 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(dMicro); // This delay time is close to top speed.
}
// Switch 3
void isStepper3(){
// Right
// 2 x EasyDriver
digitalWrite(dirPinR, LOW); // Set the direction.
digitalWrite(dirPinL, HIGH); // Set the direction. delay(5);
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(dMicro); // 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(dMicro); // This delay time is close to top speed.
}
// Switch 4
void isStepper4(){
// Left
// 2 x EasyDriver
digitalWrite(dirPinR, HIGH); // Set the direction.
digitalWrite(dirPinL, LOW); // Set the direction.
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(dMicro); // 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(dMicro); // 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);
// 2 x EasyDriver
isStepperSetup();
// LED Green
pinMode(iLEDGreen, OUTPUT);
digitalWrite(iLEDGreen, HIGH);
}
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