-L’uscita 3 non è PWM
-Un SSR non è pilotabile mediante PWM
In quanto al resto Non conosco la libreria in oggetto, …mi sembra comunque corretto
a me l’uscita del pin 3 risulta un segnale PWM
0 e 1 sono tx e rx
dal 2 al 13 sono pwm.
scusa l’ssr che non è altro che un triak optoisolato, comandabile direttamente dall’arduino, in quanto basta 1v e qualche mA per eccitarlo. io on d’evitare problemi metto un transistor NPN bc547b ( esempio ) per comandarlo, oltre a quello l’ssr ha il circuito “zero cross detect”, quindi non va in conduzione finchè non rileva il passaggio per zero della sinusoide. Anche lo sgancio non avviene prima del passaggio per zero.
quindi dovrei riuscirlo a pilore in PWM, se non è cosi come dovrei fare?
blacktek:
per usare il PID controllando cose on/off e non proporzionali devi usare un controllo basato su Time Window; vedi qui http://playground.arduino.cc/Code/PIDLibraryRelayOutputExample
io ho fatto il porting della libreria su php e la sto usando su raspberry
guardando quel codice dovrebbe diventare cosi il mio, sbaglio?
/********************************************************
*Reading analog input 6 to control analog PWM output 3 *
********************************************************/
#include <PID_v1.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h> //ancora da implementare
#include <SD.h> //ancora da implementare
#include <Wire.h> //ancora da implementare
double Setpoint, Input, Output;
double Kp=2;
double Ki=5;
double Kd=1;
#define ONE_WIRE_BUS 2
#define RelayPin 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int preheat = 150; //( in futuro lettura da sd )
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
/*
Per questo tuning è importante sapere quanto segue:
– Il parametro P è il parametro dominante. Sarà quello sul quale sarà necessario agire prima di tutto;
– Il parametro I determina quanta forza deve essere applicata se l’inclinazione, rispetto al volo “livellato”, persiste;
– Il parametro D viene usato per bloccare la correzione massima riguardante questa modalità
*/
int WindowSize = 5000;
unsigned long windowStartTime;
void setup()
{
Serial.begin(9600);
//sensor soak
sensors.begin(); // libreria del sensore
//for test
Setpoint = preheat;
//tell the PID to range between 0 and the full window size
myPID.SetOutputLimits(0, WindowSize);
//turn the PID on
myPID.SetMode(AUTOMATIC);
}
void loop()
{
// Send the command to get temperatures
sensors.requestTemperatures();
Input = digitalRead(sensors.getTempCByIndex(0));
myPID.Compute();
/************************************************
* turn the output pin on/off based on pid output
************************************************/
unsigned long now = millis();
if(now - windowStartTime>WindowSize){
//time to shift the Relay Window
windowStartTime += WindowSize;
}if(Output > now - windowStartTime) digitalWrite(RelayPin,HIGH);
else digitalWrite(RelayPin,LOW);
}
che se non ho capito male se diminuisco la variabile WindowSize = 5000 a 500ms l’apertura e la chiusura del relè dovrebbe essere piu frequente quindi (0.5s), giusto?
fate conto che vorrei fare una cosa del genere
il mio unico problema è capire come comandare l’SSR con la libreria in oggetto per creare una curva ideale di saldatura