Project showcase
Arduino Camshaft Measurement Tool

Arduino Camshaft Measurement Tool © GPL3+

An Arduino camshaft measurement tool.

  • 997 views
  • 0 comments
  • 5 respects

Components and supplies

Digital Dial indicator with SPI interface
×1
SPI to HID controller for indicator
×1
Nema 17 dual shaft stepper motor
×1
Stepper motor controller
×1
Solid state 5v relay board
×1
Optical end stop
×1
Incremental rotary encoder (non essential)
×1
A000066 iso both
Arduino UNO & Genuino UNO
×1
Aluminum extrusion and brackets
×1
3D printed parts and brackets
×1
Shaft couplers (modified to remove play)
×1
12002 04
Breadboard (generic)
×1

Necessary tools and machines

Basic hand tools
3drag
3D Printer (generic)

Apps and online services

Spreadsheet for creating the chart

About this project

I built this to automate the plotting of camshaft profiles.

30 years ago I sat with a piece of graph paper, a dial indicator, and a degree wheel for several days plotting camshaft profiles for a race engine.

After gaining some experience with stepper motors and microcontrollers I decided to make a tool to do this automatically.

The design is my own, there are a few existing variations of Arduino camshaft measuring tools on the web and I did get inspiration from several of these as well as using modified code from GitHub and and other sources.

I posted a video of this in operation.


Code

Stepper motor pushbutton controlArduino
This is the code to manipulate the stepper motor for aligning the camshaft and making the 360 revolution for taking the measurements. This is modified code originally taken from the web.
#define stp 2
#define dir 3
#define MS1 4
#define MS2 5
#define EN  6

const int button1Pin = 7;
const int button2Pin = 8;
const int button3Pin = 9;
const int ledPin =  13;
int button1State = 0;
int button2State = 0;
int button3State = 0;

char user_input;
int x;
int y;
int state;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(button1Pin, INPUT);
  pinMode(button2Pin, INPUT);
  pinMode(button3Pin, INPUT);  
    
  pinMode(stp, OUTPUT);
  pinMode(dir, OUTPUT);
  pinMode(MS1, OUTPUT);
  pinMode(MS2, OUTPUT);
  pinMode(EN, OUTPUT);
  resetEDPins();
}

void loop() {
      button1State = digitalRead(button1Pin);
      button2State = digitalRead(button2Pin);
      button3State = digitalRead(button3Pin);
      
      if (button1State == HIGH) {
        digitalWrite(EN, LOW);
        StepForward();
        resetEDPins();
        delay(250);
      } 

      if (button2State == HIGH) {
        digitalWrite(EN, LOW);
        StepBack();
        resetEDPins();
        delay(250);
      }else {
        digitalWrite(ledPin, LOW);
      }

      if (button3State == HIGH) {
        digitalWrite(EN, LOW);
        aStepBack();
        resetEDPins();
        delay(250);
      }else {
        digitalWrite(ledPin, LOW);
      }
}

void resetEDPins()
{
  digitalWrite(stp, LOW);
  digitalWrite(dir, LOW);
  digitalWrite(MS1, LOW);
  digitalWrite(MS2, LOW);
  digitalWrite(EN, HIGH);
}

void StepForward()
{
  digitalWrite(dir, LOW);

  for(x= 1; x<2; x++)
  {
        digitalWrite(stp,HIGH);
        delay(200);
        digitalWrite(stp,LOW);
        delay(200);
    }
}

void StepBack()
{
 digitalWrite(dir, HIGH);
  for(x= 1; x<801; x++)
  {
    digitalWrite(stp,HIGH);
    delay(200);
    digitalWrite(stp,LOW);
    delay(200);
  }
}  

void aStepBack()
{
 digitalWrite(dir, HIGH);
  for(x= 1; x<2; x++)
  {
    digitalWrite(stp,HIGH);
    delay(200);
    digitalWrite(stp,LOW);
    delay(200);
  }  

}

// 56.5 number for 8 reads per sec of indicator
//    delay(56.5);

Custom parts and enclosures

basic mechanical setup
basic mechanical setup
I posted a video of this in operation
https://www.youtube.com/watch?v=oWigCN4UOSY
Mechanical cj4cvdh0gk

Schematics

some pretty basic wiring
this is a pic of the wiring, it is very basic
Wiring khake9b9pq
Chart showing a comparison of lobe profiles
Chart showing a comparison of lobe profiles
Cam chart xdipauivtl

Comments

Similar projects you might like

Arduino Bluetooth Robot for Android Device

Project showcase by aip06

  • 5,443 views
  • 2 comments
  • 20 respects

Golf Grip alignment tool

Project in progress by Hunter Mitchell

  • 2,451 views
  • 2 comments
  • 8 respects

Distance Measurement Vehicle via Websocket

Project tutorial by Matthew Lee

  • 16,394 views
  • 2 comments
  • 86 respects

Frequency and Duty Cycle Measurement Using Arduino

Project tutorial by ambhatt

  • 16,404 views
  • 1 comment
  • 15 respects
Add projectSign up / Login