VAML

VAML
Victor Manzanero

martes, 26 de abril de 2011

Primer tutorial: Arduino desde Java

Comenzamos con el primer Tutorial del blog, para los que nos gusta mezclar el Software y hardware, y queremos hacerlo desde Arduino y java. aquí están estos pequeños pasos para hacerlo.


****Damos por hecho que ya tiene instalado Netbeans y Arduino*********

Paso 1.- Preparar arduino .
colocamos un led en arduino de la siguiente manera.

Se encuentra en el pin 13.

Abrimos el ejecutable de arduino nos vamos a File>Examples>Blink

nos abrirá uno de los ejemplo que hacer parpadear un led en el pin 13 cada segundo.
el Código es el Siguiente


Lo tendremos que modificar de la siguiente manera:
Después de modificarlo lo compilamos(-con icono parecido a play debajo de File) y si todo anda bien lo subimos (Verifique que esta en el puerto corecto y que tiene seleccionado la placa correcta).Ya que tengasmos el programa en arduino hasta aquí por el momento con la placa (No desconecte)nos vamos a Netbeans.


Paso 2: Abrimos Netbeans y nos vamos a File>New project... nos aparecerá la siguiente ventana.


Seleccionamos java y java application como se ve en la figura y presionamos next > y veremos la siguiente Ventana.

Escoja un nombre para el proyecto nuevo en mi caso use "ArduinoAndJava", desmarque la opción que dice Create Main Class pues no la necesita remos, la ventana le quedara de la siguiente forma.

Cuando tengamos de esta manera la ventana le damos en Next >.

y ahora tendremos la siguiente Ventana.
 ya podemos ver nuestro nuevo proyecto creado lo seleccionamos y le damos un click derecho(click secundario), y hasta lo ultimo seleccionamos properties..
Se abrirá otra ventana y seleccionamos Run como se ve en la siguiente imagen.
Localizamos la parte que dice Working Directori y damos click en Browse... ahi se abrirá otra ventana para seleccionar la ruta donde se encuentra la carpeta de arduino así como se ve en la sig. imagen.


Después de seleccionar la ruta veremos algo así.
Una vez hecho esto damos a Ok y terminamos con este paso.

Paso 3: Librerias

Localizamos nuestro proyecto y le damos click a la flecha que esta junto y se abrirán nuevas carpetas y seleccionamos la que dice Libraries como se ve enseguida.

La seleccionamos con un click derecho y veremos lo siguiente.

Le damos click en el boton que dice Create veremos ....
En Libreries Name ponemos ARDUINO y pulsamos ok.
Veremos algo parecido a la imagen de arriba, tendremos que buscar la carpeta de arduino que nos descargamos y dentro de esas carpeta localizamos otra llamada > lib ahi se encuentran todas las librerías que necesitamos para que java pueda comunicarse con arduino. veremos lo siguiente
Seleccionamos todos lo Jars que ahi vemos y pulsamos add JAR/Folder.
Ahora veremos la ventana anterior seleccionamos la librería que acavamos de crear y pulsamos en. Add Libra...
listo tenemos todas la librerías necesarias, y ahora solo necesitamos el código. espero que hasta aquí todo vaya perfecto. continuamos.
Paso 4:Añadir clases
Le damos click derecho a nuestro proyecto nuevo y seleccionamos New>Java class
y le ponemos  nombre a nuestra clase, en mi caso le puse "led".  como vemos enseguida.
y presionamos Finish. veremos....

y agregamos los siguientes métodos para que todo funcione muy bien.

