Arduino + C#

Sezione specifica dedicata alla progettazione di sistemi di controllo sia hardware che software con il sistema Arduino

Re: Arduino + C#

Messaggioda kobra59 » 04/10/2014, 10:04

salve diss..
Normalmente i picchi più alti li hanno i motori elettrici che arrivano per pochi "istanti" (circa 0,5/0,6 sec.) fino anche a 7 volte il valore nominale.
a "spanne e manazze" a 230 Vac 3KW sono 16 A percui sono 5,33 A per kW... dunque una resistenza da 1 kW alimentata direttamente o in PWM quando è al massimo assorbirà 5,33 A circa (circa perchè le resistenze non sono mai perfette).
percui basta che stai sotto il valore massimo del contatore e non avrai tanti problemi.
la circuiteria deve essere più 'robusta' della potenza in gioco.
il riscaldamento con PWM e controllo del PID avrai all'inizio l'assorbimento massimo ma mentre la temperatura sale l'assorbimento decresce.

salute birra8 k59
Avatar utente
kobra59
Birraio
Birraio
 
Messaggi: 227
Iscritto il: 07/04/2012, 0:18
Località: Moscufo (Pescara)
Comune: Moscufo - PE
Stile preferito: Kit Luppolato
Tecnica: Kit luppolato
Provincia: Pescara (Abruzzo)

Re: Arduino + C#

Messaggioda diss » 07/10/2014, 13:04

Io attualmente uso una Resistenza Camco 4500W 240V. Qui la rete elettrica viaggia a 220V, in teoria dovrei essere ca a 18 A.
Metodo: All-Grain
Impianto: HERMS - pentole da 50L
Avatar utente
diss
Novizio
Novizio
 
Messaggi: 40
Iscritto il: 23/10/2012, 9:07
Località: Canton Ticino
Comune: Svizzera
Stile preferito: Stout
Tecnica: All Grain
Provincia: Varese (Lombardia)

Re: Arduino + C#

Messaggioda diss » 07/10/2014, 13:06

...continuo con la descrizione della mia applicazione.

Vi allego il codice Arduino, (abbastanza comprensibile spero):
Codice: Seleziona tutto
#include "OneWire.h";
#include "DallasTemperature.h";
#include "LiquidCrystal.h";
#include "Wire.h";
#include "RTClib.h";

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
RTC_DS1307 RTC;

//PIN sensori
#define ONE_WIRE_BUS_MLT 8
#define ONE_WIRE_BUS_HLT 8
#define ONE_WIRE_BUS_CHL 8

#define TEMPERATURE_PRECISION 12

//LED controllo
#define LED_R 10
//#define LED_Y
#define LED_G 9

//PIN RELAY
#define RESISTENZA_HLT 9
#define MOTORE_PALE 9
#define POMPA_HLT 9
#define POMPA_MLT 9

#define STX "\x02"                      //ASCII-Code 02, text representation of the STX code
#define ETX "\x03"                      //ASCII-Code 03, text representation of the ETX code

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWireMLT(ONE_WIRE_BUS_MLT);
OneWire oneWireHLT(ONE_WIRE_BUS_HLT);
OneWire oneWireCHL(ONE_WIRE_BUS_CHL);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensorsMLT(&oneWireMLT);
DallasTemperature sensorsHLT(&oneWireHLT);
DallasTemperature sensorsCHL(&oneWireCHL);

// arrays to hold device addresses
DeviceAddress MLT, MLT_I, MLT_O;
DeviceAddress HLT, HLT_I, HLT_O;
DeviceAddress CHL_I, CHL_O;

//Dichiarazione di funzione che punta all'indirizzo zero
void(* Riavvia)(void) = 0;

String readString;

