Talk:Induction Furnace: Difference between revisions

From Open Source Ecology
Jump to navigation Jump to search
Line 82: Line 82:


const int PIN_RELAY_POWER = 8;    // Main Contactor
const int PIN_RELAY_POWER = 8;    // Main Contactor
const int PIN_RELAY_PUMP  = 9;    // Cooling Pump
const int PIN_RELAY_PUMP  = 9;    // Cooling Pump
const int PIN_FAN_PWM    = 10;  // Radiator Fan (PWM)
const int PIN_FAN_PWM    = 10;  // Radiator Fan (PWM)


// --- Constants ---
// --- Constants ---
const float TEMP_CRITICAL = 60.0; // Celsius
const float TEMP_CRITICAL = 60.0; // Celsius
const float TEMP_IDLE    = 30.0; // Celsius
const float TEMP_IDLE    = 30.0; // Celsius
const int  FAN_MIN_SPEED = 50;  // 0-255
const int  FAN_MIN_SPEED = 50;  // 0-255
const int  FAN_MAX_SPEED = 255;
const int  FAN_MAX_SPEED = 255;


Line 130: Line 136:
void readSensors() {
void readSensors() {
   // Simplified Temp Calculation (Steinhart-Hart would be better)
   // Simplified Temp Calculation (Steinhart-Hart would be better)
   int raw_temp = analogRead(PIN_TEMP_SENSOR);
   int raw_temp = analogRead(PIN_TEMP_SENSOR);
   // Map 0-1023 to approx 0-100C for demo
   // Map 0-1023 to approx 0-100C for demo
   coolant_temp = map(raw_temp, 0, 1023, 0, 100);  
   coolant_temp = map(raw_temp, 0, 1023, 0, 100);  
    
    
   // Safety Switch (Active LOW if NC switch is closed)
   // Safety Switch (Active LOW if NC switch is closed)
   // If switch opens (pressed), pin goes HIGH (internal pullup? No, usually NC to GND)
   // If switch opens (pressed), pin goes HIGH (internal pullup? No, usually NC to GND)
   // Let's assume NC switch to GND. Closed = LOW = OK. Open = HIGH = STOP.
   // Let's assume NC switch to GND. Closed = LOW = OK. Open = HIGH = STOP.
   safety_ok = (digitalRead(PIN_SAFETY_SW) == LOW);
   safety_ok = (digitalRead(PIN_SAFETY_SW) == LOW);
}
}
Line 149: Line 161:
void controlCooling() {
void controlCooling() {
   // Pump Logic: Always ON if Power is ON, or if Temp > IDLE (Cool down mode)
   // Pump Logic: Always ON if Power is ON, or if Temp > IDLE (Cool down mode)
   bool power_is_active = (digitalRead(PIN_RELAY_POWER) == HIGH);
   bool power_is_active = (digitalRead(PIN_RELAY_POWER) == HIGH);
    
    
Line 155: Line 168:
      
      
     // Fan Logic: Proportional Control
     // Fan Logic: Proportional Control
     int fan_speed = map(coolant_temp, TEMP_IDLE, TEMP_CRITICAL, FAN_MIN_SPEED, FAN_MAX_SPEED);
     int fan_speed = map(coolant_temp, TEMP_IDLE, TEMP_CRITICAL, FAN_MIN_SPEED, FAN_MAX_SPEED);
     fan_speed = constrain(fan_speed, 0, 255);
     fan_speed = constrain(fan_speed, 0, 255);
Line 167: Line 181:
   if (safety_ok) {
   if (safety_ok) {
     // In a real system, we might wait for a "Start" command via Serial
     // In a real system, we might wait for a "Start" command via Serial
     // For this safety controller, we just enable the contactor *allowance*.
     // For this safety controller, we just enable the contactor *allowance*.
     // The actual ZVS might be triggered separately.
     // The actual ZVS might be triggered separately.
     // Here we assume this relay cuts main DC power.
     // Here we assume this relay cuts main DC power.
     digitalWrite(PIN_RELAY_POWER, HIGH);
     digitalWrite(PIN_RELAY_POWER, HIGH);
   } else {
   } else {

Revision as of 04:06, 8 December 2025

The boys Induction Furnace

Induction Furnace Development Update

We have made significant progress on the parametric Induction Furnace model in FreeCAD. This update covers the high-LOD enhancements, a focused core generator, a real-world Bill of Materials, and step-by-step build instructions.

Model Overview

We have developed two generator scripts to cater to different needs:

Full System Model

  • Script: `generators/machines.py`
  • Command: `python3 cli.py furnace`
  • Description: A complete industrial setup including the structural frame, concrete platform, safety railings, hydraulic tilting mechanism, and full control panel.
  • High-LOD Features:
      Hydraulics: Hydraulic Power Unit (HPU) with reservoir, motor, valve block, and hoses connecting to the tilt cylinder.
      Electronics: Detailed ZVS Driver module with PCB, heatsinks, capacitor bank, and choke inductors mounted on an open-frame rack.
      Cooling: Explicit water cooling loop with pump, radiator, fan, tank, and hoses.
      Hardware: Hex bolt heads at frame joints and pivot points.
      Casting: Double-crucible system (Inner Melting Pot + Outer Chamber) with a pouring spout and steel ramp.

Focused Core Model

  • Script: `generators/induction_furnace_core.py`
  • Command: `python3 cli.py furnace-core`
  • Description: A simplified model focusing strictly on the functional components required for melting.
  • Components:
      Induction Circuit (ZVS, Bus Bars)
      Heat Dissipation System (Radiator, Pump, Tank)
      Coil (Copper Tubing)
      Melt Chamber (Outer Crucible)
      Feeder (Hopper)
      Crucible (Inner Pot)

Bill of Materials (BOM)

We have sourced real-world parts for the core components. Prices are estimates.

Component Model Specs Real-World Part Approx Price
Crucible 300mm Dia x 400mm H Graphite Crucible #50-#100 (Industrial) $150 - $300
Induction Coil 170mm Radius, 16mm Tube 5/8" Soft Copper Tubing (50ft Coil) $80 - $120
Radiator 150x150mm 120mm Computer Water Cooling Radiator $20 - $40
Pump 12V Centrifugal 12V Water Cooling Pump (PC/Industrial) $20 - $50
Hydraulics 150mm Stroke Hydraulic Cylinder 150mm Stroke $50 - $100
Bus Bars 20x100mm Copper Copper Bus Bar 1/8" x 1" $30 - $60

Build Instructions

A detailed assembly guide has been generated.

Phase 1: Structural & Core

  • Assemble the concrete platform and safety railings.
  • Erect the main steel frame and install insulation blocks.
  • Insert the Outer Crucible (Chamber) and Inner Crucible (Pot).

Phase 2: Induction & Cooling

  • Wind the 5/8" copper tubing to form the coil and mount it over the chamber.
  • Install the Radiator, Fan, Pump, and Tank.
  • Plumb the cooling loop: Pump -> Radiator -> Coil -> Tank -> Pump.

Phase 3: Electronics & Power

  • Mount the Control Panel and Electronics Rack.
  • Install the ZVS Driver, Capacitor Bank, and Inductors.
  • Connect the ZVS output to the Coil using Copper Bus Plates.
  • Connect the Hydraulic Power Unit (HPU) to the tilt cylinder.

Resources

  • **Source Code:** `Antigravity_24_Freecad/generators/`
  • **Output Models:** `Antigravity_24_Freecad/outputs/InductionFurnace.FCStd`

Arduino Control

  • Induction Furnace Controller
* Platform: Arduino Uno / Nano
* Description: Monitors safety sensors and controls cooling/power relays.
*/

// --- Pin Definitions --- const int PIN_VOLT_SENSOR = A0; // Voltage Divider Input

const int PIN_CURR_SENSOR = A1; // ACS712 or Hall Sensor

const int PIN_TEMP_SENSOR = A2; // NTC Thermistor (Coolant)

const int PIN_SAFETY_SW = 2; // Emergency Stop (NC)


const int PIN_RELAY_POWER = 8; // Main Contactor

const int PIN_RELAY_PUMP = 9; // Cooling Pump

const int PIN_FAN_PWM = 10; // Radiator Fan (PWM)


// --- Constants --- const float TEMP_CRITICAL = 60.0; // Celsius

const float TEMP_IDLE = 30.0; // Celsius

const int FAN_MIN_SPEED = 50; // 0-255

const int FAN_MAX_SPEED = 255;

// --- Globals --- bool safety_ok = false; float coolant_temp = 0.0;

void setup() {

 Serial.begin(9600);
 
 pinMode(PIN_SAFETY_SW, INPUT_PULLUP);
 pinMode(PIN_RELAY_POWER, OUTPUT);
 pinMode(PIN_RELAY_PUMP, OUTPUT);
 pinMode(PIN_FAN_PWM, OUTPUT);
 
 // Safe State
 digitalWrite(PIN_RELAY_POWER, LOW);
 digitalWrite(PIN_RELAY_PUMP, LOW);
 analogWrite(PIN_FAN_PWM, 0);
 
 Serial.println("Furnace Controller Initialized");

}

void loop() {

 // 1. Read Sensors
 readSensors();
 
 // 2. Safety Logic
 checkSafety();
 
 // 3. Control Outputs
 controlCooling();
 controlPower();
 
 // 4. Telemetry
 sendTelemetry();
 
 delay(100);

}

void readSensors() {

 // Simplified Temp Calculation (Steinhart-Hart would be better)
 int raw_temp = analogRead(PIN_TEMP_SENSOR);
 // Map 0-1023 to approx 0-100C for demo
 coolant_temp = map(raw_temp, 0, 1023, 0, 100); 
 
 // Safety Switch (Active LOW if NC switch is closed)
 // If switch opens (pressed), pin goes HIGH (internal pullup? No, usually NC to GND)
 // Let's assume NC switch to GND. Closed = LOW = OK. Open = HIGH = STOP.
 safety_ok = (digitalRead(PIN_SAFETY_SW) == LOW);

}

void checkSafety() {

 if (coolant_temp > TEMP_CRITICAL) {
   safety_ok = false;
   Serial.println("ERROR: Overheat!");
 }

}

void controlCooling() {

 // Pump Logic: Always ON if Power is ON, or if Temp > IDLE (Cool down mode)
 bool power_is_active = (digitalRead(PIN_RELAY_POWER) == HIGH);
 
 if (power_is_active || coolant_temp > TEMP_IDLE) {
   digitalWrite(PIN_RELAY_PUMP, HIGH);
   
   // Fan Logic: Proportional Control
   int fan_speed = map(coolant_temp, TEMP_IDLE, TEMP_CRITICAL, FAN_MIN_SPEED, FAN_MAX_SPEED);
   fan_speed = constrain(fan_speed, 0, 255);
   analogWrite(PIN_FAN_PWM, fan_speed);
 } else {
   digitalWrite(PIN_RELAY_PUMP, LOW);
   analogWrite(PIN_FAN_PWM, 0);
 }

}

void controlPower() {

 if (safety_ok) {
   // In a real system, we might wait for a "Start" command via Serial
   // For this safety controller, we just enable the contactor *allowance*.
   // The actual ZVS might be triggered separately.
   // Here we assume this relay cuts main DC power.
   digitalWrite(PIN_RELAY_POWER, HIGH);
 } else {
   digitalWrite(PIN_RELAY_POWER, LOW);
 }

}

void sendTelemetry() {

 Serial.print("TEMP:"); Serial.print(coolant_temp);
 Serial.print(",SAFETY:"); Serial.print(safety_ok);
 Serial.println();

}