Servo code

I am attempting to copy a project that I saw on youtube for a automated dust collector system.I have everything working except the servos. I am new to this. Hopefully someone can help.
Here is the code that I am using.

/*

This script was created by Bob Clagett for I Like To Make Stuff
For more projects, check out iliketomakestuff.com

Includes Modified version of “Measuring AC Current Using ACS712”
http://henrysbench.capnfatz.com/henrys-bench/arduino-current-measurements/acs712-arduino-ac-current-tutorial/

Parts of this sketch were taken from the keypad and servo sample sketches that comes with the keypad and servo libraries.

Uses GitHub - adafruit/Adafruit-PWM-Servo-Driver-Library: Adafruit PWM Servo Driver Library
*/
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// called this way, it uses the default address 0x40
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
// you can also call it with a different address you want
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);

// Depending on your servo make, the pulse width min and max may vary, you
// want these to be as small/large as possible without hitting the hard stop
// for max range. You’ll have to tweak them as necessary to match the servos you
// have!

// our servo # counter
uint8_t servoCount = 6;
uint8_t servonum = 0;

const int OPEN_ALL = 100;
const int CLOSE_ALL = 99;

boolean buttonTriggered = 0;
boolean powerDetected = 0;
boolean collectorIsOn = 0;
int DC_spindown = 3000;

const int NUMBER_OF_TOOLS = 3;
const int NUMBER_OF_GATES = 6;

String tools[NUMBER_OF_TOOLS] = {“Miter Saw”,“Table Saw”,“Band Saw”}; //, “Floor Sweep”
int voltSensor[NUMBER_OF_TOOLS] = {A1,A2,A3};
long int voltBaseline[NUMBER_OF_TOOLS] = {0,0,0};

//DC right, Y, miter, bandsaw, saw Y, tablesaw, floor sweep
//Set the throw of each gate separately, if needed
int gateMinMax[NUMBER_OF_GATES][2] = {
/open, close/
{250,415},//DC right
{230,405},//Y
{230,405},//miter
{285,425},//bandsaw
{250,405},//saw y
{250,415},//floor sweep
};

//keep track of gates to be toggled ON/OFF for each tool
int gates[NUMBER_OF_TOOLS][NUMBER_OF_GATES] = {
{1,0,1,0,0,0},
{1,1,0,0,1,1},
{1,1,0,1,0,0},
};

const int dustCollectionRelayPin = 11;
const int manualSwitchPin = 12; //for button activated gate, currently NOT implemented

int mVperAmp = 185; // use 100 for 20A Module and 66 for 30A Module
double ampThreshold = .20;

double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;

//button debouncing
int state = HIGH; // the current state of the output pin
int reading; // the current reading from the input pin
int previous = LOW; // the previous reading from the input pin

// the follow variables are long’s because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long time = 0; // the last time the output pin was toggled
long debounce = 200; // the debounce time, increase if the output flickers

