comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Python y Arduino

  • 3 Respuestas
  • 4096 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5409
  • Actividad:
    20%
  • Reputación 33
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Diciembre 29, 2013, 06:52:36 pm »

Introducción

Arduino es una plataforma que facilita el desarrollo de proyectos de microcontroladores, que consta de dos partes: hardware y software. El hardware es una placa tan pequeña que cabe en la palma de la mano, está basada en la familia de microprocesadores AVR y tiene todas las especificaciones electrónicas abiertas. El software, por otra parte, es una IDE en conjunto con las librerías que se utilizan para usar la placa (ambas son libres).

Utilizando el Arduino es posible desarrollar proyectos de robótica (incluídos software, electrónica y mecánica) de una forma sencilla y rápida. Además, cómo el proyecto Arduino es abierto, hay muchos módulos de hardware y librerías disponibles, eso hace que el trabajo que tenemos que desarrollar para un proyecto es mayormente recopilar los módulos necesarios y hacerlos trabajar juntos.


La placa tiene un microprocesador de 16MHz, dispone de 32kB de memoria para almacenar el software de control y 2kB de RAM. Parece poco, pero es más que sufiente para el control de los pequeños dispositivos electrónicos, lectura de sensores y toma de decisiones.

Después de esta introducción nos ponemos manos a la obra.

Hello world

Vamos a empezar por mostrar un ejemplo simple de código para Arduino: encendido y apagado de un LED (esto se conoce como el "hola mundo" de la informática embebida) - el lenguaje que usamos es un subconjunto de C++:

Código: Python
  1. #define LED 13
  2.  
  3. void setup() {
  4.     pinMode(LED, OUTPUT); //configures digital port 13 as output
  5.     //in the Arduino board we have a LED connected to digital port 13
  6. }
  7.  
  8. void loop() {
  9.     digitalWrite(LED, HIGH); //turns LED ON
  10.     delay(1000); //wait for 1000ms = 1s
  11.     digitalWrite(LED, LOW); //turns LED OFF
  12.     delay(1000); //wait for 1000ms = 1s
  13. }

Después de introducir el código, simplemente haga clic en el botón "Upload" en el IDE, de esta manera son compilados y enviados a través de USB a la placa. Después de este proceso, el software ya se está ejecutando en la placa, y ya no necesitaremos la pc para que funcione.


Las funciones utilizadas en este código (pinMode, digitalWrite y delay) ya están definidos en la librería estándar de Arduino (al igual que muchas otras) y por lo tanto no hay necesidad de importación, el IDE ya lo hace automáticamente (por esto el "lenguaje" se llama un subconjunto de C++).

El código anterior se puede traducir como:

        Configurar el puerto 13 como puerto de salida digital, es decir, que control de tensión (0V o 5V) se realiza mediante el software
        Coloque en el puerto 13 5V (el valor de la función HIGH en digitalWrite significa 5V)
        Esperar a 1000ms (usando la función de delay)
        Coloque 0V ('LOW') en el puerto 13
        Espere 1000ms más.

En este ejemplo se utiliza el LED ya instalado en el puerto 13 de la placa Arduino, pero podemos usar un LED externo, o de cualquier otro circuito que "entienda" las señales de salida de la Arduino (0V y 5V), por lo tanto no sólo puede controlarse LEDs, sino también: motores, drivers de relays para el control de electrodomésticos y muchas otras cosas.

Todo lo que está en la función loop se repite continuamente (hasta desconectar el Arduino de la energía), por lo que el LED se enciende y apaga continuamente (1 segundo encedido y 1 segundo apagado).

Comunicación con Python

El primer ejemplo muestra una aplicación stand alone Arduino, es decir, software que se ejecuta en el Arduino y que no necesita una computadora para trabajar. Pero podemos crear una comunicación entre el dispositivo y la computadora, entonces un software en la PC (escrito en Python, por ejemplo) puede tomar decisiones más elaboradas, consultar bases de datos, sitios web y otros recursos y después, enviar un comando al dispositivo. Para esto utilizamos la librería Serial:

Código: Python
  1. #define LED 13
  2.  
  3. void setup() {
  4.     pinMode(LED, OUTPUT);
  5.     Serial.begin(9600);
  6. }
  7.  
  8. void loop() {
  9.     if (Serial.available()) {
  10.         char c = Serial.read();
  11.         if (c == 'H') {
  12.             digitalWrite(LED, HIGH);
  13.         }
  14.         else if (c == 'L') {
  15.             digitalWrite(LED, LOW);
  16.         }
  17.     }
  18. }

