Entrada y Salida en Python

En general, los programas de computadora reciben una entrada de datos que procesan de alguna forma y el resultado es una salida de datos. La entrada de datos en Python puede ser desde el teclado, lo que por omisión es la entrada estándar. La salida de datos puede ser en la pantalla de la computadora o terminal que se está usando para conectarse a la computadora que ejecuta Python, y a esta se le llama salida estándar.

El siguiente programa es un simple ejemplo de entrada y salida en Python:

nombre = input("Como te llamas? ")
print("Hola " + nombre)

La primera línea usa la función input para recibir entrada de datos desde la entrada estándar (el teclado por omisión) y la segunda línea imprime el dato en la salida estándar (la pantalla por omisión). Si el programa se llama hola.py y se ejecuta en una ventana de símbolo de sistema se vería lo siguiente:

D:\Python>python hola.py
Como te llamas? Julio
Hola Julio
D:\Python>

En la primera línea se hace la llamada al intérprete Python pasándole como argumento el programa hola.py de nuestro ejemplo. En la segunda línea, se muestra la ejecución de la función input, que muestra el texto Como te llamas? y espera a que el usuario escriba un nombre y oprima la tecla Intro. Después de esto se ejecuta la función print mostrando el texto Hola junto con el nombre escrito por el usuario.

Introducción a la programación con Python

En Robótica Sandria presentamos este breve tutorial Introducción a la programación con Python, para las personas interesadas en aprender este poderoso lenguaje de programación. Está basado en parte en The Python Tutorial de la versión 3.7.1, disponible en noviembre de 2018.

Python es un lenguaje de programación poderoso y fácil de aprender. Tiene eficientes estructuras de datos de alto nivel y un simple pero efectivo enfoque de programación orientada a objetos.

Python tiene un intérprete, esto quiere decir que cada instrucción que se escribe en modo interactivo o se lee de un archivo de programa, es convertida a lenguaje máquina y ejecutada.

Controlar motor CD con Python en Raspberry Pi y módulo Puente H

En este artículo vemos cómo se puede controlar un motor de corriente directa (CD) con el lenguaje de programación Python en una Raspberry Pi (1 a 3) a través de un módulo Puente H.

Material

1 Raspberry Pi 1, 2 ó 3.
1 Módulo Puente H Dual L293D.
1 Motor CD.
1 Fuente de energía de 6V para el módulo Puente H.
1 Fuente de energía para la Raspberry Pi.
Cables de conexión.

Raspberry Pi 3B

Para este artículo se usó la tarjeta Raspberry Pi 3 modelo B, aunque se puede usar también lo modelos 1 ó 2.

Módulo Puente H dual L293D

El módulo Puente H dual usado tiene el circuito integrado L293D y permite controlar dos motores en ambas direcciones.

Conexiones

En la siguiente figura se muestran las conexiones hechas usando solamente una fuente de poder, que alimenta primera el módulo Puente H y éste a su vez proporciona 5V a la tarjeta Raspberry Pi.

Programa

El programa está escrito en Python.


# Programa: motor.py
# Autor: Julio Sandria - Diciembre 2017
# Mueve un motor CD a traves de un modulo puente H

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

GPIO.setup(8, GPIO.OUT)
GPIO.setup(10, GPIO.OUT)

for i in range(5):
   # Gira el motor en un sentido durante 3 segundos
   print "Girando motor en un sentido"
   GPIO.output(8, GPIO.HIGH)
   GPIO.output(10, GPIO.LOW)
   time.sleep(3)

  # Gira el motor en el otro sentido durante 3 segundos
   print "Girando motor en sentido contrario"
   GPIO.output(8, GPIO.LOW)
   GPIO.output(10, GPIO.HIGH)
   time.sleep(3)

GPIO.cleanup()

 

Conectar dos Lego Mindstorms EV3 en modo Daisy-Chain

En este artículo se explica cómo conectar dos bloques inteligentes Lego Mindstorms EV3 en cadena (Modo Daisy-Chain), lo cual permite desde un bloque EV3 monitorear sensores y controlar motores de otros tres bloques EV3. Con un sencillo programa se muestra cómo desde el primer bloque EV3 se mide proximidad con un sensor infrarrojo conectado al segundo bloque EV3, y al presionar un sensor de contacto conectado al primer bloque, se acciona un motor mediano conectado al segundo bloque. Todo esto con un único programa cargado en el primer bloque EV3.