void setup(){
Serial.begin(9600);
pinMode(dustCollectionRelayPin,OUTPUT);
pwm.begin();
pwm.setPWMFreq(60); // Default is 1000mS

//record baseline sensor settings
//currently unused, but could be used for voltage comparison if need be.
delay(1000);
for(int i=0;i<NUMBER_OF_TOOLS;i++){
pinMode(voltSensor*,INPUT);*
voltBaseline = analogRead(voltSensor*);*
* }*

}
void loop(){
* // use later for button debouncing*
* reading = digitalRead(manualSwitchPin);*
* if (reading == HIGH && previous == LOW && millis() - time > debounce) {*
* if (state == HIGH){*
* state = LOW;*
* buttonTriggered = false;*
* } else{*
* state = HIGH;*
* buttonTriggered = true;*
* time = millis(); *
* }*
* }*
* previous = reading;*
* Serial.println("----------");*
* //loop through tools and check*
* int activeTool = 50;// a number that will never happen*
* for(int i=0;i<NUMBER_OF_TOOLS;i++){
_ if( checkForAmperageChange(i)){
activeTool = i;
exit;
}
if( i!=0){
if(checkForAmperageChange(0)){
activeTool = 0;
exit;
}
}
}
if(activeTool != 50){
// use activeTool for gate processing*
* if(collectorIsOn == false){
//manage all gate positions*
* for(int s=0;s<NUMBER_OF_GATES;s++){*
* int pos = gates[activeTool];
~~ if(pos == 1){
openGate(s);
} else {
closeGate(s);
}
}
turnOnDustCollection();
}
} else{
if(collectorIsOn == true){_
delay(DC_spindown);
_
turnOffDustCollection();
}
}
}
boolean checkForAmperageChange(int which){
Voltage = getVPP(voltSensor[which]);*
VRMS = (Voltage/2.0) 0.707;
AmpsRMS = (VRMS * 1000)/mVperAmp;~~
~~ Serial.print(tools[which]+": “);
Serial.print(AmpsRMS);
Serial.println(” Amps RMS");
if(AmpsRMS>ampThreshold){
return true;
}else{
return false;
}
}
void turnOnDustCollection(){
Serial.println(“turnOnDustCollection”);
digitalWrite(dustCollectionRelayPin,1);
collectorIsOn = true;
}
void turnOffDustCollection(){
Serial.println(“turnOffDustCollection”);
digitalWrite(dustCollectionRelayPin,0);
collectorIsOn = false;
}~~*_

float getVPP(int sensor)
{
~~ float result;~~

~~ int readValue; //value read from the sensor~~
~~ int maxValue = 0; // store max value here~~
~~ int minValue = 1024; // store min value here~~

~~ uint32_t start_time = millis();~~
~~ while((millis()-start_time) < 500) //sample for 1 Sec~~
~~ {~~
~~ readValue = analogRead(sensor);~~
~~ // see if you have a new maxValue~~
~~ if (readValue > maxValue)~~
~~ {~~
~~ /record the maximum sensor value/~~
~~ maxValue = readValue;~~
~~ }~~
~~ if (readValue < minValue)~~
~~ {~~
~~ /record the maximum sensor value/~~
~~ minValue = readValue;~~
~~ }~~
~~ }~~

~~ // Subtract min from max~~
~~ result = ((maxValue - minValue) * 5.0)/1024.0;~~

~~ return result;~~
}
void closeGate(uint8_t num){
~~ Serial.print("closeGate ");~~
~~ Serial.println(num);~~
~~ pwm.setPWM(num, 0, gateMinMax[num][1]);~~
}
void openGate(uint8_t num){
~~ Serial.print("openGate ");~~
~~ Serial.println(num);~~
~~ pwm.setPWM(num, 0, gateMinMax[num][0]);~~
~~ delay(100);~~
~~ pwm.setPWM(num, 0, gateMinMax[num][0]-5);~~
}
I can not get the servos to work. I dont understand line 52-57 and line 62-64

Still won't use code tags, eh?

I tried. It just wont work for some reason. Do I get a E for effort?

If you can’t even work out how to post code then you have very little chance of being able to understand code or get it working. Might as well give up now.

Steve

This is a continuation of this thread.

An Arduino UNO can drive up to 12 hobby servos. There is a built-in Servo library with examples.

Looks like what your code should be doing is figure out which tool is on, open the air gates to that tool, and turn on the vacuum. When all tools are off, turn off the vacuum and close all gates.

I may not be able to figure out how to post the code, but I did figure out how to make the servos work. Thank everyone for their help. Now the task of wiring everything up

gladewater2016:
I may not be able to figure out how to post the code, but I did figure out how to make the servos work. Thank everyone for their help. Now the task of wiring everything up

If you look in the IDE, goto the EDIT tab and select “Copy for Forum”, this will put your code into clipboard with code tags already attached.
codeedit.jpg
Then goto you Forum post and “paste” into your post and BINGO its done.
Tom… :slight_smile: