Programación en lenguaje C – Hola mundo!

El siguiente programa, es un ejemplo muy sencillo de programa en lenguaje C.

/* Programa: hola.c
   Autor: Julio Sandria
   Ejemplo Hola mundo!
*/

#include <stdio.h>

void main()
{
    printf("Hola mundo!");
}

Para ejecutar el programa anterior, abre Code::Blocks, selecciona la opción File, después New, después Empty File. Esto creará un archivo vacío. Escribe o pega el código anterior en la sección de programación, como se ilustra en la imagen siguiente.

CodeBlocks13.12-hola

Guarda el programa con el nombre hola.c (File | Save File). Al hacer esto, Code::Blocks, reconoce el códico como un programa en C y lo muestra en colores.

Ejecuta el programa (Build | Run). Esto abrirá una terminal o ventana de símbolo de sistema (en Windows) como la siguiente.

Ejecucion-hola

Observa que en la primera línea de la parte interior de la ventana está la frase Hola mundo!. Esto es lo que hace el programa, imprimir en la salida estándar (una terminal o ventana de comandos) dicho texto.

Las primeras cuatro líneas del programa son comentarios, que no tienen ningún efecto en el programa, son para que nosotros podamos poner algún texto. Los comentarios con muchas líneas empiezan con los caracteres /* y terminan con los caracteres */.

La línea 6 del programa contiene la instrucción include:

#include <stdio.h>

Esta línea le indica al compilador que en esa posición incluya una librería llamada stdio.h, la cual contiene la definición de instrucciones como printf que se usa a continuación.

Todo programa en C tiene una función main(), que es el punto inicial de ejecución de un programa.

La línea 8, void main() indica que allí inicia la función principal (main). Todo el contenido de la función está entre los símbolos { y }.

void main()
{
    printf("Hola mundo!");
}

La función main está definida únicamente por una línea, que tiene la función printf(«Hola mundo!»), la cual lo único que hace es imprimir la frase Hola mundo!, en la salida estándar de la computadora, la cual por omisión una ventana donde se ejecuta el programa (terminal o símbolo de sistema).

Blink – Encender y Apagar un LED con Arduino

¿Cómo controlar un LED con Arduino?

Arduino UNO y otros modelos de tarjetas Arduino, tienen incorporado un LED conectado al PIN 13, como se ilustra en la siguiente imagen, donde el LED está señalado en rojo.

arduinounor3frontsupledpin13

El programa siguiente hace que Arduino encienda y apague el LED conectado al PIN 13.

/* Programa: Blink.ino
   Modificado por: Julio Sandria
   Enciende un LED por dos segundos, y después
   lo apaga un segundo, repite esto siempre hasta
   que se apague Arduino
*/
void setup() {
  // inicializa el pin digital 13 como una salida
  // El pin 13 tiene un LED conectado en la
  // mayoria de las tarjetas Arduino
  pinMode(13,OUTPUT);
}
void loop() {
  // loop = bucle, ciclo
  // loop() se repite siempre hasta que se apague Arduino
  digitalWrite(13,HIGH);  // Enciende el LED
  delay(2000);            // Espera 2000 milisegundos (2 segundos)
  digitalWrite(13,LOW);   // Apaga el LED
  delay(1000);            // Espera 1 segundo
}

Este es solo un programa de ejemplo. Para controlar LEDs externos a Arduino consulta nuestra página: Arduino Blink Monitor Ejemplo.

Robot Sanduino A01 – Armado de chasis

El Robot Sanduino A01 consta de dos bases de acrílico. El primer paso es atornillar la base superior sobre la base inferior. Debe quedar como se ilustra en la foto siguiente.

Paso 1. Atornillar base superior sobre base inferior.Sanduino-A01-Chasis-Completo-500x500

Paso 2: Colocar soportes para motores e interruptor.

Sanduino-A01-Chasis-P2-1

Paso 3: Colocar motores, entre los soportes para motor.Sanduino-A01-Chasis-P2-2

Paso 4: Atornillar motores.Sanduino-A01-Chasis-P2-3

Paso 5: Colocar y atornillar rueda loca.
Sanduino-A01-Chasis-P2-5NOTA: El portapilas no se atornilla al chasis.

 

¡Hola Roboticistas!

¡Bienvenido al Sitio Web Robótica Sandria!

Este sitio web está dedicado a todos los chicos (niños y jóvenes) interesados en la robótica y que han tomado o están tomando alguno de nuestros cursos de robótica.

Los adultos universitarios, maestros o aficionados a la robótica que encuentren algo interesante en este sitio web también son bienvenidos, y espero que dejen alguna opinión, comentario o sugerencia.

Aquí podrán encontrar instrucciones de armado de robots, ejemplos de programas y guías técnicas de uso de hardware y software que usamos en robótica y áreas relacionadas.

Atentamente,

Ing. Julio César Sandria Reynoso
Mentor del equipo de robótica Galácticos
Superteam World Champions en RoboCup 2014, Brasil
Primer Lugar en el Torneo Mexicano de Robótica 2014
Segundo Lugar en el Torneo Mexicano de Robótica 2015
Tercer Lugar en el Abierto de Robótica de Portugal 2016

Galacticos-Superteam-World-Champions-Robocup-2014_med

Riego automatizado de plantas con Arduino

