domingo, 19 de abril de 2015

Controlar la posición de un servo con un potenciómetro

Vamos a controlar la posición de un Servo moviendo un potenciómetro o resistencia variable.

Utilizamos para el Servo el PIN 9 que es de tipo PWM pero al usar la librería Servo.h en un Arduino UNO lo que hace esta librería es deshabilitar la capacidad PWM del PIN 9 y 10. Por este, motivo podríamos usar cualquier PIN digital para controlar el servo ya que el trabajo duro lo hace la librería, que usa pulsos para según la frecuencia y duración indicar al relé a que ángulo debe ir.

El proyecto se puede ver en el siguiente enlace:








El código está obtenido del siguiente enlace: http://www.arduino.cc/en/Tutorial/Knob

Majarduino: Reto 1. SEÑAL PWM Y LED RGB

#Majarduino

Reto 1: SEÑAL PWM Y LED RGB

  • OBJETIVO
    1. COMPRENDER FUNCIONAMIENTO DE LA SEÑAL PWM
    2. SERVOMOTORES
      1. CONTROLAR ÁNGULO DE GIRO DE UN SERVOMOTOR (ENTRE 0 Y 170)
      2. CONTROLAR SENTIDO DE GIRO Y VELOCIDAD DE UN SERVOMOTOR DE ROTACIÓN CONTINUA
    3. LEDS RGB (COLORINES !!!!)
      1. CONTROLAR LA TONALIDAD DE UN LED RGB DE ÁNODO O CÁTODO COMÚN  CON 3 POTENCIÓMETROS (ROJO, VERDE Y AZUL)
  • MATERIAL DE UTILIDAD
    1. ARDUINO 1
    2. PROTOBOARD
    3. SERVOMOTORES
      1. MINISERVO
      2. SERVO DE ROTACIÓN CONTÍNUA
    4. LEDS RGB (COLORINES !!!!)
      1. LED RGB
      2. 3 POTENCIÓMETROS

Encender una lámpara con un Arduino y un relé

Vamos a utilizar un relé para encender una lámpara con un Arduino UNO. El relé es el más sencillo y económico que podemos encontrar. Se trata de una unidad que trabaja con 220 V y hasta 10 A. Se puede adquirir en eBay por menos de 3 €.




También existen relés múltiples, por ejemplo, disponemos de uno de cuatro unidades de 10 A.






  • GND → NEGRO → NEGATIVO → Tierra o masa
  • Vcc → ROJO → POSITIVO → +5v (aquí van lo 5 voltios del Arduino)
  • IN1 → Entrada de CONTROL del Relé 1 → AMARILLO → Al PIN de control del Arduino
  • IN2 → Entrada de CONTROL del Relé 2
  • IN3 → Entrada de CONTROL del Relé 3
  • IN4 → Entrada de CONTROL del Relé 4


En Arduino UNO el led interno de la placa que ya lleva resistencia de protección está asociado al PIN 13. Si conectamos un led externo al PIN 13 no será necesaria la resistencia de protección.
En el código del probrama Blink que viene como ejemplo básico en el IDE de Arduino se utiliza el PIN que está asociado a ese led interno. Este es el motivo por el que hemos conectado el cable amarillo que va al PIN de control del relé al PIN 13 de nuestro Arduino UNO.


sábado, 28 de marzo de 2015

Because we can

Me ha hecho mucha gracia el vídeo que se muestra a continuación, porque me he sentido muy identificado. Una de las ideas que tenía justamente es encender una lampara con Arduino de la misma forma que se muestra en el vídeo.

domingo, 22 de marzo de 2015

Encender rápidamente una serie de LEDs con un potenciómetro

Al girar el potenciómetro encendemos una serie de LEDs de forma acumulada. En esta ocasión podemos mover rápidamente la rueda del potenciómetro.

Un potenciómetro o resistencia variable nos permite disponer de valores analógicos entre 0 y 1023, en total son 1024 valores que podemos asociar a una entrada analógica como A0 y luego con condicionales establecer en el código las acciones que necesitamos. En este caso encenderemos una serie de LEDs de forma secuencial.

Ahora podemos mover rápidamente el potenciómetro y conseguiremos que se enciendan siempre no solo el LED que toque sino todos los anteriores. Esto se logra dando la instrucción en el código de que se enciendan todos los previos. Y el proceso análogo al apagarlos.

El proyecto se puede ver en el siguiente enlace:



int i;
int j;
int pinPotenciometro = A0;
int valorPotenciometro = 0;

void setup()
 {
  pinMode(pinPotenciometro, INPUT);
  for (i = 0; i < 14; i++)
  pinMode(i, OUTPUT);
  Serial.begin(9600);
 }

