|
Gestire la temperatura di 4 MK2B su MendelMax 400x400 January 08, 2015 02:33PM |
Registered: 11 years ago Posts: 14 |
#include
#include
#define RELAY1 6
#define RELAY2 7
#define RELAY3 8
#define RELAY4 9
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
int backLight = 13;
const float baselineTemp = 100.0; // set temperatura da mantenere
void setup() {
pinMode(backLight, OUTPUT);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
digitalWrite(backLight, HIGH);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0,0);
}
double NTC1(int RawADC) {
double T1;
T1 = log(((10240000/RawADC) - 10000));
T1 = 1 / (0.001129148 + (0.000234125 * T1) + (0.0000000876741 * T1 * T1 * T1));
T1 = T1 - 273.15;
return T1;
}
double NTC2(int RawADC) {
double T2;
T2 = log(((10240000/RawADC) - 10000));
T2 = 1 / (0.001129148 + (0.000234125 * T2) + (0.0000000876741 * T2 * T2 * T2));
T2 = T2 - 273.15;
return T2;
}
double NTC3(int RawADC) {
double T3;
T3 = log(((10240000/RawADC) - 10000));
T3 = 1 / (0.001129148 + (0.000234125 * T3) + (0.0000000876741 * T3 * T3 * T3));
T3 = T3 - 273.15;
return T3;
}
double NTC4(int RawADC) {
double T4;
T4 = log(((10240000/RawADC) - 10000));
T4 = 1 / (0.001129148 + (0.000234125 * T4) + (0.0000000876741 * T4 * T4 * T4));
T4 = T4 - 273.15;
return T4;
}
void loop() {
double t1 = NTC1(analogRead(0));
double t2 = NTC2(analogRead(1));
double t3 = NTC3(analogRead(2));
double t4 = NTC4(analogRead(3));
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T1:");
lcd.print(t1);
lcd.setCursor(7,0);
lcd.print(" T2:");
lcd.print(t2);
lcd.setCursor(15,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("T3:");
lcd.print(t3);
lcd.setCursor(7,1);
lcd.print(" T4:");
lcd.print(t4);
lcd.setCursor(15,1);
lcd.print(" ");
if(t1 > baselineTemp){
digitalWrite(RELAY1,HIGH);
}
if(t1 < baselineTemp){
digitalWrite(RELAY1,LOW);
}
if(t2 > baselineTemp){
digitalWrite(RELAY2,HIGH);
}
if(t2 < baselineTemp){
digitalWrite(RELAY2,LOW);
}
if(t3 > baselineTemp){
digitalWrite(RELAY3,HIGH);
}
if(t3 < baselineTemp){
digitalWrite(RELAY3,LOW);
}
if(t4 > baselineTemp){
digitalWrite(RELAY4,HIGH);
}
if(t4 < baselineTemp){
digitalWrite(RELAY4,LOW);
}
delay(5000);
}
|
Re: Gestire la temperatura di 4 MK2B su MendelMax 400x400 January 16, 2015 03:34AM |
Registered: 11 years ago Posts: 14 |
|
Re: Gestire la temperatura di 4 MK2B su MendelMax 400x400 January 18, 2015 02:08PM |
Registered: 11 years ago Posts: 484 |
|
Re: Gestire la temperatura di 4 MK2B su MendelMax 400x400 January 18, 2015 02:36PM |
Registered: 12 years ago Posts: 6,409 |
|
Re: Gestire la temperatura di 4 MK2B su MendelMax 400x400 January 18, 2015 03:26PM |
Registered: 11 years ago Posts: 14 |
|
Re: Gestire la temperatura di 4 MK2B su MendelMax 400x400 January 18, 2015 03:39PM |
Registered: 11 years ago Posts: 14 |
Quote
MagoKimbra
Grande... Allora facciamo un bel giochino visto che hai delle ottime capacità di programmazione. Proviamo a fare un comando Tx-Rx in modo che la scheda master Arduino mega, dica alla scheda figlia arduino uno che hai, la temperatura che deve arrivare il bed. A questo punto la figlia si smazza la gestione dei 4 bed e restituisca alla madre la temperatura media dei 4. Aggiungendo questo comandino possiamo applicare a qualsiasi scheda la tua soluzione per pilotare 2 o più bed.....
Che ne dici??
Io ti posso aiutare a livello software su marlin, o meglio Marlinkimbra...
|
Re: Gestire la temperatura di 4 MK2B su MendelMax 400x400 January 18, 2015 04:36PM |
Registered: 11 years ago Posts: 14 |
#include
#include
#define RELAY1 6
#define RELAY2 7
#define RELAY3 8
#define RELAY4 9
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
int backLight = 13; // pin 13 controllo retroilluminazione
const float baselineTemp = 25.0; //set temperatura
void setup() {
pinMode(backLight, OUTPUT);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
digitalWrite(backLight, HIGH); // accende retroilluminazione. Sostituire 'HIGH' con 'LOW' per spegnerla
lcd.begin(16, 2); // righe, colonne. utilizzare 20,4 per 20x4 LCD, etc.
lcd.clear(); // iniziare con uno schermo in bianco
lcd.setCursor(0,0); // set cursore colonna 0, riga 0
}
double NTC(int RawADC) {
double T;
T = log(((10240000/RawADC) - 10000));
T = 1 / (0.001129148 + (0.000234125 * T) + (0.0000000876741 * T * T * T));
T = T - 273.15; // Conversione Gradi Kelvin in Celcius
return T;
}
void loop() {
double t1 = NTC(analogRead(0)); // ingresso sensore 1
double t2 = NTC(analogRead(1)); // ingresso sensore 2
double t3 = NTC(analogRead(2)); // ingresso sensore 3
double t4 = NTC(analogRead(3)); // ingresso sensore 4
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T1:");
lcd.print(t1);
lcd.setCursor(7,0);
lcd.print(" T2:");
lcd.print(t2);
lcd.setCursor(15,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("T3:");
lcd.print(t3);
lcd.setCursor(7,1);
lcd.print(" T4:");
lcd.print(t4);
lcd.setCursor(15,1);
lcd.print(" ");
if(t1 > baselineTemp){
digitalWrite(RELAY1,HIGH);
}
if(t1 < baselineTemp){
digitalWrite(RELAY1,LOW);
}
if(t2 > baselineTemp){
digitalWrite(RELAY2,HIGH);
}
if(t2 < baselineTemp){
digitalWrite(RELAY2,LOW);
}
if(t3 > baselineTemp){
digitalWrite(RELAY3,HIGH);
}
if(t3 < baselineTemp){
digitalWrite(RELAY3,LOW);
}
if(t4 > baselineTemp){
digitalWrite(RELAY4,HIGH);
}
if(t4 < baselineTemp){
digitalWrite(RELAY4,LOW);
}
delay(1000);
}