El cuidado de las plantas que tenemos en el jardín o macetas en nuestra casa, escuela u oficina, es muchas veces una actividad relajante y que nos da un rato de distracción de nuestras actividades rutinarias. Pero esto ya no es relajante cuando no tenemos el “don” o el tiempo para cuidarlas y vemos cómo se van muriendo poco a poco las pobres plantitas por falta o exceso de agua, luz o temperatura.

De modo que a quienes nos gusta hacer uso de la tecnología, generalmente aprovechamos cuanta ocasión se nos presenta para hacerlo…

Puedes leer más información de este proyecto en la página siguiente:

Cómo mimar tus plantas con tecnología digital

Programación de Robots Lego NXT con Java

En esta presentación se proporciona al lector los conocimientos básicos para programar robots Lego Mindstorms NXT usando el lenguaje de programación Java. Se construye un robot móvil con los motores y sensores del paquete NXT y se usan algunos métodos básicos Java para el NXT.

Para los ejemplos de programación en Java se usa el robot NXT TaskBot, cuyo instructivo de armado se puede descargar de la siguiente dirección:

Clase nxbot

import lejos.nxt.*;
/**
* Programación de Robots Lego NXT con Java (Noviembre-2009)
* @author Julio C. Sandria Reynoso
*/
public class nxbot {
  public static void avanza(int ms) throws InterruptedException {
    Motor.A.forward();
    Motor.C.forward();
    Thread.sleep(ms); /* espera ms milisegundos */
  }
  public static void retrocede(int ms) throws InterruptedException {
    Motor.A.backward();
    Motor.C.backward();
    Thread.sleep(ms);
  }
  public static void alto() {
    Motor.A.stop();
    Motor.C.stop();
  }
}

Presentation · October 2010
DOI: 10.13140/RG.2.2.21919.15521
Disponible en https://www.researchgate.net/publication/317300574.

Para profundizar más en la programación orientada a objetos, clases, interfaces, herencia, etc., ver la siguiente entrada:

Seguridad en Bases de datos: 1. Conceptos de Bases de Datos

Esta presentación es parte del curso Seguridad en Bases de Datos, tema 1: Conceptos de Bases de Datos, impartido por el autor a estudiantes de la Especialidad en Bases de Datos de la Universidad Autónoma de Veracruz Villa Rica.

Objetivo

  • Descubrir cómo pueden tener acceso los hackers mediante:
    • la explotación del desbordamiento de búfer
    • la escalada de privilegios a través de SQL
    • el abuso de procedimientos almacenados o triggers
    • la inyección SQL
  • Reconocer vulnerabilidades peculiares a algunas bases de datos
    • Oracle, DB2, Informix, Sybase ASE, MySQL, SQL Server, PostgreSQL
  • Encontrar qué es lo que los atacantes ya saben
Presentation · June 2010
DOI: 10.13140/RG.2.2.10033.38242
Disponible en https://www.researchgate.net/publication/316134421.

Programación de Robots Lego Mindstorms NXT con Java. Tema 3 Java para NXT

Esta presentación, corresponde a uno de los temas tratados en el Curso de Robótica a nivel licenciatura impartido por el autor en el Tecnológico de Monterrey Campus Zacatecas.

Este tema enfatiza la programación orientada a objetos con Java para los robots Lego Mindstorms NXT. Se ilustra la creación de clases, objetos e interfaces. Se ejemplifica la herencia, el uso de métodos, tipos de datos y arreglos en Java, así como el control de flujo de programas y el manejo de excepciones. Todo esto aplicado en un robot móvil Lego.

Clase CarBot

importlejos.nxt.*;
public class CarBotextends Thread implements ManioBot {
  public void avanza() {
    Motor.B.forward(); Motor.C.backward(); pausa(500);
  }
  public void derecha() {
    Motor.B.backward(); Motor.C.backward(); pausa(500);
  }
  public void frena() {
    Motor.B.stop(); Motor.C.stop();
  }
  private void pausa(intmSegundos) {
    try {
      Thread.sleep(mSegundos);
    } catch(InterruptedExceptione) {}
  }
}

Presentation · February 2010
DOI: 10.13140/RG.2.2.24016.30721
Disponible en https://www.researchgate.net/publication/317302716.

Para detalles básicos sobre los robots Lego Mindstorms NXT y la instalación del software necesario para programarlos en Java, ver la siguiente entrada:

Sistema de control de una cámara de video a través de Internet

Se presenta un sistema para controlar remotamente una cámara de video a través de Internet. Se diseñó y ensambló un circuito para controlar dos motores de corriente directa que mueven la cámara. El circuito se conecta al puerto paralelo de la computadora. Se programó en Java una aplicación Servidor que transmite video a través de Internet, recibe señales también a través de Internet y mueve la cámara por medio del puerto paralelo. También se programó un applet Java que se ejecuta dentro de un navegador de Internet. En el applet se puede ver en tiempo real el video que transmite la aplicación Servidor y se puede mover remotamente la cámara.

Technical Report · December 2007
DOI: 10.13140/RG.2.2.27467.39206
Disponible en https://www.researchgate.net/publication/310674294

Prototipo de robot Lego futbolista programado en Java

En este documento se presenta un prototipo de robot futbolista construido con el paquete Lego Mindstirms Robotics Invention System 2.0 y programado en Java usando lejos. En este artículo se presenta una introducción a los robots futbolistas y la construcción inicial y programación básica del robot Lego futbolista (RoLeF).

Technical Report · February 2007
DOI: 10.13140/RG.2.2.10156.67208