miércoles, 1 de mayo de 2013

Electrovalvula Controlada Con Arduino

Bueno, en esta nueva entrada les mostrare como controlar el flujo de liquido que circula a través de una electrovalvula todo esto a partir de arduino.

Analisis y Circuito:

Como todos sabemos las electrovalvulas para que puedan funcionar correctamente se les debe suministrar 110 V, pero como hacemos para que nuestro arduino pueda activarla sin que tenga ningún problema o que se nos pueda quemar. una de las soluciones que pueden haber es,  primero realizar un circuito de activación de la electrovalvula, el cual incluye el uso de un rele para su activación y su desactivación. por el otro lado tenemos nuestro arduino, pueden  haber dos opciones que la eletrovalvula se active cuando presione un interruptor o puede ser automática afectada cuando pase cierto evento, y finalmente un elemento que nos va a permitir la conexión entre los dos circuitos se llama el optoacoplador para este caso el 2n25, este integrado nos permite cierto grado de seguridad en el uso de voltajes alternos, ya que nos aísla totalmente cada uno de los circuitos.

Esquemas:
Optoacoplador 4n25 (Función: Aislar los dos circuitos)

En el pin numero 1, es por donde la señal de arduino o de un interruptor circula haciendo la excitación en el diodo led transmitiendo luz que es trasmitida al lado derecho del mismo, el cual cumple otra función. 

Transistor NPN TIP31C

Es transistor tiene como función principal la conmutación, es decir el nos va permitir o no el paso de la señal de activación hacia el rele.

Rele

Rele, es el actuador por medio del cual se activan las electrovalvulas, dependiendo de la que señal que pasa a traves del transistor.en esta parte del relevador tenemos que realizar bien las conexiones ya que en este punto implementamos la corriente alterna a nuestro circuito.
Electrovalvula(Función: Permitir el paso de liquido a través de ella por medio de señales eléctricas)

las electrovalvulas generalmente las encontramos en el mercado de dos entradas para su conexion pero también hay de tres. antes de seguir, tenemos que hacer una conexion a 110 o 120 V, osea implementado un enchufe. lo que tenemos que hacer es una patilla de la electrovalvula la conectamos a una de las las puntas de las terminales del enchufe, la otra patilla de la electrovalvula va conectada el rele y la otra terminal del enchufe va conectada tambien al rele.

Circuto:






PcB:



martes, 16 de abril de 2013

Análisis de Temperatura Matlab con Arduino

http://elagmecatronica.blogspot.com/2012/09/control-de-temperatura-con-lm35-arduino.html

En la anterior entrada, se hizo el ejemplo de la comunicación del arduino con el entorno de Matlab. debido a algunos problema me he tomado a la tarea de publicar ese código para que comprendan mejor su desarrollo. cabe aclarar que este código nos sirve para una gran cantidad de cosas, no solo mediciones de temperatura si no también como la humedad, niveles de gases, análisis de ph en otros.


La mayoría de las veces es necesario adquirir los datos de una variable durante un determinado
tiempo. Para empezar, vamos a manejar instrucciones de control para adquirir un determinado número de muestras. Por ejemplo. Guardar 100 lecturas de temperatura en un vector que llamaremos T.



Si se necesita una serie de tiempo, es decir, se quiere obtener datos de una variable respecto al tiempo, es necesario, incluir comando para generar valores de tiempo. Para eso se utiliza la instrucción “tic” combinada con “toc”


El formato es:

tic  %Comienza el conteo en un temporizador interno
toc %Detiene el temporizador

Por ejemplo



En este caso, la variable “t_total” indica el tiempo total de adquisición de datos.
Si se quiere generar un valor de tiempo para cada valor de la variable medida:

Puede ser deseable que el usuario pueda seleccionar, en vez del número de muestras, el tiempo de lectura y la separación entre muestras. Para poder introducir valores en tiempo de ejecución, se utiliza el comando “input(‘Texto a mostrar’)” con lo que en pantalla aparece el cursor a la espera de lo que el usuario digite:
Es decir, el valor ingresado por el usuario, puede asignarse a una variable que se utilice para configurar el tiempo entre muestras y el tiempo total que dure la adquisición de datos.