void loop()
 {
  valorPotenciometro = analogRead(pinPotenciometro);
  for (i = 0; i < 14; i++)
   {
    if (valorPotenciometro == 0) apagarLeds();
    if (valorPotenciometro > i*73 && valorPotenciometro <= (i+1)*73) encenderHasta(); //en este rango está el LED que toca encender
    if (valorPotenciometro == 1023) encenderLeds();
   }
 }

void encenderHasta()
 {
  for (j = 0; j < 14; j++) 
   if (j<=i) digitalWrite(j, HIGH); //se enciende el LED que toca (el i-esimo) y todos los anteriores
   else digitalWrite(j, LOW);       //el resto se apagan
 }

void apagarLeds()
 {
  for (i = 0; i < 14; i++)
   digitalWrite(i, LOW);
 }

void encenderLeds()
 {
  for (i = 0; i < 14; i++)
   digitalWrite(i, HIGH);
 }

Encender uno a uno una serie de LEDs con un potenciómetro

Al girar el potenciómetro encendemos uno a uno una serie de LEDs y luego los apagamos. Solo hay uno encendido salvo en los extremos del potenciómetro.

Encendemos uno a uno 14 LEDs usando un potenciómetro, salvo en los extremos de la rueda del potenciómetro donde en un extremo apagamos todos y en contrario encendemos todos.

Podemos ver el proyecto en el siguiente enlace:



int i;
int j;
int pinPotenciometro = A0;
int valorPotenciometro = 0;
int tocaLed; //este es el LED que toca encender en cada momento

void setup()
 {
  pinMode(pinPotenciometro, INPUT);
  for (i = 0; i < 14; i++)
  pinMode(i, OUTPUT);
  Serial.begin(9600);
 }

void loop()
 {
  valorPotenciometro = analogRead(pinPotenciometro);
  for (i = 0; i < 14; i++)
   {
    if (valorPotenciometro == 0) apagarLeds();
    if (valorPotenciometro > i*73 && valorPotenciometro <= (i+1)*73)  //en este rango está el LED que toca encender
     {
      tocaLed = i;
      for (j=0; j<14; j++) //creamos otro bucle para encender el LED que toca y apagar el resto
        {
         if (j==tocaLed) digitalWrite(j, HIGH);
         else digitalWrite(j, LOW);
        }
     }
    if (valorPotenciometro == 1023) encenderLeds();
   }
 }

void apagarLeds()
 {
  for (i = 0; i < 14; i++)
   digitalWrite(i, LOW);
 }

void encenderLeds()
 {
  for (i = 0; i < 14; i++)
   digitalWrite(i, HIGH);
 }

sábado, 21 de marzo de 2015

Encender lentamente una serie de LEDs con un potenciómetro

Vamos a ver cómo actúa un potenciómetro al ir encendiendo una serie de LEDs y luego al ir apagándolos.

En este caso se trata de girar la rueda del potenciómetro o resistencia variable para conseguir que se vayan encendiendo los 14 LEDs, de forma que al encenderse uno de ellos queden encendidos los anteriores. Podemos girar la rueda hasta su posición final que es cuando todos quedan encendidos, y luego podemos ir girando en sentido contrario de forma que se irán apagando los LEDs hasta que al volver a la posición original todos quedarán apagados.

Disponemos de un voltímetro para ir mirando las lecturas que nos proporciona la resistencia variable.

Puedes ver el proyecto en el siguiente enlace:



int i = 0;
int pinPotenciometro =A0;
int valorPotenciometro = 0;

void setup()
 {
  pinMode(pinPotenciometro, INPUT);
  for (i = 0; i < 14; i++)
  pinMode(i, OUTPUT);
  Serial.begin(9600);
 }

void loop()
 {
  valorPotenciometro = analogRead(pinPotenciometro);
  //Las dos siguientes líneas de código se ponen si deseamos ver los valores por el monitor serial
  //Serial.println(valorPotenciometro, DEC);
  //delay(100);
  for (i = 0; i < 14; i++)
   {
    if (valorPotenciometro == 0) apagarLeds();
    if (valorPotenciometro > i*73 && valorPotenciometro < (i+1)*73) digitalWrite(i, HIGH);
    if (valorPotenciometro > (i-1)*73 && valorPotenciometro < i*73) digitalWrite(i, LOW);
    if (valorPotenciometro == 1023) encenderLeds();
  }
 }

void apagarLeds()
 {
  for (i = 0; i < 14; i++)
   digitalWrite(i, LOW);
 }

void encenderLeds()
 {
  for (i = 0; i < 14; i++)
   digitalWrite(i, HIGH);
 }