Project #14: Components – SparkFun Thing Plus – ESP32 WROOM – Mk08

——

Components

——

Components

——

Components

——

SparkFun Thing Plus – ESP32 WROOM

SparkFun Item: WRL-15663

The SparkFun ESP32 Thing Plus is the next step to get started with Espressif IoT ideations while still enjoying all the amenities of the original ESP32 Thing. Espressif’s ESP32 WROOM is a powerful WiFi and Bluetooth MCU module that targets a wide variety of applications. At the core of this module is the ESP32-D0WDQ6 chip which is designed to be both scalable and adaptive. To make the Thing Plus even easier to use, we’ve moved a few pins around to make the board Feather compatible and it utilizes our handy Qwiic Connect System which means no soldering or shields are required to connect it to the rest of your system.

Technology Experience

  • 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

  • DOS, Windows, OSX, Linux, iOS, Android, Multi-OS
  • Linux-Apache-PHP-MySQL
  • Robotics
  • Arduino
  • Raspberry Pi
  • Espressif

Follow Us

The Alpha Geek

Why “The Alpha Geek”?

Aphasia

Don Luc Aphasia

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
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/

Don Luc

Project #14: Components – Pololu DRV8834 Stepper Motor Driver – Mk06

——

Components

——

Components

——

Pololu DRV8834 Low-Voltage Stepper Motor Driver Carrier

Pololu Item: 2134

This is a breakout board for TI’s DRV8834 microstepping bipolar stepper motor driver. It has a pinout and interface that are nearly identical to those of our A4988 carriers, so it can be used as a drop-in replacement for those boards in many applications. The DRV8834 operates from 2.5–10.8 V, allowing stepper motors to be powered with voltages that are too low for other drivers, and can deliver up to approximately 1.5 A per phase continuously without a heat sink or forced air flow (up to 2 A peak). It features adjustable current limiting, overcurrent and overtemperature protection, and six microstep resolutions (down to 1/32-step). This board ships with 0.1in male header pins included but not soldered in.

Technology Experience

  • 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

  • DOS, Windows, OSX, Linux, iOS, Android, Multi-OS
  • Linux-Apache-PHP-MySQL
  • Robotics
  • Arduino
  • Raspberry Pi
  • Espressif

Follow Us

The Alpha Geek

Why “The Alpha Geek”?

Aphasia

Don Luc Aphasia

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
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/

Don Luc

Project #12: Robotics – Unmanned Vehicles 1h – Mk12

——

Robotics

——

Robotics

——

Robotics

——

Robotics

——

Pololu Stepper Motor Bipolar, 200 Steps/Rev, 2.8V, 1.7 A/Phase

This hybrid bipolar stepping motor has a 1.8° step angle (200 steps/revolution). Each phase draws 1.7 A at 2.8 V, allowing for a holding torque of 3.7 kg-cm. The motor has four color-coded wires terminated with bare leads: black and green connect to one coil; red and blue connect to the other.

DL2003Mk05

1 x SparkFun RedBoard Qwiic
2 x Pololu DRV8834 Low-Voltage Stepper Motor Driver Carrier
2 x Electrolytic Decoupling Capacitors – 100uF/25V
2 x Pololu Stepper Motor Bipolar, 2.8V, 1.7 A/Phase
2 x Pololu Universal Aluminum Mounting Hub for 5mm Shaft, M3 Holes
1 x Adafruit Perma-Proto Half-sized Breadboard PCB
14 x Wire Solid Core – 22 AWG
1 x SparkFun Cerberus USB Cable

SparkFun RedBoard Qwiic

SP1 – Digital 9
DI1 – Digital 8
SP2 – Digital 7
DI2 – Digital 6
VIN – 3.3V
GND – GND

DL2003Mk05Rp.ino