//arreglo que contine los posibles nombres que tendrán los puertos donde se conectara el arduino
            private static final String PORT_NAMES[] = {
            //"/dev/tty.usbserial-A9007UX1", // Mac OS X
            //"/dev/ttyUSB0", // Linux
                        "/dev/ttyUSB0"
            ,"COM3" // Windows
            };


    static public class MyPrefs extends Preferences {
        static public void init() {
            Preferences.init("/home/victor/.arduino/preferences.txt");//para linux
           //Preferences.init("c:/preferences.txt");//para windows
        }
    }

    /** Creates new form led */
    public led() {
        initComponents();
    }


    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        // TODO add your handling code here:

        //Este es el codigo del boton que prendera el led se manda un uno que arduino interpretara por su respectivo codigo ascii que para el uno es 49
        sendMessage("1");


    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        // TODO add your handling code here:
           //Este es el codigo del boton que apagara el led se manda un dos que arduino interpretara por su respectivo codigo ascii que para el dos es 50
        sendMessage("2");

    }//GEN-LAST:event_jButton2ActionPerformed

    private void jMenu3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenu3MouseClicked
        // TODO add your handling code here:
        //extra al darle click cierra toda la aplicacion
        this.dispose();
    }//GEN-LAST:event_jMenu3MouseClicked

    //metodo encardago de mandar los datos a arduino
   public static synchronized void sendMessage(String cadena) {

            byte[] asd;//arrglo de tipo byte
            asd=cadena.getBytes();//linea que sirve para descomponer un caracte a una forma de bits(ascii)
            try {
                output.write(asd);//escribe en el puerto serie lo que se encuentre en el arreglo bite
            } catch (IOException ex) {
             Logger.getLogger(led.class.getName()).log(Level.SEVERE, null, ex);//si no loga enviar la cadena lo intenta de nuevo
            }
    }

    /**
    * @param args the command line arguments
    */


   //metodo principal o main
    public static void main(String args[])throws Exception {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new led().setVisible(true);
            }
        });
         MyPrefs.init();
        System.out.println("puerto usado: " + MyPrefs.get("serial.port"));
        System.out.println("targeta utilizada: " + MyPrefs.get("board"));

        /*CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(
                MyPrefs.get("serial.port"));*/

        CommPortIdentifier portId = null;
        Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

        // iteraciones para buscar el puerto
        while (portEnum.hasMoreElements()) {
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
            for (String portName:PORT_NAMES) {
                if (currPortId.getName().equals(portName)) {
                    portId = currPortId;
                    break;
                }
            }
        }

                //se crea objeto de la clase
        led m=new led();
        //inicializar  serialport
        serialport = (SerialPort)portId.open(m.getClass().getName(), 9600);

   
        output = serialport.getOutputStream();
        serialport.setSerialPortParams(MyPrefs.getInteger("serial.debug_rate"),
                SerialPort.DATABITS_8,
                SerialPort.STOPBITS_1,
                SerialPort.PARITY_NONE);

    }
Listo estos son los métodos principales.
Código completo librerías o lo que necesiten solo manden un correo a vctr.31@hotmail.com y con gusto se los are llegar.
una ves que tenga el codigo veran lo siguiente.

(El arduino debe estar conectado con el programa del principio del tutorial)
Y como se puede ver un click en el boton encender y el led lo hara. asi como tambien reaccionara al botón apagado.

Les dejo un vídeo con el funcionamiento del mismo.
  por el momento es todo espero que les guste, muchas gracias.





código completo, librerías , dudas y lo que necesiten a vctr.31@hotmail.com
y comente si quiere algún otro tutorial.
hasta pronto








