Fork me on GitHub

Posts in tag `Arduino'

Librería para motores de paso 28byj-48

July 17, 2017

Simple-Stepper es un pequeña lib para manejar steppers 28byj-48 que hice luego de mirar este video, donde se muestra el funcionamiento del motor. La lib es compatible con esp8266 y maneja tres tipos de secuencias: Wake Drive, Full Step y Half Step. No maneja aceleración, para eso está AccelStepper.

Aquí un ejemplo con un motor, haciendo un giro completo en sentido horario.

#include <SimpleStepper.h>

SimpleStepper stepper(SimpleStepper::FULLSTEP, D5, D6, D7, D8)

void loop ()
{
  stepper.steps(stepper.getFullRotationSteps());

  while ( ! stepper.ready())
  {
    stepper.step();
    delay(3);
    yield();
  }
}

La lib funciona con varios motores en simultáneo, en github se puede ver un ejemplo con dos motores.

Arduino Trabajos esp8266

Interrupciones con Arduino

March 25, 2016

Una interrupción es una señal que interrumpe la ejecución del micro, quien deja inmediatamente lo que estaba haciendo y pasa a atender a una función especial que se encuentra por fuera del flujo del programa y que contiene las instrucciones necesarias para tratar el evento. Una vez finalizado el código de la función el micro retoma su rutina anterior en el lugar exacto donde la interrumpió.

En Arduino este tipo de funciones se llaman ISR (Interrupt Service Routines) y tienen un par de limitaciones con respecto al resto: no pueden recibir parámetros ni retornar algo.

Por otra parte en Arduino las interrupciones son por hardware, para lo cual hay que hacer uso de algún pin, pero no cualquiera puede usarse para esto. En Uno, Nano y Mini los pines habilitados son 2 y 3. En cualquiera de estos pines es posible setear el evento que lanzará la interrupción:

  • LOW: La interrupción se dispara cuando el pin es LOW.
  • CHANGE: Se dispara cuando pase de HIGH a LOW o viceversa.
  • RISING: Se dispara en el flanco de subida (cuando pasa de LOW a HIGH).
  • FALLING: Se dispara en el flanco de bajada (cuando pasa de HIGH a LOW).

A continuación un ejemplo sencillo usando un switch en el pin 2, el cual al ser presionado setea en cero la variable state. Para asegurarse de que las variables compartidas entre las ISR y el resto se actualicen correctamente hay que declararlas como volatile.

volatile int state = 1;

void interrupt()
{
    state = digitalRead(BUTTON_PIN);
}

void setup()
{
    attachInterrupt(0, interrupt, CHANGE);
}

void loop()
{
    for (int i = 0; i < 25; i++) {
        while( ! state);
        // task here
    }
}

Las ISR se conectan a un pin particular mediante la función attachInterrupt. El 0 indica que se conecta al primer pin habilitado para esto, es decir el 2.

El código completo aquí.

Arduino

Pruebas con OpenCV

November 13, 2015

Acabo de leer Arduino Computer Vision Programming, un libro de introducción a OpenCV. Al leer el título me imaginé conectando alguna cámara directamente a Arduino pero después de investigar un poco descubrí que OpenCV es demasiado para ejecutarlo con Arduino, por eso todos los tutoriales que hay por ahí lo usan desde una computadora y se limitan a pasarle datos sencillos a Arduino luego de haber procesado y analizado las imágenes.

opencv matching

En definitiva lo que rescaté del libro son los conceptos básicos de OpenCV y cómo usarlo con C++. Aquí un pequeño ejemplo donde se intenta detectar una imágen pasada por parámetro.

Arduino

Visor lcd de temperatura y humedad

August 6, 2015

Estuve jugando un rato con un lcd y un sensor de temperatura y salió esto

La lista de materiales es la siguiente

El esquema de conexiones para el LCD (hecho con circuits.io) es el siguiente

Sólo hay que agregarle el sensor, que tiene 3 patas: gnd, vcc y data que conecté al pin 5 en el Arduino. Para leerlo usé una librería de Adafruit. El código me quedó así

Algo interesante que encontré es que en Arduino la función printf no funciona con floats, por lo que %f se reemplaza por ?, así que hay que hacer un poco de trabajo extra para mostrarlos.

Referencias

Arduino Trabajos

Cola circular en Arduino usando clases

August 2, 2015

Aquí va un sencillo ejemplo de implementación de una cola circular para Arduino usando clases al estilo C++. Para compilar y subir el código final usaremos inotool en lugar del IDE oficial de Arduino. Comenzamos entonces haciendo

$ ino init

Esto crea la siguiente estructura

$ tree
.
├── lib
└── src
    └── sketch.ino

sketch.ino es el sketch propio de Arduino, donde irán el setup() y el loop(). Dentro del directorio lib crearemos nuestra librería Queue que contendrá los archivos .h y .cpp correspondientes

$ tree
.
├── lib
│   └── Queue
│       ├── Queue.cpp
│       └── Queue.h
└── src
    └── sketch.ino

Para la cola usaremos un array de enteros sin signo de 8 bits (uint8_t). Definiremos la longitud del array en el setup. Veamos entonces Queue.h para tener un parnorama de los métodos y propiedades de nuestra clase

Read more »

Arduino

Arduino EEPROM

July 24, 2015

Los Arduinos con ATmega328 (UNO, pro mini, nano) tienen 1024 bytes de EEPROM que es un tipo de memoria no volátil en la que podés guardar datos y recuperarlos luego de reiniciar tu Arduino. Para esto existe la lib EEPROM, que es muy fácil de usar. Acá dejo un ejemplo en el cual registro la cantidad de veces que se reinició Arduino.

#include <EEPROM.h>

void setup() {
  Serial.begin(9600);
  EEPROM.write(0, EEPROM.read(0) + 1);
}

void loop() {
  static byte value = EEPROM.read(0);
  Serial.println(value);
  delay(1000);
}

Arduino

Beginning C for Arduino - 2nd Edition

July 24, 2015

Si ya diste tus primeros pasos con Arduino y querés pasar al siguiente nivel conseguite Beginning C for Arduino 2nd Edition. Se trata de una revisión del lenguaje C totalmente enfocada a la programación con Arduino. En este libro vas a ver desde cero todos los conceptos básicos de C y algunos de C++, llegando a poder escribir tus propias librerías usando clases.

Tipos, lvalues y rvalues, estructuras de control, funciones, punteros, structs, unions, directivas de preprocesador, operadores de bits, clases, archivos .h y .cpp, todo eso y más vas a encontrar en este libro de Jack Purdum, que según dicen es un veterano en C, con más de 30 años con el lenguaje.

Arduino

Cañón láser

April 14, 2015

Jugando con un servo sg90 y un pequeño láser salió esto: un láser cuyo encendido y dirección se puede controlar desde la red.

Para controlarlo por red hice un sencillo servidor con Bottle.

Para la estructura usé un Meknex que se vende en casi cualquier juguetería.

El código de Arduino acá

Arduino Juegos Python Trabajos

Blink en Arduino con Cylon.js

January 10, 2015

Quería ver qué tal era instalar cylon.js y hacer al menos un blink con él. La instalación con npm es simple

$ npm install cylon cylon-gpio cylon-i2c cylon-firmata

Cylon se comunica con Arduino vía serial usando el protocolo firmata. Lo instalamos usando el IDE de Arduino o podemos usar gort.io, que es una herramienta en Go hecha por los mismos de cylon y que es muy parecida a inotool. Lamentablemente gort no funciona con Arduino Nano así que tuve que usar un Uno.

$ gort scan serial
$ gort arduino install
$ gort arduino upload firmata [port]

Finalmente el código en JS queda así

Arduino Javascript Trabajos

Older | Newer →