// ***** Don Luc Electronics © *****
// Software Version Information
// Project #12: Robotics - Unmanned Vehicles 1h - Mk12
// 03-05
// DL2003Mk05Rp.ino 12-12
// Receiver
// 1 x SparkFun RedBoard Qwiic
// 2 x Pololu DRV8834 Low-Voltage Stepper Motor Driver Carrier
// 2 x Electrolytic Decoupling Capacitors - 100uF/25V
// 2 x Pololu Stepper Motor Bipolar, 2.8V, 1.7 A/Phase
// 2 x Pololu Universal Aluminum Mounting Hub for 5mm Shaft, M3 Holes
// 1 x Adafruit Perma-Proto Half-sized Breadboard PCB

// Include the library code:
// DRV8834 Stepper Motor Driver
#include <BasicStepperDriver.h>
#include <MultiDriver.h>

// DRV8834 Stepper Motor Driver
// Stepper motor steps per revolution. Most steppers are 200 steps or 1.8 degrees/step
#define MOTOR_STEPS 200
// Target RPM for X axis stepper motor
#define MOTOR_X_RPM 800
// Target RPM for Y axis stepper motor
#define MOTOR_Y_RPM 800
// 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 1
// X Stepper motor
#define DIR_X 8
#define STEP_X 9
// Y Stepper motor
#define DIR_Y 6
#define STEP_Y 7
// BasicStepperDriver
BasicStepperDriver stepperX(MOTOR_STEPS, DIR_X, STEP_X);
BasicStepperDriver stepperY(MOTOR_STEPS, DIR_Y, STEP_Y);
// Pick one of the two controllers below each motor moves independently
MultiDriver controller(stepperX, stepperY);

// Software Version Information
String sver = "12-12";
// Unit ID information
String uid = "";

void loop() {

   controller.rotate(360, 360);
   
}

getStepper.ino

// Stepper
// isStepperSetup
void isStepperSetup() {    
  
  // Set stepper target motors RPM.
  stepperX.begin(MOTOR_X_RPM, MICROSTEPS);
  stepperY.begin(MOTOR_Y_RPM, MICROSTEPS);

}

setup.ino

// Setup
void setup() {

  // DRV8834 Stepper Motor Driver
  isStepperSetup();

}

Technology Experience

  • 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

  • DOS, Windows, OSX, Linux, iOS, Android, Multi-OS
  • Linux-Apache-PHP-MySQL
  • Robotics
  • Arduino
  • Raspberry Pi
  • Espressif

Follow Us

The Alpha Geek

Why “The Alpha Geek”?

Aphasia

Don Luc Aphasia

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
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/

Don Luc

Luc – Speaking

——

Robotics

——

Aphasia – 2020
Montreal, Canada – 2002
Mexico City, Mexico – 2010
Mexico City, Mexico – 2012
Aphasia – 2018
Aphasia – 2019

Technology Experience

  • 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

  • DOS, Windows, OSX, Linux, iOS, Android, Multi-OS
  • Linux-Apache-PHP-MySQL
  • Robotics
  • Arduino
  • Raspberry Pi
  • Espressif

Follow Us

The Alpha Geek

Why “The Alpha Geek”?

Aphasia

Don Luc Aphasia

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
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/

Don Luc

Project #12: Robotics – Unmanned Vehicles 1b – Mk06

——

Robotics

——

Robotics

——

Robotics

——

Robotics

——

XBee

Digi XBee is the brand name of a family of form factor compatible radio modules from Digi International. The first XBee radios were introduced under the MaxStream brand in 2005 and were based on the IEEE 802.15.4-2003 standard designed for point-to-point and star communications at over-the-air baud rates of 250 kbit/s.

Two models were initially introduced, a lower cost 1 mW XBee and the higher power 100 mW XBee-PRO. Since the initial introduction, a number of new XBee radios have been introduced and an ecosystem of wireless modules, gateways, adapters and software has evolved.