Finalmente, se puede crear una condición que no dependa de que se completen las muestras sino, de que se cumpla el tiempo total de medición. La sentencia “while(condición)” es la que permite realizarlo:
si tiene en claro todo lo anteriormente dicho(recomendación, entender muy bien lo que se hace en cada paso debido a que es un código sucesivo) el código final quedara así.


espero resolver dudas y no generar mas XD... cualquier duda acerca del código, me dejan un comentario y estaré pendiente


lunes, 22 de octubre de 2012

Comunicación Serie Ente Java y Arduino

Hoy veremos como realizar una comunicación serie entre el IDE Netbeans y Arduino. para la realizar de forma adecuada nuestro proyecto, tenemos que tener en cuenta la librería de conexión o comunicación entre estos dos entornos de programación, es una librería muy conocida llamada RXTX, Esta librería reemplazo a las extensiones API que anteriormente existían otra cosa que debemos tener muy en cuenta es que nosotros tenemos que ajustar la dirección del puerto COM de nuestra tarjeta arduino que en ese momento estemos utilizando para mi caso es el "COM36".

 Nuestro primer paso es el de llamar, incluir o agregar nuestra librería RXTX a nuestro IDE(Netbeans). después de haber descargado y descomprimido la librería, abrimos Netbeans Creamos un nuevo proyecto después de esto vamos a las propiedades de este, luego le damos clic en librerías, y por el momento le podemos dar clic en add/jar/folder y seleccionamos la librería RXTXcomm. La otra forma es agregando una librería para que cuando necesitemos esa misma librería no tengamos que hacer el paso anterior si no seleccionarla de las librerías principales de java.

el segundo paso para la comunicación es la configuración de arduino, para ello abrimos el entorno de programación de arduino,  y pegamos el siguiente código:

z
void setup () {
  Serial.begin (9600);  // Velocidad en la transferencia de los datos 9600 bauds
}

void loop () {
  Serial.println ("Hola mundo");  // imprimimos en el serial 
  delay (1000);         // hacemos un retardo de 1 segundo
}

el tercer paso es configurar el IDE de java o nuestro condigo principal para ello arduino nos brinda un código el cual es el mas básico para verificar la comunicación entre java y arduino que es el siguiente:

import java.io.InputStream;   //importamos las librerias
import java.io.OutputStream;
import gnu.io.CommPortIdentifier; 
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import java.util.Enumeration;

public class SerialTest implements SerialPortEventListener {
 SerialPort serialPort;
        /** The port we're normally going to use. */
 private static final String PORT_NAMES[] = {  
//  muy importante esta parte ya que muchas personas se pierden en este paso y no// se realiza la comunicación como queremos podemos borrar las demas opciones dep//endiendo de cual sistemas operativo tengamos para mi caso solo dejo la de wind//ows y coloco "COM36".
   "/dev/tty.usbserial-A9007UX1", // Mac OS X
   "/dev/ttyUSB0", // Linux
   "COM3", // Windows
   };
 /** Buffered input stream from the port */
 private InputStream input;
 /** The output stream to the port */
 private OutputStream output;
 /** Milliseconds to block while waiting for port open */
 private static final int TIME_OUT = 2000;
 /** Default bits per second for COM port. */
 private static final int DATA_RATE = 9600; 
//velocidad de transferencia de datos y tiene q coincidir con la que tenemos con //arduino de lo contrario no se establece la comunicación.

 public void initialize() {
  CommPortIdentifier portId = null;
  Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

  // iterate through, looking for the port
  while (portEnum.hasMoreElements()) {
   CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
   for (String portName : PORT_NAMES) {
    if (currPortId.getName().equals(portName)) {
     portId = currPortId;
     break;
    }
   }
  }

  if (portId == null) {
   System.out.println("Could not find COM port.");
// en caso de arrojarnos could no find COM port debemos revisar la direccion del //puerto.
   return;
  }

  try {
   // open serial port, and use class name for the appName.
   serialPort = (SerialPort) portId.open(this.getClass().getName(),
     TIME_OUT);

   // set port parameters
   serialPort.setSerialPortParams(DATA_RATE,
     SerialPort.DATABITS_8,
     SerialPort.STOPBITS_1,
     SerialPort.PARITY_NONE);

   // open the streams
   input = serialPort.getInputStream();
   output = serialPort.getOutputStream();

   // add event listeners
   serialPort.addEventListener(this);
   serialPort.notifyOnDataAvailable(true);
  } catch (Exception e) {
   System.err.println(e.toString());
  }
 }