Con el código anterior, el Arduino enciende el LED cuando se recibe el carácter H a través de su puerto serie y apaga el LED cuando recibe L.

Cabe aclarar que Arduino tiene un convertidor USB-serie, por lo que podemos enviar a estos carácter a través de USB, usando el software en Python; y es así como tenemos un código en Python para controlar Arduino.

Antes de escribir el código en Python, es necesario instalar la librería PySerial [1]. Si usas Debian o Ubuntu, podrías usar el siguiente comando:

Código: Bash
  1. sudo aptitude install python-serial

Una vez instalada la biblioteca, vamos a crear un código de Python para controlar el LED:

Código: Python
  1.  #!/usr/bin/env python
  2.  
  3.  import serial
  4.  import time
  5.  
  6.  # /dev/ttyACM0 = Arduino Uno on Linux
  7.  # /dev/ttyUSB0 = Arduino Duemilanove on Linux
  8.  
  9.  arduino = serial.Serial('/dev/ttyACM0', 9600)
  10.  time.sleep(2) # waiting the initialization...
  11.  
  12.  arduino.write('H') # turns LED ON
  13.  time.sleep(1) # waits for 1 second
  14.  
  15.  arduino.write('L') # turns LED OFF
  16.  time.sleep(1) # waits for 1 s   :height: 100px
  17. :width: 200 pxecond
  18.  
  19.  arduino.close() #say goodbye to Arduino

¡Listo! Ahora podemos controlar el LED de la placa Arduino con nuestro software en Python. Tambien, como ya se dijo, podemos basar la decisión (de activar o desactivar) en informaciónes externas como contenido de una tabla en una base de datos o los datos devueltos de una API de algún software o sitio web (como Twitter, Facebook, etc.).

En el ejemplo anterior, se utiliza un cable USB para la comunicación entre Python y el software de Arduino; pero podríamos haber conectado en el a la placa un shield, que es una componente que le da una nueva función como puede ser la comunicación vía Ethernet, Bluetooth o el control de un motor.



Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Diciembre 31, 2013, 05:34:07 am »
Como siempre, python superando todo tipo de límites jeje.

Muy buena info!

Saludos!
WhiZ

 


Desconectado christianalatorre

  • *
  • Underc0der
  • Mensajes: 2
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #2 en: Junio 09, 2015, 04:21:09 pm »
HOLA !!!! :D

disculpa como podria hacer todo eso pero a través de un interfaz web ???
enviando y recibiendo información????

Desconectado Cr4id3r

  • *
  • Underc0der
  • Mensajes: 9
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #3 en: Junio 10, 2015, 10:45:20 am »
Buenas christianalatorre,
Django te puede ayudar en este sentido ya estuve estudiando sobre este tema y con django implemente una interfaz web con controladores electrónicos, cualquier duda no me importaría ayudarte ;)
Vive solo por lo que estas dispuesto a morir

 

¿Te gustó el post? COMPARTILO!



Arduino + Snap4Arduino "Hola Mundo"

Iniciado por Riojas

Respuestas: 1
Vistas: 1862
Último mensaje Febrero 19, 2017, 09:31:50 pm
por rreedd
Arduino + Snap4Arduino "Juego PONG" [Parte2]

Iniciado por Riojas

Respuestas: 0
Vistas: 1116
Último mensaje Marzo 03, 2017, 07:07:08 pm
por Riojas
Arduino + Snap4Arduino "Juego PONG" [Parte1]

Iniciado por Riojas

Respuestas: 0
Vistas: 1355
Último mensaje Febrero 24, 2017, 04:59:07 pm
por Riojas
Arduino + Snap4Arduino "Juego PONG" [Final]

Iniciado por Riojas

Respuestas: 0
Vistas: 909
Último mensaje Marzo 15, 2017, 02:33:08 pm
por Riojas
Entornos Gráficos para la Programación: Plataforma Open Hardware Arduino

Iniciado por ANTRAX

Respuestas: 0
Vistas: 2126
Último mensaje Junio 30, 2012, 06:47:30 pm
por ANTRAX