The XBee radios can all be used with the minimum number of connections — power (3.3 V), ground, data in and data out (UART), with other recommended lines being Reset and Sleep. Additionally, most XBee families have some other flow control, input/output (I/O), analog-to-digital converter (A/D) and indicator lines built in.

DL2001Mk02

1 x Arduino Fio
1 x Arduino UNO – R3
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 Lithium Ion Battery – 2.5Ah
1 x LED Red
1 x LED Green
1 x LED Bi-Colour
1 x LED Yellow
4 x Jumper Wires 3″ M/M
10 x Jumper Wires 6″ M/M
1 x Half-Size Breadboard
1 x SparkFun XBee Explorer USB
1 x DIGI XCTU Software
1 x SparkFun FTDI Basic Breakout – 3.3V
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

DL2001Mk02p.ino

// ***** Don Luc Electronics © *****
// Software Version Information
// Project #12: Robotics - Unmanned Vehicles 1b - Mk06
// 01-02
// DL2001Mk01p.ino 12-06
// Arduino UNO - R3
// ProtoScrewShield
// Adafruit RGB LCD Shield 16×2 Character Display
// EEPROM with Unique ID
// Transmitter
// XBee S1

// 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 = 1000;

// The current address in the EEPROM (i.e. which byte we're going to  read to next)
// Version
String sver = "12-2.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:
    
      // LED Green
      isSwitch1();
      
      break;
    case 2:
    
      // LED Bipolar (Green)
      isSwitch2();
      
      break;
    case 3:

      // Right
      isSwitch3();
      
      break;
    case 4:

      // Left
      isSwitch4();
      
      break;
    case 5:

      // LED Red
      isSwitch5();
      
      break;
    default:

      // LED Red
      yy = 5;
      RGBLCDShield.setBacklight(RED);
      isSwitch5();

   }
   
   if ( momentaryButton ) {
    
    if ( momentaryButton & BUTTON_UP ) {
      
      yy = 1;
      // LED Green
      RGBLCDShield.setBacklight(GREEN);
      
    }
    
    if ( momentaryButton & BUTTON_DOWN ) {
      
      yy = 2;
      // LED Bipolar A
      RGBLCDShield.setBacklight(VIOLET);
      
    }
    
    if ( momentaryButton & BUTTON_LEFT ) {
      
      yy = 3;
      // LED Bipolar B
      RGBLCDShield.setBacklight(TEAL);
      
    }
    
    if ( momentaryButton & BUTTON_RIGHT ) {

      yy = 4;
      // LED Bipolar A B
      RGBLCDShield.setBacklight(YELLOW);
    }
    
    if ( momentaryButton & BUTTON_SELECT ) {

      yy = 5;
      // LED Red
      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() {

   //int incb = 0;  
   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.println( msg );
         
  // }
     
}

getSwitch.ino

// Switch
// Switch 1
void isSwitch1(){

   yy = 1;
   
   isSwitchLEDStop();
   // LED 
   // turn LED on:
   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Green");  
   
}
// Switch 2
void isSwitch2(){

   yy = 2;

   isSwitchLEDStop();
   // LED 
   // turn LED on:
   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Bi-Colour A");    
      
}
// Switch 3
void isSwitch3(){

   yy = 3;

   isSwitchLEDStop();
   // LED 
   // turn LED on:
   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Bi-Colour B");    
      
}
// Switch 4
void isSwitch4(){

   yy = 4;

   isSwitchLEDStop();
   // LED 
   // turn LED on:
   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Bi-Colour A B"); 
      
}
// Switch 5
void isSwitch5(){

   yy = 5;

   RGBLCDShield.setCursor(0,1);    
   RGBLCDShield.print("Stop");

   //delay( 250 );

   isSwitchLEDStop();
   // LED 
   // turn LED on:
   //digitalWrite(iLEDRed, HIGH);   
       
}
void isSwitchLEDStop(){

  //digitalWrite(iLEDRed, LOW);
  //digitalWrite(iLEDGreen, LOW);
  //digitalWrite(iLEDB1, LOW);
  //digitalWrite(iLEDB2, LOW);
  //digitalWrite(iLEDYellow, LOW);
  
}

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 Fio

LER – Digital 13
LEG – Digital 12
LEA – Digital 11
LEB – Digital 10
LEY – Digital 9
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

DL2001Mk02Rp.ino

// ***** Don Luc Electronics © *****
// Software Version Information
// Project #12: Robotics - Unmanned Vehicles 1b - Mk06
// 01-02
// DL2001Mk02Rp.ino 12-06
// Arduino Fio
// SparkFun FTDI Basic Breakout - 3.3V
// EEPROM with Unique ID
// LED Red
// LED Green
// LED Bi-Colour
// LED Yellow
// Lithium Ion Battery - 2.5Ah
// Receiver
// XBee S1

// Include the library code:
// EEPROM library to read and write EEPROM with unique ID for unit
#include <EEPROM.h>

// LED Red
int iLEDRed = 13;
// LED Green
int iLEDGreen = 12;
// LED Bi-Colour
int iLEDBiCoA = 11;
int iLEDBiCoB = 10;
// LED Yellow
int iLEDYellow = 9;

// Momentary Button
int yy = "";

// Software Version Information
String sver = "12-02";
// Unit ID information
String uid = "DR001";

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( 18 );
         
         Serial.println(zzz);
         
         yy = zzz.toInt();
         
        Serial.println( yy );
        
      }
   }
     
}