Introducción

El software Lego Mindstorms EV3 (Home o Education) permite hacer programas que manipulen hasta cuatro bloques EV3 conectados en cadena, activando el Modo Daisy-Chain que está en Propiedades del Proyecto.

Conexión en cadena. En este modo de conexión cada dispositivo se conecta al anterior y al posterior geográficamente, formando una cadena. A este modo de organización se le conoce también como daisy-chain (cadena margarita) [1].

Con esto es posible hacer un sistema robótico con cuatro Lego Mindstorms EV3 usando hasta 16 sensores y 16 motores.

Material

2 Bloques inteligentes Lego Mindstorms EV3.
2 Cables USB para EV3.
1 Sensor de contacto EV3.
1 Sensor infrarrojo EV3.
1 Motor mediano EV3.
1 Computadora con software Lego Mindstorms EV3 instalado.

Conexiones

Para usar el programa que se muestra posteriormente, se colocaron los dos bloques EV3, sensores y motor como se ilustra en la fotogravía siguiente:

Bloque 1 (EV3 de la izquierda)

  • Puerto mini USB (lado superior) a PC.
  • Puerto USB (lado izquierdo) al mini USB del Bloque 2.
  • Puerto de entrada 1 al sensor de contacto.

Bloque 2 (EV3 de la derecha)

  • Puerto mini USB (lado superior) al USB del Bloque 1.
  • Puerto de entrada 4 al sensor infrarrojo.
  • Puerto de salida A al motor mediano.

Programa

Asegúrate de tener encendidos ambos bloques EV3, el Bloque 1 (izquierdo) conectado a la computadora, los sensores y motor conectados a los bloques EV3 como se indica en el punto Conexiones.

Inicia el software Lego Mindstorms EV3 (Home o Education). Crea un nuevo proyecto, el cual puedes llamar Conectar 2 EV3. Abre la pestaña Propiedades el proyecto y haz clic en la casilla de verificación Modo Daisy-Chain.

Regresa a la pestaña Program, y agrega los bloques de programación como se muestra en la imagen siguiente.

Observa que en la esquina inferior derecha, al hacer clic en el icono Vista del Puerto , se puede seleccionar de qué Bloque EV3 se desean ver los puertos. En la imagen siguiente está seleccionada la pestaña Capa del bloque 2, mostrando lo que tiene conectado el Bloque 2, un motor mediano en el Puerto A y un sensor infrarrojo en el Puerto 4.

El siguiente pseudocódigo explica lo que hace el programa:

Repetir siempre (Bucle):

Si el sensor de contacto (Bloque 1, Puerto 1) es presionado:

Muestra en la pantalla la imagen Touch sensor.
Reproduce el sonido Activate.
Gira el motor mediano (Bloque 2, Puerto A) una rotación.

Si no

Lee proximidad del sensor infrarrojo (Bloque 2, Puerto 4).
Muestra en la pantalla el valor de proximidad.
Hace una pausa de 0.2 segundos.

Fin Si

Fin Repetir

El programa se ejecuta en el Bloque 1, por lo tanto, todos los bloque de programación se ejecutan en el Bloque 1, y solamente los bloques de programación en los que se puede especificar una tarea sobre un Bloque EV3 en particular, tienen un campo llamado Número de capa, el cual se refiere al número de Bloque EV3 conectado en cadena.

A continuación se describe cómo están configurados los bloques de programación que permiten especificar un Bloque EV3 en particular.

Interruptor. En este bloque se tienen que configurar las opciones como se muestra en la imagen siguiente.

Motor mediano. En este bloque se tienen que configurar las opciones como se muestra en la imagen siguiente.

Sensor infrarrojo. En este bloque se tienen que configurar las opciones como se muestra en la imagen siguiente.

Ejecutar programa

Primero, enciende ambos bloques EV3. Conecta el Bloque 1 (EV3 de la izquierda) a la computadora y descarga el programa al EV3.

Una vez terminada la descarga del programa en el Bloque 1, ejecuta el programa. Acerca algo al sensor infrarrojo y observa cómo cambia el número en la pantalla del Bloque 1. Oprime el sensor de contacto y observa la imagen de la pantalla del Bloque 1, escucha el sonido que reproduce y observa que el motor mediano gira una rotación.

