OpenSource

Hardware libre
Algunas características del hardware libre:
  • El desarrollo de prototipos electrónicos con software empotrado sobre hardware libre (Open hardware) ofrece grandes oportunidades.
  • Regularizar el Hardware Libre de forma similar al Software Libre fomentaría el desarrollo.
  • Promoción de la robótica didáctica mediante el uso de Hardware Libre.
  • Arduino es una de las plataformas más conocidas en el Hardware Libre.
  • El Hardware Libre está o debe estar íntimamente relacionado con el Software Libre para que sea completamente accesible.
  • ...
Voltímetro LED con Arduino Nano (5VDC Led Voltmeter)
Sencilla implementación de un voltímetro DC hasta 5V, con barra de LEDs. Añadiendo un divisor de tensión y modificando el código fuente adecuadamente se pueden medir distintos rangos de tensión.

Circuito (circuit)
Código fuente (source code -firmware-)
/*
  LED DCV bar graph

  Turns on a series of LEDs based on the value of an analog sensor.
  This is a simple way to make a bar graph display. Though this graph
  uses 10 LEDs, you can use any number by changing the LED count
  and the pins in the array.
 
  This method can be used to read a DC voltage from 0 to 5V.

  The circuit:
   * LEDs from pins 2 through 11 to ground

 created 4 Sep 2010
 by Tom Igoe

 Modified 26 Sep 2011
 by Francisco Ochando

 */


// these constants won't change:
const int analogPin = A1;   // the pin DCread is attached to
const int ledCount = 10;    // the number of LEDs in the bar graph

int ledPins[] = {
  2, 3, 4, 5, 6, 7,8,9,10,11 };   // an array of pin numbers to which LEDs are attached


void setup() {
  // loop over the pin array and set them all to output:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
  }
}

void loop() {
  // read the sensor (0 to 5V):
  int sensorReading = analogRead(analogPin);
  // map the result to a range from 0 to the number of LEDs:
  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);

  // loop over the LED array:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    // if the array element's index is less than ledLevel,
    // turn the pin for this element on:
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    }
    // turn off all pins higher than the ledLevel:
    else {
      digitalWrite(ledPins[thisLed], LOW);
    }
  }
}

Test del circuito


NOTA: El software y el hardware son "open" y los puedes modificar a tu antojo.

Referencias:

[1] Manual del Arduino
[2] Web de Arduino
[3] Tutoriales Virtual Breadboard

Altímetro OpenSource
Pàgina del altímetro.
Kits
Termómetro arduino -lm35-. 
Control de una pantalla LCD 128x64 pixel.


Hace un tiempo, mi amigo Mario me planteó un problema relacionado con la remotización de su observatorio astronómico. No consigue encontrar una solución económica y confiable para cubrir la óptica de un catalejo refractor y evitar que se acumule suciedad, bien protegerlo de caidas de agua súbitas que no dan tiempo a cerrar el techo deslizante.
Me he decido a buscar una solución económica que permita detectar el agua de lluvia y  los pulsos de apertura/cierre enviados desde un actuador remoto (PC local o internet) para forzar la apertura/cierre de una cubierta de lente para un refractor. Para ello vamos a utilizar un minimotor (como el de la figura) de sólo 5gr de peso y 0.800kg/cm de torque para deslizar un obturador sobre la lente.

Para controlar el motor voy a utilizar un Arduino Duemilanove (de pruebas) con dos sensores, uno de ellos controlará la presencia de agua y el otro controlará la señal obturador abierto/cerrado.
El Microcontrolador ATMEGA168, el cristal y un puñado de resistencias son los únicos elementos necesarios para controlar el motor por lo que el proyecto final se podrá montar sobre una pequeña placa de prototipos.
Software - firmware (código)
/*
    Move servo to open/close a shutter
    Close the shutter if wet humidity sensor
    Obturador
    Created oct 2011
    by Francisco José Ochando Terreros
    http://minitecnia.blogspot.com
*/

#include <Servo.h>

Servo obturador;  // crea un objeto tipo servo para controlar el obturador

int pos = 0;    // variable para almacenar la posición del obturador
int val = 0;    // variable para almacenar el valor nivel entrada
const int hum = 100;    // constante que almacena el valor umbral de humedad
int val2 = 0;    // variable para almacenar el valor de humedad
int inPin = 2;  // digital input pin open/close
int analogPin = 0;  // analog input pin humidity

void setup()
{
  pinMode(inPin, INPUT);     // Declaramos el Pin de entrada
  obturador.attach(9);         // liga el servo conectado en el pin 9 al objeto obturador
}

void loop()
{  
  if (val2 < hum) {                 // apertura permitida
      val = digitalRead(inPin);  // Leemos el valor de la entrada
      if (val == HIGH) {         // Si el valor es igual a HIGH (obturador abierto)
          pos = 0;
          obturador.write(pos);   // dice al servo que se posicione en la posición indicada 'pos'
          delay(15);                    // espera 15 ms para dar tiempo al servo a llegar a la nueva posición
      } else {
          pos = 180;
          obturador.write(pos);   // dice al servo que se posicione en la posición indicada 'pos'
          delay(15);                    // espera 15 ms para dar tiempo al servo a llegar a la nueva posición
      }
  } else {                            // apertura no permitida
      pos = 180;
      obturador.write(pos);   // dice al servo que se posicione en la posición indicada 'pos'
      delay(15);                    // espera 15 ms para dar tiempo al servo a llegar a la nueva posición
  }
}


Continuaré ...


La parte mecánica de este artículo la publico en http://astrotecnia.blogspot.com/p/montura.html#cubreoptica