Powered By Blogger
Mostrando entradas con la etiqueta Matlab. Mostrar todas las entradas
Mostrando entradas con la etiqueta Matlab. Mostrar todas las entradas

miércoles, 21 de febrero de 2018

Monitoreo de Temperatura con MATLAB y ARDUINO

En esta practica consiste en monitorear la temperatura obtenida del sensor DS18B20 en MATLAB utilizando como tarjeta de adquisición de datos a la placa ARDUINO.

Material:

Placa ARDUINO (Cualquier modelo).
Sensor DS18B20
Resistor de 4.7 kΩ
Protoboard
Cables para conexión


El sensor a utilizar en esta practica es el dallas temperature DS18B20, este sensor tiene la peculiaridad para su comunicación ya que utiliza la librería One Wire y  la libreria Dallas temperature esto nos permite conectar varios sensores de este mismo modelo en la misma linea de señal y evita el uso de varios pines de conexión.

Características:
Sensor Digital.
Resolución de 9 y 12 bits
Rango de operación de -50 a 125 grados Centígrados.
Precisión +- 0.5 grados.
Protocolo OneWire.



Figura 1. Sensor DS18B20.

Figura 2. Sensor DS18B20 en modelo a prueba de agua.

Como primer paso vamos a realizar la conexion de nuestro sistema en la protoboard, en la siguiente figura se muestra la representación sugerida.




Figura 3. Conexión el protoboard.

Abrimos ARDUINO IDE y cargamos el siguiente sketch a la placa ARDUINO (previo a esto es necesario tener instaladas la librerías mencionadas anteriormente).

#include <OneWire.h>                 //Se importan las librerías
#include <DallasTemperature.h>
#define Pin 2                        //Se declara el pin donde se conectará la DATA
OneWire ourWire(Pin);                //Se establece el pin declarado como bus para la comunicación OneWire
DallasTemperature sensors(&ourWire); //Se llama a la librería DallasTemperature

void setup() {
delay(1000);
Serial.begin(9600);
sensors.begin();                     //Se inician los sensores
}
 
void loop() {
sensors.requestTemperatures();       //Prepara el sensor para la lectura
 
Serial.print(sensors.getTempCByIndex(0)); //Se lee e imprime la temperatura en grados Centigrados
Serial.println(" Grados Centigrados");
 
delay(1000);                         //Se provoca una parada de 1 segundo antes de la próxima lectura
 
}



 En tercer paso creamos un nuevo script en MATLAB y creamos en siguiente codigo:

clear all;clc; % limpia la ventana de comandos
delete(instrfind({'port'},{'COM3'})); % cierra toda conexion serial con el puerto com1
pserial=serial('COM3','BaudRate',9600); % configura la conexion serial
fopen(pserial); % abrir puerto serial
figure('Name','Grafica de valores obtenidos')
title('LECTURA EN TIEMPO REAL DEL SENSOR');
lHandle = line(nan, nan);
xlabel('Muestreo c/d 100m/s');
ylabel('la temperatura es ');
val=zeros(1,50);
for i=1:50
ylim([0 400.1]);
xlim([i-100 i+10]);
lectura=fscanf(pserial,'%d');
val(i)= lectura;%*100*5/1024;
hold on
plot(i,val(i),'x');
drawnow
end
dlmwrite('Valores_Obtenidos.dat', val, 'delimiter', '\n', 'precision', '%.2f')
fclose(pserial);
delete(pserial);

clear all;





lunes, 27 de febrero de 2017

Control de motor DC con Arduino - MATLAB

Como realizar un control de un motor de corriente continua a través de una placa Arduino y MATLAB.

Material utilizado:
  • Arduino UNO.
  • Driver l298d.
  • Motoreductor 12V.
  • Fuente de alimentación externa de 12V a 1amp.
Motor DC utilizado




Diagrama de conexión

Diagrama de conexión con integrado L298d.


Si no cuentas con el integrado L298d, puedes utilizar el L293D para un motor DC de menor potencia te funcionara muy bien.

Diagrama de conexión con integrado L293D.

Una vez realizado las conexiones del circuito, conectamos la placa arduino a nuestra computadora y abrimos MATLAB.

Creamos un nuevo script y comenzamos a escribir el siguiente código. Únicamente tendremos que modificar el numero de puerto de comunicación  y el modelo en caso de ser necesario, de la placa Arduino.

Script en MATLAB.

clear all port;
a = arduino('com3','uno');

for x = 0:4
    writeDigitalPin(a,'D3',1);
    writeDigitalPin(a,'D5',0);
    pause(2);
    writeDigitalPin(a,'D3',0);
    writeDigitalPin(a,'D5',1);
    pause(2);
end

writeDigitalPin(a,'D3',0);
writeDigitalPin(a,'D5',0);

for d = 1:-0.1:0
    writePWMDutyCycle(a,'D3',d);
    writeDigitalPin(a,'D5',0);
    pause(2);
end

for s = 0:+0.1:1
    writeDigitalPin(a,'D3',0);
    writePWMDutyCycle(a,'D5',s);
    pause(2);
end
writeDigitalPin(a,'D3',0);
writeDigitalPin(a,'D5',0);




Gracias por ver el vídeo.