En el Bloque 2 (EV3 de la derecha) no es necesario cargar algo en particular, solamente debe estar encendido para que el Bloque 1 opere el sensor y motor conectados en él.

Dónde comprar

Si deseas adquirir un paquete completo Lego Mindstorms EV3 o solamente el bloque inteligente EV3, o algún sensor o motor, puedes buscar con nuestro patrocinador RobotSA.

Referencias

[1] Sanchís, Enrique (2002). Sistemas electrónicos digitales: Fundamentos y diseño de aplicaciones. Universitat de València. Pag. 33

Crea tu primera aplicación Android con App Inventor

El interés por crear esta guía de programación, nació por la necesidad de documentar parte del trabajo que se hace en el Instituto de Robótica de Xalapa A.C. (en Xalapa, Veracruz, México), en los cursos y talleres de robótica para niños, jóvenes y adultos. Y para ofrecer una guía en español para nuestras nuevas generaciones de niños y jóvenes ávidos por aprender cosas nuevas.

Este documento está dirigido a las personas que quieren aprender a crear aplicaciones para dispositivos móviles, ya sea teléfonos celulares o tabletas, con el sistema operativo Android. Se usa el ambiente de programación visual MIT App Inventor, que es muy fácil de usar y está disponible en línea sin costo alguno. Se ejemplifica el uso de App Inventor para crear una sencilla aplicación que mostrará en la pantalla del móvil la frase ¡Hola Mundo!, con la cual se empieza en muchos cursos de programación de computadoras, en diversos lenguajes de programación, especialmente el lenguaje C.

Technical Report · Sep 2017
DOI: 10.13140/RG.2.2.30688.99841
PDF disponible en: https://www.researchgate.net/publication/320014500

Robot Sanduino controlado via Bluetooth con Android

Robot Sanduino A01 con Bluetooth

En esta entrada mostramos como conectar un robot Sanduino A01 (basado en Arduino UNO) con módulo bluetooth a un teléfono Android, utilizando una aplicación creada por nosotros mismos.

Para esto necesitaremos el programa MIT App Inventor 2

DescargaAplicación en Linea

Y la libreria SoftwareSerial para Arduino

SoftwareSerialLibrary

Conexión del módulo Bluetooth a la placa Arduino


#include <SoftwareSerial.h>

int estado=0;
int multi=0;
#define RxD 10
#define TxD 11
SoftwareSerial BTSerial(RxD, TxD);
  

void setup(){
  Serial.begin(9600);
  BTSerial.flush();
  delay(500);
  BTSerial.begin(9600);
  //Insertar aquí
}

void loop(){
  if(BTSerial.available()>0){
    estado = BTSerial.read();
    Serial.write(estado);
    Serial.print("\r\n");
    //Insertar aquí
  }
}

Para controlar el robot Sanduino


#include <SoftwareSerial.h>

int tRetrocede = 500;
int tAvanza = 50;
int tAlto = 40;
int tGiro = 70;

int estado=0;
int multi=0;
#define RxD 10
#define TxD 11
SoftwareSerial BTSerial(RxD, TxD);
  
void setup(){
  Serial.begin(9600);
     BTSerial.flush();
  delay(500);
  BTSerial.begin(9600);

  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  
}

void loop(){
  if(BTSerial.available()>0){
    estado = BTSerial.read();
    Serial.write(estado);
    Serial.print("\r\n");
    digitalWrite(9,HIGH);
  }
  if (estado == '1') {
    avanza(100);
    Serial.print("Avanza");
  }
  if (estado == '2') {
    derecha(100);
    Serial.print("Derecha");
  }
  if(estado == '3') {
    retrocede(100);
    Serial.print("Retrocede");
  }
  if(estado == '4') {
    izquierda(100);
    Serial.print("Izquierda");
  }
  if(estado == '5') {
    alto(0);
    Serial.print("Alto");
  }
}

void alto(int ms) {
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
  delay(ms);
}

void derecha (int ms) {
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  delay(ms);
}
void izquierda (int ms) {
  digitalWrite (6, LOW);
  digitalWrite (7, HIGH);
  digitalWrite (8, HIGH);
  digitalWrite (9, LOW);
  delay (ms);
}
void avanza (int ms) {
  digitalWrite (6, HIGH);
  digitalWrite (7, LOW);
  digitalWrite (8, HIGH);
  digitalWrite (9, LOW);
  delay (ms);
}