void setup(void) {
  lcd.begin(16, 4);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Dallas Temperature");
  lcd.setCursor(0, 1);
  lcd.print("BrewApp v0.1");


  pinMode(LED_R, OUTPUT);
  pinMode(LED_G, OUTPUT);
 
  pinMode(RESISTENZA_HLT, OUTPUT);
  pinMode(MOTORE_PALE, OUTPUT);
  pinMode(POMPA_HLT, OUTPUT);
  pinMode(POMPA_MLT, OUTPUT);
 
  Wire.begin();
  RTC.begin();

  if (!RTC.isrunning()) {
    lcd.setCursor(0, 2);
    lcd.print("RTC is NOT running!");
    //following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  lcd.setCursor(0, 3);
  lcd.print("Setting RTC");
  delay(1000);
  lcd.print(".");
  delay(1000);
  lcd.print(".");
  delay(1000);
  lcd.print(".");
  delay(1000);
  lcd.print("OK");
  delay(2000);
  lcd.clear();

  // start serial port
  Serial.begin(9600);

  // Start up the library
  sensorsMLT.begin();
  sensorsHLT.begin();
  sensorsCHL.begin();

  // locate devices on the bus
  //SERIAL
  Serial.println("Locating devices...");
  Serial.print("Found MLT ");
  Serial.print(sensorsMLT.getDeviceCount(), DEC);
  Serial.println(" devices.");
  Serial.print("Found HLT ");
  Serial.print(sensorsHLT.getDeviceCount(), DEC);
  Serial.println(" devices.");
  Serial.print("Found CHL ");
  Serial.print(sensorsCHL.getDeviceCount(), DEC);
  Serial.println(" devices.");

  //LCD 
  lcd.setCursor(0,0);
  lcd.print("Locating devices...");
  lcd.setCursor(0,1);
  lcd.print("Found MLT ");
  lcd.print(sensorsMLT.getDeviceCount());
  lcd.print(" devices.");
  lcd.setCursor(0,2);
  lcd.print("Found HLT ");
  lcd.print(sensorsHLT.getDeviceCount());
  lcd.print(" devices.");
  lcd.setCursor(0,3);
  lcd.print("Found CHL ");
  lcd.print(sensorsCHL.getDeviceCount());
  lcd.print(" devices.");
 
  // Must be called before search()
  oneWireMLT.reset_search();
  oneWireHLT.reset_search();
  oneWireCHL.reset_search();

  // assigns the first address found to insideThermometer
  if (!oneWireMLT.search(MLT)) Serial.println("Unable to find address for MLT");
  if (!oneWireMLT.search(MLT_I)) Serial.println("Unable to find address for MLT_I");
  if (!oneWireMLT.search(MLT_O)) Serial.println("Unable to find address for MLT_O");

  if (!oneWireHLT.search(HLT)) Serial.println("Unable to find address for HLT");
  if (!oneWireHLT.search(HLT_I)) Serial.println("Unable to find address for HLT_I");
  if (!oneWireHLT.search(HLT_O)) Serial.println("Unable to find address for HLT_O");

  if (!oneWireCHL.search(CHL_I)) Serial.println("Unable to find address for CHL_I");
  if (!oneWireCHL.search(CHL_O)) Serial.println("Unable to find address for CHL_O");

  // set the resolution to TEMPERATURE_PRECISION bit
  sensorsMLT.setResolution(MLT, TEMPERATURE_PRECISION);
  sensorsMLT.setResolution(MLT_I, TEMPERATURE_PRECISION);
  sensorsMLT.setResolution(MLT_O, TEMPERATURE_PRECISION);

  sensorsHLT.setResolution(HLT, TEMPERATURE_PRECISION);
  sensorsHLT.setResolution(HLT_I, TEMPERATURE_PRECISION);
  sensorsHLT.setResolution(HLT_O, TEMPERATURE_PRECISION);

  sensorsCHL.setResolution(CHL_I, TEMPERATURE_PRECISION);
  sensorsCHL.setResolution(CHL_O, TEMPERATURE_PRECISION);
}
void getSensors() {
  Serial.print(STX);
  Serial.print("S* MLT:MLT;MLT_I;MLT_O|HLT:HLT;HLT_I;HLT_O|CHL:CHL_I;CHL_O");
  Serial.print(ETX);
}

void getData() {
  Serial.print(STX);
  Serial.print("T* MLT:");
  sensorsMLT.getTempC(MLT);
  Serial.print(";MLT_I:");
  sensorsMLT.getTempC(MLT_I);
  Serial.print(";MLT_O:");
  sensorsMLT.getTempC(MLT_O);
  Serial.print("|HLT:");
  sensorsHLT.getTempC(HLT);
  Serial.print(";HLT_I:");
  sensorsHLT.getTempC(HLT_I);
  Serial.print(";HLT_O:");
  sensorsHLT.getTempC(HLT_O);
  Serial.print("|CHL_I:");
  sensorsCHL.getTempC(CHL_I);
  Serial.print(";CHL_O:");
  sensorsCHL.getTempC(CHL_O);
  Serial.print(ETX);
}

void loop(void) {
  DateTime now = RTC.now();

  sensorsMLT.requestTemperatures();
  sensorsHLT.requestTemperatures();
  sensorsCHL.requestTemperatures();

  lcd.setCursor(0, 0);
  if (now.hour() < 10) {
    lcd.print("0");
  }
  lcd.print(now.hour(), DEC);
  lcd.print(":");
  if (now.minute() < 10) {
    lcd.print("0");
  }
  lcd.print(now.minute(), DEC);

  lcd.setCursor(12, 0);
  lcd.print("IN");
  lcd.setCursor(17, 0);
  lcd.print("OUT");

  //MLT
  lcd.setCursor(0, 1);
  lcd.print("MLT");
  lcd.setCursor(6, 1);
  lcd.print(sensorsMLT.getTempC(MLT));
  lcd.setCursor(11, 1);
  lcd.print(sensorsMLT.getTempC(MLT_I));
  lcd.setCursor(16, 1);
  lcd.print(sensorsMLT.getTempC(MLT_O));

  //HLT
  lcd.setCursor(0, 2);
  lcd.print("HLT");
  lcd.setCursor(6, 2);
  lcd.print(sensorsHLT.getTempC(HLT));
  lcd.setCursor(11, 2);
  lcd.print(sensorsHLT.getTempC(HLT_I));
  lcd.setCursor(16, 2);
  lcd.print(sensorsHLT.getTempC(HLT_O));

  //SERPENTINA
  lcd.setCursor(0, 3);
  lcd.print("CHL");
  lcd.setCursor(11, 3);
  lcd.print(sensorsCHL.getTempC(CHL_I));
  lcd.setCursor(16, 3);
  lcd.print(sensorsCHL.getTempC(CHL_O));

  while (Serial.available()) {
    delay(1);
    char c = Serial.read();
    readString += c;
  }

  if (readString.length() > 0) {
    if (readString.indexOf("R") >= 0) {
      Riavvia();
    }

    if (readString.indexOf("resistenza_ON") >= 0) {
      digitalWrite(RESISTENZA_HLT, HIGH);
    }
    if (readString.indexOf("resistenza_OFF") >= 0) {
      digitalWrite(RESISTENZA_HLT, LOW);
    }

    if (readString.indexOf("sensori") >= 0) {
      getSensors();
    }
    if (readString.indexOf("temperature") >= 0) {
      getData();
    }
    readString = "";
  }
}


Se c'è qualcuno che vuole dare un'occhiata o semplificarlo o altro faccia pure :)
Metodo: All-Grain
Impianto: HERMS - pentole da 50L
Avatar utente
diss
Novizio
Novizio
 
Messaggi: 40
Iscritto il: 23/10/2012, 9:07
Località: Canton Ticino
Comune: Svizzera
Stile preferito: Stout
Tecnica: All Grain
Provincia: Varese (Lombardia)

Precedente

Torna a Arduino

Chi c’è in linea

Visitano il forum: tonino e 1 ospite

cron