-
Notifications
You must be signed in to change notification settings - Fork 90
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
udoo compatable? or noob issue? #5
Comments
You need to install the required libraries. Watch a YouTube video on arduino library install. Then read the program comments about the three or four required libraries. The last error you see "MAX31855.h: No such file or directory |
Thank you, Hey , whats it like workin at gethub? --- Original Message --- From: "neilyboy" [email protected] You need to install the required libraries. Watch a YouTube video on arduino library install. Then read the program comments about the three or four required libraries. The last error you see "MAX31855.h: No such file or directory Reply to this email directly or view it on GitHub: |
I don't work for github lol. I'm just an end user like yourself. I actually just ordered my reflow controller a couple of days ago.looking forward to setting it up myself. |
Haha sweet, yeah it worked awesome, What oven and ssr did you go with? Ultimately im trying to mod my preheat bed, and my rework station to be controlled automatically but atleast for a guide for like gba reflow , reworking, , gpu chips and other --- Original Message --- From: "neilyboy" [email protected] I don't work for github lol. I'm just an end user like yourself. I actually just ordered my reflow controller a couple of days ago.looking forward to setting it up myself. Reply to this email directly or view it on GitHub: |
hey yall thanks for checking in to my issue, any and all comments and insite is appretiated
i recently bought a reflow control sheild from rocket scream ,
http://www.rocketscream.com/shop/reflow-oven-controller-shield-arduino-compatible
came in fast for malaisa,
code-
https://github.com/rocketscream/Reflow-Oven-Controller
i have a preheater and a solder rework station with heat gun , i make a glass enclousuer , do i dont need the toser ovem , im focousing more on direct bga chip reflow, other rework components a plus, but over all that is the main objective , i was planning on useing this as a reflow or profile giude with a thermal coupple,
so basicly i can watch it and adjust the heat according to the profile , and eventually hook up the ssr to be able to contol the entire prossess or at least the heat gun directly , but i got it as a visual representation of the profile and prossess,
any who ,
when i got it , i notice as far as the foot print , there are 2 pins that are un used , the scl and sda and can find them on the provided schmattic but theres no clue as to what they are or there function , on the top two pins on the upper right of the sheild , ,
im not sure if i need to jump these to another port? or if not needed,
http://www.rocketscream.com/datasheet/rocketscream/arduino/shield/rsReflowControllerShield/RS-REFLOW-CONTROLLER-SHIELD-1R80.pdf
any way , my issue is , with the provided code and the librarry files included that they say are required i still get a compileing error and it wont load
heres my error, im still new to the arduino language so it may be a simple human error issue , but i loaded it in directly , and expect theres may be some modification needed to run udoo or a change of components or librarrys in the code
the MAX31855.h file is present and is in the direct root of the library folder? im not shure where im goin wron , please and thank you for any and all help and advice
CODE: SELECT ALL
Arduino: 0154 (Linux), Board: "Arduino Due (Programming Port)"
Using library LiquidCrystal in folder: /opt/arduino-1.5.4/libraries/LiquidCrystal
/opt/arduino-1.5.4/hardware/tools/arm-none-eabi/bin/arm-none-eabi-g++ -c -g -Os -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -Dprintf=iprintf -mcpu=cortex-m3 -DF_CPU=84000000L -DARDUINO=154 -DARDUINO_SAM_DUE -DARDUINO_ARCH_SAM -D__SAM3X8E__ -mthumb -DUSB_VID=0x2341 -DUSB_PID=0x003e -DUSBCON -DUSB_MANUFACTURER="Unknown" -DUSB_PRODUCT="Arduino Due" -I/opt/arduino-1.5.4/hardware/arduino/sam/system/libsam -I/opt/arduino-1.5.4/hardware/arduino/sam/system/CMSIS/CMSIS/Include/ -I/opt/arduino-1.5.4/hardware/arduino/sam/system/CMSIS/Device/ATMEL/ -I/opt/arduino-1.5.4/hardware/arduino/sam/cores/arduino -I/opt/arduino-1.5.4/hardware/arduino/sam/variants/arduino_due_x -I/opt/arduino-1.5.4/libraries/LiquidCrystal/src /tmp/build3467053573229346857.tmp/reflowOvenController.cpp -o /tmp/build3467053573229346857.tmp/reflowOvenController.cpp.o
reflowOvenController.ino:103:23: fatal error: MAX31855.h: No such file or directory
compilation terminated.
origonal code
CODE: SELECT ALL
/*******************************************************************************
*
*
*
*
*
*******************************************************************************/
// Comment either one the following #define to select your board revision
// Newer board version starts from v1.60 using MAX31855KASA+ chip
#define USE_MAX31855
// Older board version below version v1.60 using MAX6675ISA+ chip
//#define USE_MAX6675
// ***** INCLUDES *****
include <LiquidCrystal.h>
ifdef USE_MAX31855
#include <MAX31855.h>
else
#include <max6675.h>
endif
include <PID_v1.h>
// ***** TYPE DEFINITIONS *****
typedef enum REFLOW_STATE
{
REFLOW_STATE_IDLE,
REFLOW_STATE_PREHEAT,
REFLOW_STATE_SOAK,
REFLOW_STATE_REFLOW,
REFLOW_STATE_COOL,
REFLOW_STATE_COMPLETE,
REFLOW_STATE_TOO_HOT,
REFLOW_STATE_ERROR
} reflowState_t;
typedef enum REFLOW_STATUS
{
REFLOW_STATUS_OFF,
REFLOW_STATUS_ON
} reflowStatus_t;
typedef enum SWITCH
{
SWITCH_NONE,
SWITCH_1,
SWITCH_2
} switch_t;
typedef enum DEBOUNCE_STATE
{
DEBOUNCE_STATE_IDLE,
DEBOUNCE_STATE_CHECK,
DEBOUNCE_STATE_RELEASE
} debounceState_t;
// ***** CONSTANTS *****
define TEMPERATURE_ROOM 50
define TEMPERATURE_SOAK_MIN 150
define TEMPERATURE_SOAK_MAX 200
define TEMPERATURE_REFLOW_MAX 250
define TEMPERATURE_COOL_MIN 100
define SENSOR_SAMPLING_TIME 1000
define SOAK_TEMPERATURE_STEP 5
define SOAK_MICRO_PERIOD 9000
define DEBOUNCE_PERIOD_MIN 50
// ***** PID PARAMETERS *****
// ***** PRE-HEAT STAGE *****
define PID_KP_PREHEAT 100
define PID_KI_PREHEAT 0.025
define PID_KD_PREHEAT 20
// ***** SOAKING STAGE *****
define PID_KP_SOAK 300
define PID_KI_SOAK 0.05
define PID_KD_SOAK 250
// ***** REFLOW STAGE *****
define PID_KP_REFLOW 300
define PID_KI_REFLOW 0.05
define PID_KD_REFLOW 350
define PID_SAMPLE_TIME 1000
// ***** LCD MESSAGES *****
const char* lcdMessagesReflowStatus[] = {
"Ready",
"Pre-heat",
"Soak",
"Reflow",
"Cool",
"Complete",
"Wait,hot",
"Error"
};
// ***** DEGREE SYMBOL FOR LCD *****
unsigned char degree[8] = {
140,146,146,140,128,128,128,128};
// ***** PIN ASSIGNMENT *****
ifdef USE_MAX31855
int ssrPin = 5;
int thermocoupleSOPin = A3;
int thermocoupleCSPin = A2;
int thermocoupleCLKPin = A1;
int lcdRsPin = 7;
int lcdEPin = 8;
int lcdD4Pin = 9;
int lcdD5Pin = 10;
int lcdD6Pin = 11;
int lcdD7Pin = 12;
int ledRedPin = 4;
int buzzerPin = 6;
int switchPin = A0;
else
int ssrPin = 5;
int thermocoupleSOPin = A5;
int thermocoupleCSPin = A4;
int thermocoupleCLKPin = A3;
int lcdRsPin = 7;
int lcdEPin = 8;
int lcdD4Pin = 9;
int lcdD5Pin = 10;
int lcdD6Pin = 11;
int lcdD7Pin = 12;
int ledRedPin = A1;
int ledGreenPin = A0;
int buzzerPin = 6;
int switch1Pin = 2;
int switch2Pin = 3;
endif
// ***** PID CONTROL VARIABLES *****
double setpoint;
double input;
double output;
double kp = PID_KP_PREHEAT;
double ki = PID_KI_PREHEAT;
double kd = PID_KD_PREHEAT;
int windowSize;
unsigned long windowStartTime;
unsigned long nextCheck;
unsigned long nextRead;
unsigned long timerSoak;
unsigned long buzzerPeriod;
// Reflow oven controller state machine state variable
reflowState_t reflowState;
// Reflow oven controller status
reflowStatus_t reflowStatus;
// Switch debounce state machine state variable
debounceState_t debounceState;
// Switch debounce timer
long lastDebounceTime;
// Switch press status
switch_t switchStatus;
// Seconds timer
int timerSeconds;
// Specify PID control interface
PID reflowOvenPID(&input, &output, &setpoint, kp, ki, kd, DIRECT);
// Specify LCD interface
LiquidCrystal lcd(lcdRsPin, lcdEPin, lcdD4Pin, lcdD5Pin, lcdD6Pin, lcdD7Pin);
// Specify MAX6675 thermocouple interface
ifdef USE_MAX31855
MAX31855 thermocouple(thermocoupleSOPin, thermocoupleCSPin,
thermocoupleCLKPin);
else
MAX6675 thermocouple(thermocoupleCLKPin, thermocoupleCSPin,
thermocoupleSOPin);
endif
void setup()
{
// SSR pin initialization to ensure reflow oven is off
digitalWrite(ssrPin, LOW);
pinMode(ssrPin, OUTPUT);
// Buzzer pin initialization to ensure annoying buzzer is off
digitalWrite(buzzerPin, LOW);
pinMode(buzzerPin, OUTPUT);
// LED pins initialization and turn on upon start-up (active low)
digitalWrite(ledRedPin, LOW);
pinMode(ledRedPin, OUTPUT);
#ifdef USE_MAX6675
// LED pins initialization and turn on upon start-up (active low)
digitalWrite(ledGreenPin, LOW);
pinMode(ledGreenPin, OUTPUT);
// Switch pins initialization
pinMode(switch1Pin, INPUT);
pinMode(switch2Pin, INPUT);
#endif
// Start-up splash
digitalWrite(buzzerPin, HIGH);
lcd.begin(8, 2);
lcd.createChar(0, degree);
lcd.clear();
lcd.print("Reflow");
lcd.setCursor(0, 1);
lcd.print("Oven 1.2");
digitalWrite(buzzerPin, LOW);
delay(2500);
lcd.clear();
// Serial communication at 57600 bps
Serial.begin(57600);
// Turn off LED (active low)
digitalWrite(ledRedPin, HIGH);
#ifdef USE_MAX6675
digitalWrite(ledGreenPin, HIGH);
#endif
// Set window size
windowSize = 2000;
// Initialize time keeping variable
nextCheck = millis();
// Initialize thermocouple reading variable
nextRead = millis();
}
void loop()
{
// Current time
unsigned long now;
// Time to read thermocouple?
if (millis() > nextRead)
{
// Read thermocouple next sampling period
nextRead += SENSOR_SAMPLING_TIME;
// Read current temperature
#ifdef USE_MAX31855
input = thermocouple.readThermocouple(CELSIUS);
#else
input = thermocouple.readCelsius();
#endif
}
if (millis() > nextCheck)
{
// Check input in the next seconds
nextCheck += 1000;
// If reflow process is on going
if (reflowStatus == REFLOW_STATUS_ON)
{
// Toggle red LED as system heart beat
digitalWrite(ledRedPin, !(digitalRead(ledRedPin)));
// Increase seconds timer for reflow curve analysis
timerSeconds++;
// Send temperature and time stamp to serial
Serial.print(timerSeconds);
Serial.print(" ");
Serial.print(setpoint);
Serial.print(" ");
Serial.print(input);
Serial.print(" ");
Serial.println(output);
}
else
{
// Turn off red LED
digitalWrite(ledRedPin, HIGH);
}
}
// Reflow oven controller state machine
switch (reflowState)
{
case REFLOW_STATE_IDLE:
// If oven temperature is still above room temperature
if (input >= TEMPERATURE_ROOM)
{
reflowState = REFLOW_STATE_TOO_HOT;
}
else
{
// If switch is pressed to start reflow process
if (switchStatus == SWITCH_1)
{
// Send header for CSV file
Serial.println("Time Setpoint Input Output");
// Intialize seconds timer for serial debug information
timerSeconds = 0;
// Initialize PID control window starting time
windowStartTime = millis();
// Ramp up to minimum soaking temperature
setpoint = TEMPERATURE_SOAK_MIN;
// Tell the PID to range between 0 and the full window size
reflowOvenPID.SetOutputLimits(0, windowSize);
reflowOvenPID.SetSampleTime(PID_SAMPLE_TIME);
// Turn the PID on
reflowOvenPID.SetMode(AUTOMATIC);
// Proceed to preheat stage
reflowState = REFLOW_STATE_PREHEAT;
}
}
break;
case REFLOW_STATE_PREHEAT:
reflowStatus = REFLOW_STATUS_ON;
// If minimum soak temperature is achieve
if (input >= TEMPERATURE_SOAK_MIN)
{
// Chop soaking period into smaller sub-period
timerSoak = millis() + SOAK_MICRO_PERIOD;
// Set less agressive PID parameters for soaking ramp
reflowOvenPID.SetTunings(PID_KP_SOAK, PID_KI_SOAK, PID_KD_SOAK);
// Ramp up to first section of soaking temperature
setpoint = TEMPERATURE_SOAK_MIN + SOAK_TEMPERATURE_STEP;
// Proceed to soaking state
reflowState = REFLOW_STATE_SOAK;
}
break;
case REFLOW_STATE_SOAK:
// If micro soak temperature is achieved
if (millis() > timerSoak)
{
timerSoak = millis() + SOAK_MICRO_PERIOD;
// Increment micro setpoint
setpoint += SOAK_TEMPERATURE_STEP;
if (setpoint > TEMPERATURE_SOAK_MAX)
{
// Set agressive PID parameters for reflow ramp
reflowOvenPID.SetTunings(PID_KP_REFLOW, PID_KI_REFLOW, PID_KD_REFLOW);
// Ramp up to first section of soaking temperature
setpoint = TEMPERATURE_REFLOW_MAX;
// Proceed to reflowing state
reflowState = REFLOW_STATE_REFLOW;
}
}
break;
case REFLOW_STATE_REFLOW:
// We need to avoid hovering at peak temperature for too long
// Crude method that works like a charm and safe for the components
if (input >= (TEMPERATURE_REFLOW_MAX - 5))
{
// Set PID parameters for cooling ramp
reflowOvenPID.SetTunings(PID_KP_REFLOW, PID_KI_REFLOW, PID_KD_REFLOW);
// Ramp down to minimum cooling temperature
setpoint = TEMPERATURE_COOL_MIN;
// Proceed to cooling state
reflowState = REFLOW_STATE_COOL;
}
break;
case REFLOW_STATE_COOL:
// If minimum cool temperature is achieve
if (input <= TEMPERATURE_COOL_MIN)
{
// Retrieve current time for buzzer usage
buzzerPeriod = millis() + 1000;
// Turn on buzzer and green LED to indicate completion
#ifdef USE_MAX6675
digitalWrite(ledGreenPin, LOW);
#endif
digitalWrite(buzzerPin, HIGH);
// Turn off reflow process
reflowStatus = REFLOW_STATUS_OFF;
// Proceed to reflow Completion state
reflowState = REFLOW_STATE_COMPLETE;
}
break;
case REFLOW_STATE_COMPLETE:
if (millis() > buzzerPeriod)
{
// Turn off buzzer and green LED
digitalWrite(buzzerPin, LOW);
#ifdef USE_MAX6675
digitalWrite(ledGreenPin, HIGH);
#endif
// Reflow process ended
reflowState = REFLOW_STATE_IDLE;
}
break;
case REFLOW_STATE_TOO_HOT:
// If oven temperature drops below room temperature
if (input < TEMPERATURE_ROOM)
{
// Ready to reflow
reflowState = REFLOW_STATE_IDLE;
}
break;
case REFLOW_STATE_ERROR:
// If thermocouple problem is still present
#ifdef USE_MAX6675
if (isnan(input))
#else
if((input == FAULT_OPEN) || (input == FAULT_SHORT_GND) ||
(input == FAULT_SHORT_VCC))
#endif
{
// Wait until thermocouple wire is connected
reflowState = REFLOW_STATE_ERROR;
}
else
{
// Clear to perform reflow process
reflowState = REFLOW_STATE_IDLE;
}
break;
}
// If switch 1 is pressed
if (switchStatus == SWITCH_1)
{
// If currently reflow process is on going
if (reflowStatus == REFLOW_STATUS_ON)
{
// Button press is for cancelling
// Turn off reflow process
reflowStatus = REFLOW_STATUS_OFF;
// Reinitialize state machine
reflowState = REFLOW_STATE_IDLE;
}
}
// Simple switch debounce state machine (for switch #1 (both analog & digital
// switch supported))
switch (debounceState)
{
case DEBOUNCE_STATE_IDLE:
// No valid switch press
switchStatus = SWITCH_NONE;
// If switch #1 is pressed
#ifdef USE_MAX6675
if (digitalRead(switch1Pin) == LOW)
#else
if (analogRead(switchPin) == 0)
#endif
{
// Intialize debounce counter
lastDebounceTime = millis();
// Proceed to check validity of button press
debounceState = DEBOUNCE_STATE_CHECK;
}
break;
case DEBOUNCE_STATE_CHECK:
#ifdef USE_MAX6675
// If switch #1 is still pressed
if (digitalRead(switch1Pin) == LOW)
#else
if (analogRead(switchPin) == 0)
#endif
{
// If minimum debounce period is completed
if ((millis() - lastDebounceTime) > DEBOUNCE_PERIOD_MIN)
{
// Proceed to wait for button release
debounceState = DEBOUNCE_STATE_RELEASE;
}
}
// False trigger
else
{
// Reinitialize button debounce state machine
debounceState = DEBOUNCE_STATE_IDLE;
}
break;
case DEBOUNCE_STATE_RELEASE:
#ifdef USE_MAX6675
if (digitalRead(switch1Pin) == HIGH)
#else
if (analogRead(switchPin) > 0)
#endif
{
// Valid switch 1 press
switchStatus = SWITCH_1;
// Reinitialize button debounce state machine
debounceState = DEBOUNCE_STATE_IDLE;
}
break;
}
// PID computation and SSR control
if (reflowStatus == REFLOW_STATUS_ON)
{
now = millis();
}
// Reflow oven process is off, ensure oven is off
else
{
digitalWrite(ssrPin, LOW);
}
}
please and thank you
verry much
htsauce
The text was updated successfully, but these errors were encountered: