Author Archives: José Núñez

Ya Viene el Arduino Day (GENUINO DAY para ser exactos)

21 Feb , 2016,
José Núñez
No Comments

Ya tenemos fechas en Costa Rica para el GENUINO Day de este año.

Pueden acceder al comunicado oficial aca.

Agenda aca

Será el próximo Sábado 2 de Abril de 2016, está organizado por la Fundación Costa Rica para la Innovación; y se estará realizando en las instalaciones de la Ciudad de la Investigación de la UCR en San José, Costa Rica.

Para más información, y para afiliarse para dar Workshops, demos y demás sírvanse contactar a través de la página de Facebook Arduino y Makers Costa Rica

 

La Carrera Maker

Feb , 2016,
José Núñez
, , ,
No Comments

laser3_1700x900Recientemente tenía esta convesación con uno de mis compañeros de CostaRicaMakers.com. El ilustre Gerardo Mora.

Hablábamos de la dualidad o diversidad de destrezas que se presentan en el área Maker; principalmente con personas que saben tanto de software como de hardware.

De esta conversación puedo enumerar algunas de las áreas de conocimiento y de destreza que es importante explorar:

  1. Programación y Desarrollo de Software.

  2. Sistemas Operativos


  3. Hardware y Electrónica

  4. Prototipado e Impresión 3D

  5. Física y Química


  6. Documentación de Ideas, Proyectos y Procedimientos

  7. Diseño de Experiencias (User Experience)

  8. Gestión de Proyectos

  9. Desarrollo de Productos


  10. Comunicación Técnica para Audiencias no-técnicas

  11. Emprendimiento Externo (al público en general) e Interno (dentro de una empresa o corporación)

  12. Legislación Sobre Propiedad Intelectual

 

¿Conoces de más destrezas importantes para el área Maker? Compártelas con nosotros a través de los comentarios.

Maxsonar MB7076 – Sensor de Proximidad Ultrasonico Parte I

5 Ene , 2016,
José Núñez
, , , , , ,
No Comments

HRXL-WR Distance SensorEl sensor de Proximidad Ultrasonico Maxsonar MB7076 tiene varias ventajas.

  • Puede detectar objetos hasta 10 metros de distancia.
  • Soporta diferentes formatos de lectura: (RS232, Ancho de pulso y Voltage analógico)
  • Puede ser alimentado desde 3V hasta 5.5V
  • Para ser utilizado en exteriores.

Este sería la especificación de pines:

PIN 1: Permite seleccionar el modo de operación del pin 5. Si está abierto (desconectado) o en HIGH, el pin 5 entregará una señal serial RS232 (basada en 0V-VCC). Si está aterrizado (en 0V o LOW) el pin 5 mostrará un pulso.

PIN 2: Este pin transmite un pulso de ancho variable que representa el rango que se ha detectado. Para los modelos (MB7052, MB7060, MB7062, MB7066, MB7067, MB7068) utilice un factor de 58us por cada centímetro de distancia. Para la serie MB7070 (MB7070, MB7072, MB7076, MB7077, MB7078, MB7092)) este pin entrega una salida de tiempo real siempre-activa. La señal de salida en este pin es una representacion análoga del voltage de la onda acústica que se utiliza en la detección.

PIN 3 (AN): Este pin entrega un voltage análogo con un factor de escala de (Vcc/1024) por centímetro. Con una alimentación de 5V, entregaría 4.9mV por centímetro; mientras que una fuente de 3.3V entregaría 3.2mV/cm. Por limitaciones deHardware, la máxima distancia reportada por este medio es de ~700cm en 5V, y de 600cm en 3.3V. La salida es almacenada y representa la lectura más reciente. Para los sensores de 10 metros (MB7066, MB7076) el pin 3 entrega una salida análoga de voltage con un factor de escala de (Vcc/1024) por cada 2cm. Así una fuente de 5V entrgaría ~4.9mV/2cm y una fuente de 3.3V entregaría 3.2mV/2cm. El voltage análogo se define en incrementos de 2cm.

