Shop OBEX P1 Docs P2 Docs Learn Events
P2 Edge Goes For a Ride — Parallax Forums

P2 Edge Goes For a Ride

Items used to build the RoadSteer:

  • P2 Edge
  • Flat Edge Adapter Board
  • 5 Volt Regulator
  • 3 Volt Regulator
  • Parallax WiFi Module
  • 2 NEMA 17 Motors
  • 2 A4988 Motor Drivers
  • X8R RC Receiver
  • 11.3 Volt Battery
  • 5mm to 12mm Adapters
  • 2 Rubber Wheels
  • RoadSteer 3D Printed Frame
  • Plastic Spoon
  • 10 M3 8mm Socket Screws
  • 2 M4 Screws
  • RC Radio

Code used to drive the RoadSteer:

#include <math.h>
#include <stdio.h>
#include <propeller.h>
#include "Stepper.h"
#include "Sbus.h"


#define SM1DIR 10
#define SM1STEP 9
#define SM1ENABLE 8
#define SM2DIR 13
#define SM2STEP 12
#define SM2ENABLE 11
#define X8R 36

#define DMax 1740
#define DMin 178
#define SMax 1811
#define SMin 184


int main(int argc, char** argv)
{
    int Dr, Sp;
    int left, right;
    int Ls, Rs;

    left = Stepper_Start(SM1ENABLE, SM1DIR, SM1STEP);
    right = Stepper_Start(SM2ENABLE, SM2DIR, SM2STEP);

    Stepper_Direction(right, 1);
    Sbus_Open(X8R);

    _waitms(1000);
    Sbus_SetScaled(1, 256, 1811);
    Sbus_SetScaled(2, 184, 1811);
    Sbus_SetScaled(3, 196, 1796);

    while (1)
    {
        Dr = Sbus_GetScaled(1);
        Sp = Sbus_GetScaled(2);

        //printf("Dr: %d, Sp: %d\r\n", Dr, Sp);
        if (Sp < 1000)
        {
            Sp = 0;
            Dr = 0;
            Stepper_Enable(left, 0);
            Stepper_Enable(right, 0);
        }
        else
        {
            Stepper_Enable(left, 1);
            Stepper_Enable(right, 1);
            Dr = 1500 - Dr;
            if (abs(Dr) < 30)
                Dr = 0;
            Sp = 1500 - Sp;
            if (abs(Sp) < 5)
                Sp = 0;
        }

        Ls = Sp >> 2;
        Rs = Sp >> 2;
        Ls = Ls + Dr / 4;
        Rs = Rs - Dr / 4;

        if (Ls > 0)
            Stepper_Direction(left, 0);
        else
            Stepper_Direction(left, 1);

        if (Rs > 0)
            Stepper_Direction(right, 1);
        else
            Stepper_Direction(right, 0);

        //printf("Left: %d, Right: %d\r\n", Ls, Rs);
        Stepper_Speed(left, abs(Ls));
        Stepper_Speed(right, abs(Rs));

        _waitms(1);
    }
}

Libraries used:

  • SBUS Receiver
  • Stepper Motor Driver

RoadSteer Parts

Video of RoadSteer

Next, I want to replace the Stepper motor driver with a Step driver and remove the SBUS receiver and build a LOGO language program to control the robot with LOGO commands. With the accuracy of the step motor, it should work pretty well.

Mike

Comments

Sign In or Register to comment.