Sommario:
- Passo 1:
- Passaggio 2: test di uscita dello strumento
- Passaggio 3: calibrazione
- Passaggio 4: programmazione di Arduino
- Passaggio 5: alcune altre foto
- Passaggio 6: montaggio
- Passaggio 7: solo foto
- Passaggio 8: parole finali
Video: Generatore/tester da 4-20 mA con Arduino: 8 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 09:59
I generatori da 4-20 mA sono disponibili su ebay, ma io per primo amo la parte fai-da-te delle cose e l'utilizzo di parti che ho in giro.
Volevo testare gli ingressi analogici del nostro PLC per verificare le nostre letture scada e per testare l'uscita di strumenti 4-20mA. Ci sono un sacco di convertitori da corrente a tensione e convertitori da tensione a corrente per arduino su ebay, ma necessitano di calibrazione. Posso usarlo per calibrare uno di quei convertitori trovati su ebay e simili.
Ho deciso che farò il fai-da-te con un generatore e un tester. In questo momento è ancora un work in progress e un prototipo.
Avevo un vecchio sistema audio 2.1 che non veniva utilizzato (piccoli altoparlanti). Quindi ho usato una delle casse dell'altoparlante come custodia. Ho anche avuto un amplificatore che è morto a causa di un fulmine, ho rimosso il terminale dell'altoparlante da quell'amplificatore per rendere il collegamento un gioco da ragazzi. Ho intenzione di realizzare un PCB in futuro e un involucro migliore.
Forniture:
Elenco delle parti.
LCD // 20x4 (adatta il codice se il tuo è più piccolo)
LM7808 // Regolatore 8volt
LED // Qualsiasi tipo o dimensione
Resistore per LED // Adatto per il tipo LED e 8volt
Resistenza da 100 ohm + resistenza da 47 ohm in serie // Verrà utilizzata come resistenza di shunt
Resistore da 10K // Analogico Arduino in protezione contro l'alta tensione
Resistenza 22K // Per fermare A0 dal flottante
Trimpot 100 ohm + resistore 47 ohm in serie // simulatore PT100
Condensatore da 35 volt // Ho usato 470uF, solo per mantenere basse le fluttuazioni della tensione di alimentazione
RTD (trasduttore PT100) // L'intervallo non è importante (intervallo)
DIODO (per protezione polarità)
INA219
Arduino
Passo 1:
Seguendo lo schema dovresti iniziare a capire dove aggiungere le parti e collegarle.
L'LM7808 consente un ingresso massimo di 25 volt, il che va bene per i sistemi PLC, generalmente utilizzano alimentatori a 24 volt. Aggiungere un dissipatore di calore al regolatore e non utilizzarlo per lunghi periodi. La caduta di 16 volt fa sì che il regolatore generi molto calore.
L'alimentazione in ingresso alimenta il regolatore e si collega al VIN dell'INA219, in questa configurazione l'INA219 sarà anche in grado di misurare la corretta tensione di alimentazione meno la caduta di tensione dal diodo. Dovresti misurare la caduta di tensione del diodo e aggiungerla al codice in modo da ottenere la corretta lettura della tensione di alimentazione.
Dall'INA219 VOUT all'RTD+ accende l'RTD. RTD- a terra completa il circuito.
Per testare una scheda analogica PLC, collegherai RTD- all'ingresso sulla scheda analogica e la massa dalla scheda alla massa arduino. (Assicurarsi di scollegare qualsiasi strumento collegato al canale in prova).
R5 e LED1, che indicano che il sistema è acceso.
Il regolatore alimenta il VIN di arduino (arduino ha un regolatore integrato a 5 volt).
Il pin Arduino 5V va a INA219 per alimentare il chip di bordo. INA219 GND a massa arduino.
Trim pot wiper su RTD PIN1 e Trim pot pin 3 su RTD pin 2 simuleranno una connessione PT100. (Scambiare i fili se ruotando il trim pot in senso orario non si aumenta il mA).
Passaggio 2: test di uscita dello strumento
Per testare l'uscita dello strumento sono necessarie parti aggiuntive, come un resistore di shunt. I normali resistori da 0,25 W faranno bene il lavoro. È possibile lasciare il resistore di shunt e aggiungere un secondo INA219 per testare l'uscita dello strumento. Ne avevo solo uno, quindi ho usato un resistore.
Il test utilizzando uno shunt può essere eseguito solo sul lato negativo del dispositivo. Se usi il lato positivo, fornirai al tuo arduino più di 4 volte la tensione consentita e farai uscire il fumo.
Aggiungere la resistenza di shunt in serie con il filo negativo dello strumento. Il lato dello shunt più vicino al dispositivo diventerà l'analogo positivo per arduino. L'altro lato dello shunt più vicino all'alimentatore diventerà la massa arduino che completa il circuito di ingresso analogico.
Il resistore di shunt da 150 ohm è il massimo assoluto che dovrebbe essere utilizzato quando si utilizza un arduino. Il resistore ha una caduta di tensione lineare rispetto ai mA che lo attraversano. Maggiore è il mA maggiore è la tensione.
A 20 mA di corrente # 150 ohm * 0,02 A = 3 volt su arduino.
Con una corrente di 4 mA # 150 ohm * 0,004 A = 0,6 volt su arduino.
Ora potresti volere che la tensione sia più vicina a 5 volt in modo da poter utilizzare l'intera gamma ADC dell'arduino. (Non è una buona idea).
Gli RTD possono raggiungere un'uscita di 30,2 mA (il mio lo fa). 150 ohm * 0,03 A = 4,8 volt. Questo è il più vicino che vorrei essere.
Un altro sito web ha indicato di utilizzare un resistore da 250 ohm.
A 20 mA di corrente # 250 ohm * 0,02 A = 5 volt su arduino.
A 30 mA di corrente # 250 ohm * 0,03 A = 7,5 volt su arduino.
Rischi di bruciare il tuo ADC e arduino.
Per testare uno strumento sul campo, porta con te una batteria da 12 volt e collegala all'ingresso di alimentazione. L'utilizzo di una fonte di alimentazione esterna non influenzerà l'impostazione corrente del PLC.
Per testare una scheda di ingresso analogica sul campo, porta con te una batteria da 12 volt. Scollegare lo strumento + dal circuito. Collegare la massa alla massa dello strumento e l'RTD- al cavo dello strumento scollegato.
Passaggio 3: calibrazione
Per calibrare la lettura del resistore di shunt, collegare l'RTD- all'ingresso analogico dello shunt. Impostare il potenziometro del trim in modo che il mA generato sia 4mA. Se il mA del tuo dispositivo non è uguale, modifica il primo valore nel codice alla riga 84. Aumentando questo valore si abbasserà la lettura in mA.
Quindi imposta il tuo trim pot per generare 20 mA. Se il mA del tuo dispositivo non è uguale, modifica il secondo valore nel codice alla riga 84.
Quindi il tuo 4-20 mA diventerà ora 0,6-3 volt (teorico). Gamma più che sufficiente. Usando la libreria di eRCaGuy, il sovracampionamento ti darà una lettura migliore e stabile.
Spero che tu legga questo. Questo è il mio primo istruibile, quindi per favore rilassati se ho commesso un errore da qualche parte o ho tralasciato qualcosa.
Questo progetto probabilmente non è il modo migliore per realizzarlo, ma funziona per me ed è stato divertente realizzarlo.
Alcune idee che ho in più…
Aggiungi un servo per ruotare il trim pot all'interno della scatola.
Aggiungere pulsanti per ruotare il servo a sinistra oa destra.
Aggiungi un sensore di temperatura digitale al dissipatore di calore del regolatore per avvertire del calore pericoloso.
Passaggio 4: programmazione di Arduino
#includere
// #include //Decommenta se usi un LCD con un registro a scorrimento.
#includere
#includere
#includere
#includere
//A4 = (SDA)
//A5 = (SCL)
Adafruit_INA219 ina219;
LCD a cristalli liquidi (12, 11, 5, 4, 3, 2);
// LiquidCrystal_SR lcd(3, 4, 2); //Decommenta se usi un LCD con un registro a scorrimento.
// | | |_ Perno di chiusura
// | \_ Pin orologio
// \_ Dati/Abilita Pin
byte bitsOfResolution = 12; //risoluzione sovracampionata comandata
numSamplesToAvg lungo senza segno = 20; //numero di campioni ALLA RISOLUZIONE OVERSAMPLED che vuoi prendere e media
ADC_prescaler_t ADCSpeed = ADC_DEFAULT;
unsigned long precedenteMillis = 0;
tensione di shunt galleggiante = 0,0; //Da INA219
tensione del bus galleggiante = 0,0; //Da INA219
float current_mA = 0.0; //Da INA219
tensione di carico galleggiante = 0,0; //Da INA219
galleggiante arduinovoltaggio = 0.0; //Calcolo della tensione dal pin A0
Unsigned long A0analogReading = 0;
byte AnalogIn = A0;
float ma_mapped = 0.0; //Mappa tensione da A0 a 4-20mA
void setup() {
adc.setADCSpeed(ADCSpeed);
adc.setBitsOfResolution(bitsOfResolution);
adc.setNumSamplesToAvg(numSamplesToAvg);
uint32_t CurrentFrequency;
ina219.begin();
ina219.setCalibration_32V_30mA(); //Libreria modificata per una maggiore precisione su mA
lcd.begin(20, 4); // inizializza l'LCD
lcd.clear();
lcd.home(); // andare a casa
lcd.print("********************");
ritardo (2000);
lcd.clear();
}
ciclo vuoto()
{
unsigned long currentMillis = millis();
const lungo intervallo = 100;
//&&&&&&&&&&&&&&&&&
Leggi i dispositivi I2C a intervalli e fai alcuni calcoli
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if (Milliscorrente -Millisprecedente >= intervallo) {
precedenteMillis = correnteMillis;
Intervallo();
}
Stampa_su_LCD(); // Probabilmente non ho bisogno di aggiornare l'LCD così velocemente e posso essere spostato al di sotto di Interval()
}
vuoto
Intervallo() {
shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
tensione di carico = (tensione bus + (tensione shunt / 1000)) + 0,71; // +0.71 è la caduta di tensione del mio diodo
A0analogReading = adc.newAnalogRead(analogIn);
arduinovoltage = (5.0 * A0analogReading); //Calcolato in mV
ma_mapped = map(arduinovoltage, 752, 8459, 30, 220) / 10.0; //La mappa non può utilizzare i float. Aggiungi uno 0 dietro il valore mappato e dividi per 10 per ottenere la lettura float.
// La mappatura dal calcolo della tensione fornisce una lettura più stabile rispetto all'utilizzo della lettura grezza adc.
if (shuntvoltage >= -0,10 && shuntvoltage <= -0,01) // Senza carico l'INA219 tende a leggere sotto -0.01, beh il mio lo fa.
{
current_mA = 0;
tensione bus = 0;
tensione di carico = 0;
tensione di shunt = 0;
}
}
vuoto
Stampa_su_LCD() {
lcd.setCursor(0, 0);
if (ma_mapped < 1.25) { // Senza corrente questa è la mia lettura in mA, quindi la butto via.
lcd.print("* Generatore 4-20mA *");
}
altro {
lcd.print("** Tester Analogico **");
}
lcd.setCursor(0, 1);
lcd.print("Dispositivo:");
lcd.setCursor(10, 1);
if (ma_mappato < 1.25) {
lcd.print("nessun dispositivo");
}
altro {
lcd.print(ma_mappato);
}
lcd.print("mA");
lcd.setCursor(0, 2);
lcd.print("Genera:");
lcd.setCursor(10, 2);
lcd.print(current_mA);
lcd.print("mA");
lcd.setCursor(0, 3);
lcd.print("Rifornimento:");
lcd.setCursor(10, 3);
lcd.print(tensione di carico);
lcd.print("V");
}
Passaggio 5: alcune altre foto
Terminale dell'altoparlante dell'amplificatore. LED pilotato dal generatore di corrente (RTD). Il cablaggio della scheda analogica sostituirà il LED.
Il terminale all'estrema sinistra è per l'ingresso di alimentazione. I terminali a destra sono per l'ingresso dello strumento.
Passaggio 6: montaggio
Tutto sembra adattarsi. Ho usato il silicone per tenere insieme temporaneamente alcune cose. Il trim pot è siliconato in alto a destra. È stato preforato un piccolo foro. Posso regolare la corrente dalla parte superiore della scatola.
Passaggio 7: solo foto
Passaggio 8: parole finali
Ho testato l'output di questo dispositivo con un PLC Allan Bradley. I risultati sono stati molto buoni. Ho una gamma completa. Ho anche testato questo dispositivo con un sensore di pressione da 4-20 mA con display LCD integrato. Anche in questo caso i risultati sono stati molto buoni. Le mie letture erano errate di un paio di decimali.
Scrivo il mio codice Arduino in schede. Nei PLC sono chiamate sottoroutine. Semplifica il debug per my.
In allegato sono i file di testo di quelle schede.
Consigliato:
Generatore di funzioni fai-da-te con STC MCU facilmente: 7 passaggi (con immagini)
Generatore di funzioni fai-da-te con STC MCU facilmente: questo è un generatore di funzioni realizzato con STC MCU. Servono solo diversi componenti e il circuito è semplice. Specifiche Uscita: Frequenza della forma d'onda quadra a canale singolo: 1Hz ~ 2MHz Frequenza della forma d'onda sinusoidale: 1Hz ~ 10kHz Ampiezza: VCC, circa 5V Capacità di carico
Generatore di fogli laser interattivo con Arduino: 11 passaggi (con immagini)
Generatore di fogli laser interattivo con Arduino: i laser possono essere utilizzati per creare incredibili effetti visivi. In questo progetto, ho costruito un nuovo tipo di display laser che è interattivo e riproduce musica. Il dispositivo ruota due laser per formare due fogli di luce simili a vortici. Ho incluso il sensore di distanza
Generatore musicale basato sulle condizioni meteorologiche (generatore MIDI basato su ESP8266): 4 passaggi (con immagini)
Generatore di musica basato sul tempo (Generatore MIDI basato su ESP8266): Ciao, oggi spiegherò come creare il tuo piccolo generatore di musica basato sul tempo. È basato su un ESP8266, che è un po' come un Arduino, e risponde alla temperatura, alla pioggia e l'intensità della luce. Non aspettarti che produca intere canzoni o programmi di accordi
Generatore - Generatore DC con interruttore Reed: 3 passaggi
Generatore - Generatore CC che utilizza un interruttore reed: generatore CC semplice Un generatore di corrente continua (CC) è una macchina elettrica che converte l'energia meccanica in elettricità a corrente continua. Importante: un generatore di corrente continua (CC) può essere utilizzato come motore CC senza alcuna costruzione i cambiamenti
Dimensioni fai-da-te e costruzione di un generatore di backup dell'alimentazione a batteria con batterie a ciclo profondo da 12 V: 5 passaggi (con immagini)
Dimensioni fai-da-te e costruzione di un generatore di backup della batteria con batterie a ciclo profondo da 12 V: *** NOTA: fare attenzione quando si lavora con batterie ed elettricità. Non cortocircuitare le batterie. Utilizzare strumenti isolati. Segui tutte le regole di sicurezza quando lavori con l'elettricità.*** Preparati prima che la prossima volta che l'alimentazione si spenga con una batteria in standby