PIN 4 (RX): Este pin internamente está configurado para estar en 1 (HIGH). Si el pin 4 es dejado sin conexión o HIGH, el sensor medirá el rango de distancia de manera contínua. Si se pone el pin 4 en LOW, el sensor dejará de medir. Si se hace un pulso HIGH de al menos 20us se le estará instruyendo al sensor medir.

PIN 5 (TX): Cuando el pin 1 se deja abierto o en HIGH, el pin 5 entrega datos seriales asincrónicos en formato RS232, con la excepcion de que el voltaje será de 0 a VCC. La salida inicia con una “R” mayúscula seguido de los digitos que representan la distancia en centímetros (hasta un maximo de 765 o 1068 dependiendo del modelo) , seguido de un ASCII 13. Los parámetros de conexión serial son 9600 baudios, 8 bits, no paridad, y un bit de parada. Pese a que el voltaje de salida de 0V a VCC está fuera de la especificación de RS232, la mayoría de receptores RS232 son capaces de entender márgenes de 0V-VCC. Si fuera necesario tener voltajes estándar para RS232, se puede invertir la señal y conectar a un convertidor RS232 (como el MAX232. Cuando el pin 1 es conectado a LOW, el pin 5 envía un unico pulso que se puede utilizar para encadenamiento de bajo ruido sin datos seriales (sea lo que sea que eso significa)

PIN 6 (V+):  El voltaje de operación va de 3V a 5.5V. Con 3.3V el sensor tiene un drenaje de corriente de 2.1mA en promedio (50mA pico). En 5V la corriente drenada es de 3.4mA (100mA pico). La corriente pico ocurre al transmitir el pulso de sonido usando el sonar.

PIN 7 (GND): Conexión de retorno a tierra. El suministro de electricidad debe ser libre de ruido y libre de risado para una operación óptima.

maxonar pinout

En próximas entregas estaremos revisando cómo utilizar este junto con un Sparkfun Thing ES8266

Tomado de la especificación original en Inglés

 

Instalando LAMP y NodeJS en mi Raspberry PI B+ (1)

30 Oct , 2015,
José Núñez
, , , , , , ,
No Comments

Luego de intentar durante varias horas – infructuosamente – instalar nodejs en mi raspberrypi (con Raspbian) me di a la tarea de hacerlo desde cero.

LAMP

Decidí seguir este tutorial de wikihow en Inglés: http://www.wikihow.com/Make-a-Raspberry-Pi-Web-Server

Podeis encontrar una versión en español acá: http://es.wikihow.com/hacer-un-servidor-web-Raspberry-Pi

Dicho tutorial comienza por hacer una instalación fresca de Raspbian. Las instrucciones más recientes se encuentran acá en Inglés: https://www.raspberrypi.org/help/noobs-setup/

NODEJS

Sorprendentemente el siguiente enlace funciona a la perfeccion para instalar NodeJS

http://weworkweplay.com/play/raspberry-pi-nodejs/

Debo aclarar que a pesar de que el Pieter Beulque, autor del tutorial nos advierte en el paso 2 acerca de una falla en npm -v… parece que la versión más reciente de Raspbian ya lo resuelve; asi que npm -v funciona a la perfección.

PHPMYADMIN

Finalmente podeis seguir el tutorial de PHP My Admin en este enlace.

http://myshitblogging.blogspot.com/2013/09/how-to-install-phpmyadmin-on-raspberry.html

Listo! un WEB SERVER con capacidades NODEJS (incluso GIT) en tu Raspberry PI

 

Edison – Linux – Cómo restablecer la conexión de Red

1 Sep , 2015,
José Núñez
, , , , , ,
No Comments

En otra publicación veíamos que para reiniciar la conexión de red en GALILEO se usaba un comando de init.d

Para Edison es diferente. Dado que Edison no usa init.d, hay qu usar otro tipo de comando para reiniciar:

1. Reiniciar la red:
systemctl restart wpa_supplicant.service

2. Verificar el estado del servicio de red:
systemctl status wpa_supplicant.service

o tambien…

ping google.com

Cómo leer el contenido de un archivo a un String en un Sketch de Arduino

24 Abr , 2015,
José Núñez
, , , ,
No Comments

Un código muy sencillo que es realmente útil a la hora de almacenar valores en un archivo y leerlos luego.

A very simple piece of code that is really useful to read values stored in a file.

String readFileValue(){
  FILE *filePointer;
  filePointer = fopen("/myStoredData.txt","r");
  char fileContent[100];
  fgets (fileContent , 100, filePointer);
  Serial.println(fileContent);
  
  return fileContent;
}

#Howto read contents of a file into a String variable in an ARDUINO sketch

El peligro de la cultura Maker

18 Mar , 2015,
José Núñez
, , ,
No Comments

Más allá del Prototipo

Todos hemos visto de una u otra forma los beneficios de esa cultura que está permeando en nuestra sociedad; esa de hágalo usted mismo; esa de aprender algo, mejorar la técnica y compartir el conocimiento.

Resulta difícil imaginar que una cultura tal pueda tener algún peligro inherente para la sociedad. En realidad expongo aquí un peligro que la cultura Maker enfrenta en su naturaleza y que requiere de un cuidado importante ya que limita sus alcances de manera significativa.

En la cultura Maker las personas se explotan su curiosidad, analizan, prueban, aprenden, mejoran lo que existe, y comparten lo que aprendieron; es una cultura que acelera de manera vertiginosa la capacidad de prototipado de nuevas ideas; de nuevos productos. Sin embargo el gran peligro que enfrenta es el de quedarse allí precisamente; en el prototipo funcional, de conformarse una y otra vez con el nivel “instructable básico” y de no profundizar en ese gran paso que enriquece a la sociedad, el de crear nuevos productos, nuevas soluciones dirigidas a las personas que no son maker, que necesitan una solución completa que puedan consumir y utilizar tal cual.

Dentro de las destrezas clave para un maker podemos enumerar varias: autodidacta, curiosidad, documentación, solución de problemas, integración de tecnologías; pero una que normalmente pasa desapercibida es la que yo llamo “productivización”; es decir la capacidad de diseñar un producto repetible que se desempeñe de manera estable y satisfactoria en el campo; que se pueda consumir con un mínimo de instrucciones de uso.

Siendo la cultura maker empírica por su naturaleza, la profesionalización progresiva del maker es algo que requiere medular atención.

Destrezas y conocimientos en áreas como Administración de Proyectos, Ciclo de vida de Productos, Mercadeo, Emprendimiento e incluso Propiedad Intelectual se vuelven vitales para una cultura Maker que vaya más allá en la generación de riqueza de un país.

Sensor de Humedad DHT11 en un Intel Galileo

9 Mar , 2015,
José Núñez
, , , , , ,
one comments

IMG_20150309_183311~2

Conectar un sensor de humedad y temperatura a un Intel Galileo o Edison no es tan sencillo como uno quisiera; pero luego de preguntar en los foros adecuados, tampoco es difícil.

Aquí les comparto lo que aprendimos en el proceso (hasta hora)

  1. El DHT11 es un sensor sumamente barato y fácil de conseguir. Tiene una excelente precisión y es fácil de utilizar.
  2. Pudimos comprobar las instrucciones de DinoT_Intel en el foro, que funcionan en un Intel Galileo GEN 1
  3. Básicamente uno puede bajar los tres archivos (como lo tenemos en nuestro experimento más reciente en GITHUB) en una misma carpeta donde está el Sketch que y funciona correctamente. Tambien se puede crear una carpeta “DHT” en “~/Arduino_version/libraries/” y poner los dos archivos DHT.h y DHT.cpp ahi (pero necesitarás reiniciar ARDUINO IDE)
  4. Nuestras pruebas funcionaron en un Galileo GEN 1 a la perfección usando ARDUINO IDE versión [arduino-1.5.3-Intel.1.0.4] que se puede descargar aquí.
  5. IMPORTANTE: Utilizar 7ZIP para desempacar el achivo en c: … puede conseguirlo aquí.

Esta vez no logramos echarlo a andar en Intel Edison. Ya les contaremos si llegamos a ese punto.

Un agradecimiento especial a @spider_kenny por su contribución de conocimiento sobre tiempos determinísticos e interfases. Creo que será la base que usaremos para echarlo a andar en un Intel Edison.

Maker que se respeta…

Mar , 2015,
José Núñez
No Comments
  1. Aprende en línea y “on the fly”
  2. Cita la fuente
  3. Mejora las cosas
  4. Comparte lo que ha aprendido
  5. Innova a escala mundial

Yep. Es todo.

Llamadas dinámicas a LINUX desde ARDUINO IDE en un Intel Edison – Aprendizaje de 10 minutos

7 Mar , 2015,
José Núñez
, , , , , , , , ,
3 comments

IMG_20150307_170030

Uno de los súper poderes de las plataformas Edison y Galileo de Intel es la disponibilidad de LINUX y la posibilidad de ejecutar comandos de LINUX desde un “sketch” de ARDUINO.

En esta receta les comparto cómo hacer llamadas dinámicas al sistema de LINUX desde un sketch ARDUINO, concatenando valores en un objeto String y luego convirtiendo dicho objeto a un arreglo de caracteres necesario para la llamada de sistema.

La idea es poder concatenar comandos de sistema, con valores leidos de los sensores, y hacer llamdas a Linux para que haga algo a partir de estos valores.

En resumen:

  1. La llamada de sistema recibe un parámetro que es un arreglo de caracteres (no un String)
  2. La concatenación se puede hacer de manera muy sencilla usando un String
  3. La conversión se realiza creando un arreglo de caracters del tamaño del String mas un caracter terminador.
  4. El sketch abajo es una modificacion del ejemplo BLINK, que además de hacer parpadear un led, tiene un contador que lleva la cuenta de la cantidad de veces que se ejecuta el comando loop().
  5. La función “dynamicCommand(c)” recibe el valor del contador y genera un comando de sistema para realizar un listado del contenido de una carpeta y poner el resultado en un archivo. Este archivo es nombrado con un sufijo que indica la cuenta que lleva el contador.
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
int c = 0; //just a counter

// the setup routine runs once when you press reset:
void setup() {                
    // initialize the digital pin as an output.
    pinMode(led, OUTPUT);    
    Serial.begin(9600);
    Serial.println("TEST FOR STRING CONCATENATION"); 
}

// the loop routine runs over and over again forever:
void loop() {
    c++; //un simple contador
  
    Serial.println("Count: ");  
    Serial.println(c);

//  Serial.println("Count: " + c); //This behaves weird...  
    
    if( c < 10){ 
         dynamicCommand(c);
    }
    Serial.println("Blinking...");
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(1000); // wait for a second
    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
    delay(1000);               // wait for a second
    Serial.println("Loop Complete!"); } 

dynamicCommand(int counter){
     Serial.println("dynamicCommand function..."); 
     String command = "ls > resultFile";
     command += counter;
     command += ".log";
     Serial.println("Concatenated command looks like this:");
     Serial.println(command);

//UPDATE: THIS COULD BE ACHIEVED USING THE buffer propery of the String object
//     Serial.println("Converting to char array...");
//     int commandLength = command.length() + 1;
//     char commandCharArray [commandLength];
     
//     command.toCharArray(commandCharArray, commandLength);
     
//     Serial.println("Command array looks like this:");
//     Serial.println(commandCharArray);
//     Serial.println("Making system call...");
//     system(commandCharArray);


system(command.buffer);

Serial.println("Done!"); }