void retrocede (int ms) {
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  delay(ms);
}

Las funciones para mover el robot son las mismas funciones básicas describas en la entrada Robot Sanduino Control con funciones.

Lego Mindstorms EV3 código fuente disponible

Xander Soldaat publicó en 2013 un artículo en su blog botbench.com, dando a conocer que el código fuente del Lego Mindstorms EV3 está disponible para uso personal. Ver Enlace.

El código fuente está cargado en el espacio Mindboards Github: [LINK]. De donde se puede clonar el repositorio.

Entre los requisitos que Xander menciona para modificar el código fuente están:

  • Una máquina con Linux (puede ser virtual).
  • Eclipse.
  • Java JRE.
  • Code Sourcery Lite para ARM.
  • Un adaptador USB a puerto serial.
  • Una tarjeta SD.
  • Alicates de punta plana.
  • Un adaptador Netgear WNA1100 WiFi.

Si te gustan los robots Lego Mindstorms EV3, los retos de programación y te gustaría entra al mundo del desarrollo de código abierto (open source), este es un proyecto donde podrás aprender mucho e incluso hacer tus propias aportaciones.

Esta es la página de Xander: http://botbench.com/blog/2013/07/31/lego-mindstorms-ev3-source-code-available/

Instalación de Java Development Kit en Windows XP/Vista/7

El objetivo de esta guía es mostrar al programador nuevo en el lenguaje Java cómo instalar y poner a punto el Java Development Kit Standard Edition en Windows XP/Vista/7, con la finalidad de poder compilar y ejecutar aplicaciones de consola (programas que corren en una ventana de símbolo de sistema).

public class Hola {
  public static void main(String[] args) {
    System.out.println("Hola mundo");
  }
}

Presentation February 2010
DOI: 10.13140/RG.2.2.35144.32004
Disponible en https://www.researchgate.net/publication/317275548

Instalación de WampServer 3

Esta presentación muestra la instalación de WampServer 3, el cual es un ambiente de desarrollo para Windows que permite crear aplicaciones web con Apache2, PHP y bases de datos MySQL. También se muestra con ejemplos el uso de WampServer. Este material es parte de los cursos “Programación Web” y “Diseño de Bases de Datos Relacionales” que el autor ha impartido a estudiantes de nivel licenciatura y maestría en varias ocasiones.

Presentation · October 2016
DOI: 10.13140/RG.2.2.30976.23042
La intención de esta entrada es tener un punto de referencia sobre la instalación de Apache, MySQL y PHP en Windows, lo que nos permitirá tener un ambiente de desarrollo de aplicaciones web y de bases de datos para proyectos y aplicaciones en robótica e internet de las cosas, entre otras.

Sensor de luz con Arduino UNO

En esta página se muestra el uso del sensor de luz (Light Sensor Brick) con Arduino UNO. Este sensor puede funcionar como sensor analógico o sensor digital. Aquí se ejemplifica el uso analógico, con valores entre 0 y 1023.

Material usadoLightSensorBrick

1 Arduino UNO
1 Sensor de luz (Ligth Sensor Brick)
3 Cables hembra-macho

El sensor tiene una fotorresistencia, la cual se usa para detectar la cantidad de luz en el ambiente. También tiene un interruptor, con el cual se configura el sensor para enviar valores digitales o analógicos. Para el programa siguiente debe estar en la posición A (analógico).

Programa LightSensorBrick.ino

/* LightSensorBrick.ino
* Julio C. Sandria Reynoso - 24-Mayo-2017
* Este programa monitorea un sensor de luz del tipo
* Light Sensor Brick
*/

int lightValue = 0; // Muy iluminado 0..1023 Muy obscuro
 
void setup() {
  pinMode(A0, INPUT);
  Serial.begin(9600);
  Serial.println("Iniciando programa...");
  Serial.println("Valor\tSituacion");
}

void loop() {
  lightValue = analogRead(A0);
  Serial.print(lightValue);
  Serial.print("\t");
  if( lightValue < 205 )
    Serial.println("Muy iluminado");
  else if( lightValue < 410 )
    Serial.println("Iluminado");
  else if( lightValue < 615 )
    Serial.println("Sombreado");
  else if( lightValue < 820 )
    Serial.println("Obscuro");
  else
    Serial.println("Muy obscuro");
  delay(1000);
}