 /**
  * This should be called when you stop using the port.
  * This will prevent port locking on platforms like Linux.
  */
 public synchronized void close() {
  if (serialPort != null) {
   serialPort.removeEventListener();
   serialPort.close();
  }
 }

 /**
  * Handle an event on the serial port. Read the data and print it.
  */
 public synchronized void serialEvent(SerialPortEvent oEvent) {
  if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
   try {
    int available = input.available();
    byte chunk[] = new byte[available];
    input.read(chunk, 0, available);

    // Displayed results are codepage dependent
    System.out.print(new String(chunk));
   } catch (Exception e) {
    System.err.println(e.toString());
   }
  }
  // Ignore all the other eventTypes, but you should consider the other ones.
 }

 public static void main(String[] args) throws Exception {
  SerialTest main = new SerialTest();
  main.initialize();
  System.out.println("Started");
//Si todo la anterior esta bien entonces nos debe imprimir que el puerto esta ini//ciado y nos debe imprimir lo que tiene el arduio en el puerto seria osea el Hol//a Mundo
 }
}

para mas información visitar la pagina de arduino http://arduino.cc/playground/Interfacing/Java.

en internet se encuentra varios ejemplos de interactuar arduino y java de los cuales tome uno para hacer la prueba o verificación de esto en este caso realice la prueba del siguiente vídeo que encontré en internet:


cualquier duda me la hacen saber a través del los comentarios.



sábado, 15 de septiembre de 2012

Circuito Combinacional para encender un display de 7 segmentos de 0 a 9

Bueno, el circuito principalmente se basa principalmente en el desarrollo de una combinación lógica entre compuertas lógicas que nos generen los números de cero a nueve, claro controlado con interruptores. el diseño del circuito es un poco tedioso debido a la gran cantidad de compuertas que resultan. yo hice una simplificación con los mapas de karnaugh y tome solo compuertas Nand (unas de dos entradas(7408), tres entradas(7410) y otras de cuatro entradas(7420)).de la siguiente forma:


Tenemos la siguiente tabla
A
B
C
D
Y1
Y2
Y3
Y4
Y5
Y6
Y7
Vista Display
0
0
0
0
1
1
1
1
1
1
0
0
0
0
0
1
0
1
1
0
0
0
0
1
0
0
1
0
1
1
0
1
1
0
1
2
0
0
1
1
1
1
1
1
0
0
1
3
0
1
0
0
0
1
1
0
0
1
1
4
0
1
0
1
1
0
1
1
0
1
1
5
0
1
1
0
1
0
1
1
1
1
1
6
0
1
1
1
1
1
1
0
0
0
0
7
1
0
0
0
1
1
1
1
1
1
1
8
1
0
0
1
1
1
1
0
0
1
1
9
1
0
1
0
X
X
X
X
X
X
X
X
1
0
1
1
X
X
X
X
X
X
X
X
1
1
0
0
X
X
X
X
X
X
X
X
1
1
0
1
X
X
X
X
X
X
X
X
1
1
1
0
X
X
X
X
X
X
X
X
1
1
1
1
X
X
X
X
X
X
X
X
Donde x son las llamadas condiciones no importa.
La salida y1, es a en el display asi hasta y7 que es la letra g del display.
La tabla anterior está basada en un display de 7 segmentos de cátodo común ósea:
(el de la parte izquierda)
basados en la anterior tabla podemos ahora si hacer el mapa de karnaugh.
entonces para la salidad y1 o a tenemos:


Para  la salida y2 o b :


Para  la salida y3 o c :

Para  la salida y4 o d tenemos:


Para  la salida y5 o e :
Para  la salida y6 o f :
Para  la salida y7 o g :


seguido de esto les presento el circuito diseñado en livewire:
y bueno hay tengo un vídeo de poca calidad mostrando finalmente el resultado que se quería bueno pero es un muestra de que funciona bien el circuito.