Sunday, March 30, 2014

Compass Sensor mount - Andrew Baden

For our compass sensor, we need a mount that is a material that will not interfere with sensor itself.  So, I created this mount that we can print on the 3D printer with plastic material.  This mount also places the sensor itself above anything else that could possibly interfere with it such as magnetic fields from motors, or the metal chassis itself.

CADD Model of Compass Mount

Saturday, March 22, 2014

Dog Collar Work - Andrew Baden

Over spring break, I worked on getting the dog collar to interface with the Arduino micro controller.  When I had it connected before, it was having issues reading stable values while the dog collar was not detecting the outer boundary of the dog fence.  I found a simple issue with it, and fixed the problem.  The polarity was backwards! So now I have this working with an analog input on the micro controller itself.  To make this more simple when it comes to programming, I put the output to a 7414 inverting hex Schmitt trigger.   I used the 7414 to clean up the output of the dog collar because it was not always giving a nice stable value.  This will also allow us to use a digital input on the micro controller, and detect if it is at the boundary or not with boolean values rather than a range of values with the analog input.  

Schmitt Trigger on breadboard

Schmitt Trigger schematic
Basically when the Schmitt trigger sees an input (I am currently using pin 1) that is above 1.7V it will trigger a low output on pin 2, and when the trigger sees an input lower than  0.8V, it sends out a high output on pin 2. Now when the dog collar is near the dog fence, the input on the micro controller will read a LOW, and when the dog collar is away from the fence, a HIGH will be read.  I could potentially put the output of the inverter into the input of another inverter and the output of the second inverer to the micro controller to allow a HIGH to indicate the collar being next to the boundary, and a LOW to indicate the collar being away from the boundary.

Friday, March 7, 2014

Compass Programming with Vex Prototype- Matt Mannino

I have mounted the Arduino and the sensors onto the Vex prototype to start working on a main program.  I interfaced the Vex motors to the Arduino and added a 7.2V NiMH battery for power to the Arduino and the Vex Motors.  We started on a program that will face the robot in the correct heading based on what values it is given.  It works fine for headings up to 359 degrees.  It has trouble pointing North because it is on the threshold of 359 to 0 degrees and cannot compensate for that.  I have been trying to work on it so that it can work with that threshold of values.


Compass Program

#include <Wire.h>
#include <LSM303.h>
#include <Servo.h>

LSM303 compass;
Servo LeftMotor;
Servo RightMotor;
Servo BallMotor;

int stopp = 100;
int forward = 70;
int backward = 130;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  compass.init();
  compass.enableDefault();
  LeftMotor.attach(3);
  RightMotor.attach(2);
  BallMotor.attach(4);
 
  compass.m_min = (LSM303::vector<int16_t>){-32767, -32767, -32767};
  compass.m_max = (LSM303::vector<int16_t>){+32767, +32767, +32767};
}

void loop()
{
  int dir = compass.heading();
  Serial.println(dir);
 
  face(180);
}

void face (int val)
{
  int dir = 0;
 
  while(true)
  {
    compass.read();
    dir = compass.heading();
   
    Serial.println(dir);
   
     if(dir > (val+5))
     {
       turnleft();
     }
     else if(dir < (val-5))
     {
       turnright();
     }
     else
     {
       nospeed();
       delay(50);
       break;
     }
   }
 }

//motor movement functions
void goforward()
{
  RightMotor.write(backward);
  LeftMotor.write(forward);
  delay(1);
}

void gobackward()
{
  RightMotor.write(forward);
  LeftMotor.write(backward);
  delay (1);
}

void nospeed()
{
  RightMotor.write(stopp);
  LeftMotor.write(stopp);
  delay (1);
 
}

void turnleft()
{
  RightMotor.write(backward);
  LeftMotor.write(backward);
  delay (1);
}

void turnright()
{
  RightMotor.write(forward);
  LeftMotor.write(forward);
  delay(1);
}

void ballmotor()
{
  BallMotor.write(forward);
  delay(1);

}

Chassis Rail Machining - Andrew Baden

Today I worked with Dr. Bronakowski on machining the side chassis rails using the CNC machine to allow the motor mounts to be adjustable.  We would like these motor mounts to be adjustable so that we can minimize the amount of slack in the chains used for the drive system.

Slot in chassis rail for motor mounts
Here are pictures of the motor mount attached to one of the chassis rails:

Top view

Front view
The motor mount is not fully attached in these pictures because I just wanted to do a test fit with the motor mounts to see if they fit correctly with the fasteners that we are using.  Later I will need to machine a similar but larger slot for the motor's shaft to go through.

Sunday, March 2, 2014

Parts arriving, Sprocket Modification, Chassis Rail Modification - Andrew Baden

The parts ordered from VEX Robotics including wheels, sprockets, bearings, and collars were received today.  When the parts were being confirmed, some parts were not correct. 

New Parts from VEX Robotics
The sprockets we ordered were not the size we needed.  We will have to adjust sprockets on hand and modify them for our cause.  To get these sprockets to work with what we need, all we have to do is drill three holes into the existing sprockets to attach them to our wheel/chain assembly.  In the picture below, the sprocket on the right is the sprocket being modified, and the series of sprockets on the left are secured to the other sprocket to allow us to drill out the proper holes for attaching the existing sprockets to the wheel assembly.

Sprocket Assembly to Drill in Drill Press
To allow the motor chains from falling off their sprockets, we are creating a slot in the chassis rails to allow the motors on each side to be adjustable, so they can eliminate any slack present in the assembly.

Chassis Rail with Slotted Drawing






Compass and Line Sensor Programming- Matt Mannino

The orders came in finally and I was able to start working on programming the Pololu LSM303 Compass Sensor.  I used an example program from Pololu using their specific library for the LSM303.  I was getting stable values for the heading.  I also started on the line sensing programming using the QRD1114 light sensors.  The light sensor is for predetermined boundaries where the robot is going to operate in using tape.

QRD1114 Wiring for Arduino


Value Readings from QRD1114 Light Sensor

Heading Value Readings from LSM303 Compass Sensor



LSM303 Pinouts


     5V  ->  VIN
    GND  ->  GND
    SDA  ->  SDA
    SCL  ->  SCL








QRD1114 Test
int sensorPin = 0; //A0

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int val = analogRead(sensorPin);
  Serial.println(val);

  delay(100);


}


LSM303 Compass Heading

#include <Wire.h>
#include <LSM303.h>

LSM303 compass;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  compass.init();
  compass.enableDefault();

  compass.m_min = (LSM303::vector<int16_t>){-32767, -32767, -32767};
  compass.m_max = (LSM303::vector<int16_t>){+32767, +32767, +32767};
}

void loop()
{
  compass.read();

  float heading = compass.heading();

  Serial.println(heading);
  delay(100);

}