getSwitch.ino

// Switch
// isSwitch
void isSwitch(){
  
  switch ( yy ) {
    case 1:
    
      // LED Green
      sLEDStop();
      digitalWrite(iLEDGreen, HIGH);
      delay( 1000 );
      
      break;
    case 2:
    
      // LED Bi-Colour A
      sLEDStop();
      digitalWrite(iLEDBiCoA, HIGH);
      delay( 1000 );
      
      break;
    case 3:

      // LED Bi-Colour B
      sLEDStop();
      digitalWrite(iLEDBiCoB, HIGH);
      delay( 1000 );
      
      break;
    case 4:

      // LED Bi-Colour A B
      sLEDStop();
      digitalWrite(iLEDBiCoA, HIGH);
      digitalWrite(iLEDBiCoB, HIGH);
      delay( 1000 );
      
      break;
    case 5:

      // LED Red
      sLEDStop();
      digitalWrite(iLEDRed, HIGH); 
      delay( 1000 );
       
      break;
    default:

      // LED Red
      sLEDStop();
      digitalWrite(iLEDRed, HIGH);
      delay( 1000 ); 

   }
  
}
// LED Stop
void sLEDStop(){

  digitalWrite(iLEDRed, LOW);
  digitalWrite(iLEDGreen, LOW);
  digitalWrite(iLEDBiCoA, LOW);
  digitalWrite(iLEDBiCoB, LOW);
  
}

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);

  // LED => OUTPUT
  pinMode(iLEDRed, OUTPUT);
  pinMode(iLEDGreen, OUTPUT);
  pinMode(iLEDBiCoA, OUTPUT);
  pinMode(iLEDBiCoB, OUTPUT);
  pinMode(iLEDYellow, OUTPUT);

  // LED Yellow
  digitalWrite(iLEDYellow, 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

Fun with browsers and WordPress

Apr 30, 2010 @ 20:40

It has been one of those days. Somebody reported to me last night that the theme of our <a href=”http://www.igourmand.com/eatdrink/”>food and wine blog</a> did not display the first photo of any page correctly. The first image appeared after a huge space. The problem only happened with Internet Explorer and everything was fine with Firefox. Thus became the quest early this morning at 8am and I started tracking the problem.

I first thought that it was some “Div” problem as the theme used was one that I had made over 5 years ago. I recently rewrote it to change the look and then I rewrote it again last week to bring it into line with the current WordPress theme architecture. I had yet to polish it and finish formatting it and commenting it properly, so my logical thought was it was just some error in one of the PHP files of the theme. I even remembered checking it with various browsers just last week to make sure there was not such a problem, but since I have been doing small incremental update maybe some little error slipped in and I did not catch it.

I first checked the source code in the browser to see if I could find something wrong there. I used a few automated HTML formatter and the results were dismal. If somebody has a good HTML formatter that actually works to recommend, please let me know.

I ended up formatting everything by hand and after reviewing the code found out that there was absolutely nothing obviously wrong with it, and nothing that would explain the discrepancy between Firefox and IE. I had a hunch that the problem might be with the sidebar code, so I disabled it and low and behold the huge space before the first image on a page disappeared. Thus my hunch was right.

I then re-enabled each section of the sidebar one after another until the problem reappeared and finally found that the problem was with the image links I added a few days ago in the sidebar. There is absolutely no reason that IE should behave this way, except that it does not interpret the CSS properly. There is plenty of space for both the sidebar image links and the image in the post, and even if I resized the image in the post to a smaller size the problem continued.

I then starting fine-tuning the CSS and with just a few minor changes of around 15 pixels in one section everything popped back together as it should. I guess that IE is just very bad at properly following the CSS and placing elements on the screen.

Once that was done I decided that since I was in the middle of doing a lot of things with the theme, I should finish it properly. I spent the rest of the day properly formatting the code, changing deprecated WordPress functions to their new versions, profusely commenting the theme so the next time I need to modify things I can quickly find what I am looking for, doing some minor cosmetic changes to the theme, and generally improved its function and look. I still want to spend a bit of time beautifying things, but now it will be a much simpler job after the work that was done today.

What started as what I thought would be a simple job finding a faulty line of code, ended up a day of detective work. The nice thing is that I learned a lot dissecting the more recent template format of WordPress as I had not digged in its depths since version 1.5. It is much more flexible and powerful now and I will go to bed much less stupid tonight after a great day learning new things about the inner works of WordPress. I’m just glad that the work was for myself as I would not have like to explain the reason to justify a full day a work simply to move a picture up in a blog to a client.

Don Luc

Open ltr 2 all of u out there

Apr 26, 2010 @ 18:54

Today while I was doing some cleanup around the office I came across some letters and messages from people who had contacted me over the past few years either to ask for work or to ask to distribute some of my software products. I had kept them aside as a reminder on how not to do business. It is a pet peeve of mind that when you communicate on business purposes to do it properly and to write well and to try to do your best to use proper grammar and spelling.

I might be showing my age, but it does gets me very mad when I receive some business message that is either very badly written or written as it you are sending a SMS message like the title of this post. There are no reason for either ones, especially the first one as nowadays spelling and grammar correctors are ubiquitous on all computer platforms. If somebody wants to find a job or wants to do business with someone it looks very bad on you when you send messages like that as the first impression you make to your prospective client, employer, or partner is one that you cannot even bother to put your thoughts down and write them properly.

Professionally I write thousands of words daily on various subjects and for various purposes, all of it with minimal editing and proofreading, so I am the first person guilty of grammatical and spelling mistakes, but when you come across as if you have no idea of what you are talking about due to poor writing skills or worse you consider business communication no more important than a quick SMS to your best buddies you will have problems going forward with any goals you might have in mind. This is not just for the younger generations out there, a lot of people of my generation suffer from the same problems.

I deal with people from all over the world daily and I do understand that if English is not your primary language, you might have some problems in communicating perfectly. I know from experience as English is not my mother tongue, French is. I have also spoken English since early childhood, and essentially have studied and worked in English since my late teens so English is my primary language these days, even though that at home now for the past 2-3 years we have switched from using English to using Spanish. I find the same problem with French and Spanish speaking people, that the quality of the written communication has dropped down dramatically over the past 10 years, when it should have increase a lot with all the spelling and grammar correction facilities we now have. It seems that people just don’t care anymore.

Wake up people, you have the tools to communicate in a better and more effective way. If you are too lazy to even take the few second to communicate effectively life will pass you by as where it counts people will think that you are too lazy to work effectively. Also take pride in you language as if you do not use it properly who will? For those like me who communicate mostly in languages that are own, take pride in learning it properly so that you can communicate and work effectively.

Take this advise seriously as we human can make something with our lives and progress with effective communications and those who do not even make the effort to do so will be left behind. It is not just an old consultant like me who says it, it is the entire business world. When faced to choose between two candidates, which one do you think a decision maker will select, the one that sounds like a professional or the one that sounds like some street gang member?

Don Luc

Why be a consultant?

Apr 25, 2010 @ 20:17

There are many reasons why one would want to become a consultant.

Some would love to ditch their corporate jobs and be lured to become self-employed. After being self-employed all of my adult life I would not know what to recommend to those as I do not know any other way. I know that my wife Norma had problems getting adapted to the consultant way, as she had the opposite experience of being employed all of her adult life by banks or investment firm. Being self-employed to her was very traumatic at first, and still is when business slows down. Leaving the security of a good job is very hard to do, especially if you are used to have and count on a regular income. It becomes very difficult to plan things like mortgages and car loans or other regular types of expenses, when you are never sure of exactly of what your income will be next month. For some this is something they cannot live with, and to others like me, it is something so normal that you never really think about it. You just have to be very careful with your expenses and plan your life and budget accordingly. Those who cannot live with that kind of uncertainty should no even think of being a consultant or to be self-employed for that matter.

Other people would love to work at home like a lot of us do. For that too you need to have a certain sense of organization to be able to do it without all the normal distractions around the house preventing you from doing any works. It all depends on how well organized you are and how you can isolate yourself from other things and concentrate on your work. Most people find it difficult at first, but get used to it with time. For those who can’t it might be better to think about working for some consulting firm that will place you at their client’s site.

Others are lured by the large fees that some consultants charge. This might look very tempting at first glance, but when you start analyzing it in depth once you take this high fee, deduct from it your operating expenses, the equipment, tools and software you might need to perform your consulting, publicity, legal and accounting fees, office expenses, and the fact that you are rarely billing the full time you are working each week, you might not be making a huge amount more than you are doing right now at your current job. Add to that all of those other things that you never think of, like the fact that normally when you are on your own you do not have the niceties of things like health and other types of insurance, retirement plans, benefits and more.

Does that mean that you should not become a consultant? Of course not! If you can live with all of the above and more and have the personality to enjoy those kinds of challenges and live your life differently than most of your neighbors and friends, consulting is an immensely rewarding profession that can offer you things that you would never have the chance of experiencing otherwise. I would not even dream of doing something else and if I have not become a consultant so long ago I would never had the life and the experiences I have had. Sure, it can be very hard at times, all the good things in life are hard to achieve, but the rewards are huge for those who like a challenge and can focus to achieve their goals.

Don Luc

What type of consultant am I?

Apr 24, 2010 @ 14:29

There are many ways of defining oneself as a consultant. The traditional consultant is normally somebody who is an expert in his field with either a long career behind him or very specific specialized knowledge that is not common in a field. He is hired to resolve specific issues by clients or “consulted” when his client need information on some topic that they are an expert.

The term is also used for people who do contract work in a specific field. They usually work one contract at a time and they will build something, or deliver a project for their client. This used to be called a contractor, but these days the definition is getting fuzzier as a lot of  “Consulting” firms are normally placing “Contractors” at their client’s sites and calling them “Consultants”

More and more self-employed workers, or workers moonlighting in their spare times are now calling themselves “Consultants” though they might not be doing much actual consulting or contracting work.

This confuses a lot of people looking to hire external resources as a lot of people are calling themselves “Consultants” and actually offer a wide variety of services only some of which are actual consulting. It is a good thing for people who which to hire external help, consultant or other, to make sure before they start looking that they know what kind of help they are looking for.

Coming back to the main topic of this post. I started in the mid 1980’s as a traditional consultant in the food and wine business. My various clients hired me for my specialized knowledge and consulted me on various topics and I would also do specific contracts for them on a regular basis like travel to various places worldwide to purchase various things for them or just analyze what was available in the market. I started during that period doing consulting work in computer graphics and animation which was a new field in those days and then I started to consult more and more about IT using the knowledge I had as I trained as a mainframe programmer at university ten years earlier.

In the early 1990’s I was doing more and more IT consulting for local clients and prior to the advent of the Internet, in the old days of the original CompuServe network of which I had been a member since around 1986, I started consulting with many clients worldwide from my office at the edge of a lake in Northern Quebec. I also started doing more and more contracting for various large companies in the United States and elsewhere. I spent most of the 1990’s traveling over 6 months of the year to work onsite with many clients worldwide. The rest of the year was spent either consulting or contracting, as I do differentiate, for my clients from my office in Quebec.

In the late 1990’s during the time of the big Internet crash, I started developing my own line of software products for retail business management, point of sales, ticketing systems, kiosk systems, and decision support systems. In 2003 I moved to Mexico City to promote some of my products and to get away from the cold of Quebec as my Mexican wife was feeling somewhat unaccustomed to the long winters and isolated over there.

Today I am back to being a traditional consultant full time, though I still work regularly on my software products and actively promote and find new markets for them. I continue my IT consulting as always and consult with businesses looking for new markets or with startups looking for advice. I also do contract work developing innovative software, integrate software with hardware, and of course I still do consult in the food and wine industry, my first love.

My motto has always been since I was a kid that I need to learn something new every single day as if I do not that day is wasted. Since I have been in the consulting business for so long, and tried hard to not waste any day of it, I have accumulated a lot of knowledge over the years. This is why for many years now that I love to teach and give conferences to pass this knowledge to others. I tend to be very passionate about this, as I have always love to educate people and convince them that they should learn something new every day. My wife Norma always says that I should have been a preacher, but what I am really is a traditional consultant that likes to share is experience and knowledge with others.

Don Luc

Why Consult Ants?

Apr 22, 2010 @ 19:23

As you main have noticed the blog is launching its new look today. I spent the last hour creating a quick and dirty theme for the blogs with a few simple graphics and over the new few weeks I will probably refine the look when I have a bit more time.

Some of you might be wondering why I named the blog “Consult Ants”. Besides the obvious bad pun, the name reflects my view of what the consulting business has evolved over the last decade. When I started as a consultant over 25 years ago, the profession was very different and was guided by some standards, which of course a lot of consultants were not following and giving a bad name to the profession, but it did meant something to the users of our services as the consultants that were doing a good job were respected in the industry and by our clients.

Today it seems that everybody and their cousins is a consultants, and just mentioning the name “Consultant” brings a bad connotation to a lot of people’s minds. It used to be that one would rise to the top of their field and then become a consultant, but now I see teenagers that label themselves consultants and want to sell their services at $5 an hour. That is not good for them, their clients, and for all consultants. I will rant and rave about this at length in the future, but this is what brought the name of this new blog to my mind. It seems that in lots of people’s minds us professional consultants are like a bunch of little interchangeable ants that are just running around in circles doing work and that every ant is doing the same job mindlessly. I want to bring this piece of information to the surface and dispel it, thus the name “Consult Ants” is there to bring it to the attention of most.

Since this blog will not be a structured one and will be more of a stream of mind type of blog, I am not sure exactly where this will lead, but bear with me when I try to find its directions and feel free to participate in the comment section.

Don Luc