53 comentarios:

  1. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar
  2. sii. el archivo preference,txt te lo genera le mismo arduino, si usas win entonces copia ese archivo en tu carpeta raiz osea en c: si te das cuenta el codigo mismo lo dice.
    mandame un correo a vctr.31@hotmail.com
    y con todo el gusto del mundo te mando el codigo completo. te aseguro que funciona.

    ResponderEliminar
  3. Me fue de mucha ayuda tu post

    Gracias amigo

    ResponderEliminar
  4. me podrias pasar el codigo fuente no logro correrlo con lo que pones :D te agradeceria

    ResponderEliminar
  5. hola chikita como estas esta muy bueno tu tutoria te amo soy chaos

    ResponderEliminar
  6. aaaaa se me olvidaba prestame tu usb esk me da weba voltiar a verte para pedirtelo sigo siendo chaos

    ResponderEliminar
  7. como puedo hacerlo si el com que utilizo no es el 1 si no el 4??

    ResponderEliminar
  8. justo lo que necesitaba. muchas gracias

    ResponderEliminar
  9. Oye esta linea de codigo no esta incorrecta?

    val=Serial.read()-48;

    ResponderEliminar
  10. no salio en la foto, solo falta la linea del principio

    int val=0;

    ResponderEliminar
  11. Gracias victor por compartir tu conocimiento.
    tec_esoj@yahoo.com
    Saludos

    ojala pudieras compartir el codigo para hacer pruebas con mi arduino.

    ResponderEliminar
  12. Prove el codigo y funciono muy bien. Saludos y Feliz año

    tec_esoj@yahoo.com

    JCC

    ResponderEliminar
  13. Buenas noches. Tengo un Arduino Mega 2560, he intentado este código, y otros que he encontrado en la red, pero no funciona. Tengo entendido que es necesario deshabilitar el autoreset de la tarjeta, pero no he encontrado que eso funcione.
    Has intentado con la mega 2560?
    Por lo que he visto la comunicación se realiza, pero los valores que recibe la tarjeta no son los adecuados, ignoro que pueda estar recibiendo.
    Dejo mi correo: antonio.leon@gmail.com

    ResponderEliminar
    Respuestas
    1. pudiste solucionar con el 2560, tengo el mismo problema
      saludos

      Eliminar
  14. Victor me parece bien su codigo! Me gustaria que me lo enviaras porfavor! Gracias!
    pulgamontes@gmail.com

    ResponderEliminar
  15. me puedes mandar el codigo del archivo preferences.txt mi correo es crocker205@hotmail.com

    ResponderEliminar
  16. Hola Victor,

    Es posible que me envíe el código fuente.
    Puedo usar arduino en la versión 1.0

    Gracias!
    cegp.pereira@gmail.com

    ResponderEliminar
  17. BUENAS MUY BIEN TUTORIAL, LE AGRADECERIA SI ESTA A SU DISPOSICION ENVIARME EL CODIGO FUENTE. PUEDO USAR ARDUINO R3?
    SALUDOS, ESPERO SU PRONTA RESPUESTA

    ResponderEliminar
  18. hola, muy buen tuto, agradeceria que me mandes el codigo fuente a crc025@alumnos.ucn.cl porfavor gracias de antemano
    LoU

    ResponderEliminar
  19. Hola ESTA MUY BUENO EL TUTORIAL....me preguntaba si me podrias enviar el codigo fuente mi correo es estefaniagabriela100@yahoo.com GRACIAS =)

    ResponderEliminar
  20. cuales son las librerias que tienes que importar para este codigo

    ResponderEliminar
  21. Hola, Muy buen tuto... si m pudieras enviar el codigo completo a mi correo. Gracias
    robinhinos_4@hotmail.com

    ResponderEliminar
  22. Hola he seguido todos los pasos, podrias mandarme el código fuente del java es que no logro hacerlo funcionar. Al finalizar todos los pasos me queda este codigo(y no se donde poner tu código). Gracias:

    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    /**
    *
    * @author dsEr
    */
    public class Led {

    }

    ResponderEliminar
  23. soy el del mensaje 27 de junio de 2012 19:24
    mi correo es dsernesto@yahoo.com

    ResponderEliminar
  24. te molesto si me podrias enviar tu codigo completo lo probe con todos los pasos pero no me funciona.
    Mi e-mail es: MIKE35MAGA@YAHOO.ES

    Gracias

    ResponderEliminar
  25. hola muy buen tutorial ,
    me podrias mandar tu codigo completo
    te agradeceria bastante
    claudioolanda@hotmail.com

    ResponderEliminar
  26. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  27. buen tuto, gracias... asumi que val en arduino era de tipo entero al igual que output en netbeans era un campo... te comento que me toco importar todas estas librerias:
    import gnu.io.CommPortIdentifier;
    import gnu.io.PortInUseException;
    import gnu.io.SerialPort;
    import gnu.io.UnsupportedCommOperationException;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Enumeration;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import processing.app.Preferences;

    espero que haya estado bn... gracias nuevamente

    ResponderEliminar
  28. buen tutorial para aprendizaje gracias por compartir los conocimientos.

    ResponderEliminar
  29. hola gracias por el tutorial, pero tengo inconvenientes cuando el programa va a ejecutarse... por fa envíame el codigo completo, te agradecería mucho.
    gracias. lenyvr20@gmail.com

    ResponderEliminar
  30. donde puedo descargar el paquete completo

    ResponderEliminar
  31. Thanks for sharing your knowledge.
    Could you send me all the code of neatbeans,please?
    angelinasetimo@hotmail.com

    ResponderEliminar
  32. amigo muchas gracias por la informacion pero tengo un inconveniente con el codigo de java seria posible q me enviara el archivo del codigo fuente . jhonatan0770@hotmail.com

    ResponderEliminar
  33. Hola, me agradó mucho tu tutorial estoy empezando con esto de arduino y java y me fue de mucha utilidad ya que está muy bien explicado, pero tengo algunos problemas. Podrías enviarme el código completo por favor jcho820309@hotmail.com Muchas gracias!!

    ResponderEliminar
  34. Victor me parece bien su codigo! Me gustaria que me lo enviaras porfavor! Gracias!
    josejose1116@hotmail.com

    ResponderEliminar
  35. Victor me parece bien su codigo! Me gustaria que me lo enviaras porfavor! Gracias!
    josejose1116@hotmail.com

    ResponderEliminar
  36. Una pregunta, yo lo estoy haciendo desde ubuntu, y con netbeans, tengo esta linea de codigo "Arduino.ArduinoTX("COM1", 2000, 9600); " donde en COM1 es el puerto en windows, pero en linux que va? por eso no me funciona.. no se si me puedas ayudar.

    ResponderEliminar
  37. en el tutorial dice que no creas el main y luego si, no comprendo. ademas el output da error al no tenerlo declarado, que tipo de campo es? quiza funcione pero para quien le gusta entenderlo esta bastante dificil, no entiendo como en la misma clase creas un main y llamas a la misma clase, en mi opinion tendrias que hacer la explicacion haciendo main, clases y frames por separado sino directamente hacelo con el block de notas que es lo mismo. igual gracias por la intencion

    ResponderEliminar
  38. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  39. Deja todo lo que precisemos para que funciona, no nos hagas mandar un correo pidiéndote las cosas. Aprende lo que es un blog, y aprende lo que es el mundo de la informática.

    Salú

    ResponderEliminar
  40. Gracias por tu aporte me servira mucho tu post ....

    ResponderEliminar
  41. Saludos desde Colombia.. Buen Aporte, tenes algùn email, o canal de youtube?

    ResponderEliminar
  42. Hola:

    ¿Puedes poner un cuadro de texto que a parte diga mensajes de "Led encendido" y "Led apagado"?

    En lo demás. Buen trabajo.

    ResponderEliminar
    Respuestas
    1. Hola:

      Lo he hecho gracias a un amigo por Internet y en muchos lenguajes de programación.

      Puedes ver este PDF que estoy haciendo un tutorial.
      https://www.dropbox.com/s/ha07f67zieee7v6/Interfaz%20control%20reles%20Arduino.pdf?dl=0

      Saludos.

      Eliminar
  43. Interfaz Java y Arduino.

    Tutorial diseño de interfaz con Java bajo NetBeans para controlar Arduino desde el puerto serie / USB, odrás encender y apagar un Led, recibir mensajes de textos o comandos desde Arduino.

    Ver tutorial.
    http://www.slideshare.net/Metaconta2/interfaz-java-y-arduino

    Saludos.

    ResponderEliminar
  44. Hola amigos, me han parecido muy interesantes todos sus aportes... soy nuevo en esto y quisiera saber como poder enviar un numero por ejemplo 12,3 desde java hacia el arduino y que este lo pueda intepretar tal como se le he enviado y que me permita asignarlo a una variable en el arduino por supuesto. muchas gracias. si alguien me pudiera colaborar mi correo es dantejbm@hotmail.es

    ResponderEliminar
    Respuestas
    1. Hola:

      Aquí te lo explica.
      http://www.slideshare.net/Metaconta2/interfaz-java-y-arduino

      Saludos.

      Eliminar

Locations of visitors to this page