sábado, 25 de diciembre de 2010

Para principiantes...

Hola a todos, éste es mi primer post en el blog, y estará dedicado a hacer cuatro proyectos MUY sencillos (basados en los propios ejemplos de la web oficial de Arduino) para principiantes en el mundo de Arduino (entre los que me incluyo, con lo que correcciones y sugerencias serán bienvenidas :)), ya que los posts que actualmente hay son un poco más avanzados y no hay ninguno para newbies.

Así que... allá vamos =)


BLINK

Éste es probablemente el proyecto más sencillo que se puede hacer con Arduino, el de hacer parpadear un LED, encendiéndose y apagándose cada segundo.

Lo que haremos será conectar un LED al pin 13. Para ello, conectaremos la "patilla larga" (la positiva, llamada ánodo) del LED al pin 13 de nuestro Arduino. La otra patilla (la negativa, llamada cátodo) irá conectada a tierra (GND).

¿Por qué el pin 13? Pues bien, este pin lleva incorporada una pequeña resistencia, suficiente para evitar daños en el LED, y así nos ahorramos tener que hacer el proyecto en otro pin y ponerle nosotros la resistencia.

Bien, ahora simplemente tenemos que poner este código en nuestro IDE de Arduino:

/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.

This example code is in the public domain.
*/

void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}

void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}

Este código lo podéis cargar directamente los ejemplos que vienen ya en el IDE: File->Examples->1.Basics->Blink.

Ahora simplemente, le damos a Upload para pasar el programa a la placa, y observar el resultado.

Se puede observar lo anterior en el siguiente vídeo:



Como véis, ha sido muy sencillo.


FADE2

Ésta es una ligera modificación del programa de ejemplo Fade (File->Examples->1.Basics->Fade), en el que se hace parpadear gradualmente un LED, conectándolo al pin 9. En el sencillo proyecto que nosotros haremos, conectaremos tres LEDs en paralelo, y usaremos una protoboard. El circuito queda de la siguiente forma:

















Como se puede ver hemos usado una resistencia (de 220 Ohms), y hemos colocado los tres LEDs en paralelo, de forma que si uno de ellos se quita de la placa de prototipado, los demás seguirán funcionando. Se puede apreciar cómo hemos puesto dos jumpers para unir dos secciones de la protoboard, ya que, pese a que los puntos de la protoboard sólo están conectados verticalmente, las secciones no están conectadas entre sí.

Hemos conectado al pin 9 y a tierra (negativo con tierra).

El código usado es el siguiente:

/*
Fade

This example shows how to fade an LED on pin 9
using the analogWrite() function.

This example code is in the public domain.

*/
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by

void setup() {
// declare pin 9 to be an output:
pinMode(9, OUTPUT);
}

void loop() {
// set the brightness of pin 9:
analogWrite(9, brightness);

// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// wait for 20 milliseconds to see the dimming effect
delay(20);
}

(Podemos jugar con el fadeAmount y el delay, para que haga fade a otro ritmo).

El resultado, después de subir el programa a Arduino es el siguiente:




toneMelody_StarWars

En éste proyecto, haremos uso del código que puede verse en el ejemplo toneMelody (File->Examples->1.Digital->toneMelody). Lo que haremos será usar un zumbador piezo (piezo buzzer) y una resistencia (yo uso una de 220 Ohmios, pero si tenéis una de 100 usadla), para sacar el sonido o melodía que nosotros queramos, en este caso una muy breve melodía de Star Wars, usando el pin digital 8. Haremos uso del fichero pitches.h (viene con el programa toneMelody), que define cada nota con el pitch de dicha nota... traduciendo: define cómo debe sonar cáda nota que pongamos. Como nota aclaratoria, decir que las notas vienen en el sistema de notación musical inglés:

C->Do
D->Re
E->Mi
F->Fa
G->Sol
A->La
B->Si

El número que llevan al lado es la "altura" a la que está dicha nota, para variar entre escalas.

El circuito, una vez montado queda así:

















Como se puede ver, es muy simple.

El código de nuestro programa es el siguiente:

/*
Melody

Plays a melody

circuit:
* 8-ohm speaker on digital pin 8

created 21 Jan 2010
by Tom Igoe

This example code is in the public domain.

http://arduino.cc/en/Tutorial/Tone

*/
#include "pitches.h"

// notes in the melody:
int melody[] = {
NOTE_C3,NOTE_C3, NOTE_C3, NOTE_GS2, NOTE_DS3, NOTE_C3, NOTE_GS2, NOTE_DS3, NOTE_C3, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_GS4, NOTE_DS4, NOTE_C4, NOTE_GS2, NOTE_DS3, NOTE_C3 };
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
4,4,4,4,8,4,4,8,4, 4,4,4,4,8,4,4,8,4};

void setup() {
// iterate over the notes of the melody:
for (int thisNote = 0; thisNote < note =" 1000" note =" 1000/8," noteduration =" 1000/noteDurations[thisNote];" pausebetweennotes =" noteDuration" style="font-style: italic;">melody, y en el array noteDurations ponemos si quieremos que sea una negra, corchea...

Podéis jugar con las notas y duraciones, y hacer cualquier melodía. La mía, de prueba, como dije arriba, es una parte corta de un theme de Star Wars. He aquí el resultado despues de subirlo a Arduino:





KNOCK2

En este último proyecto, usaremos un piezo para detectar vibración (podéis encontrar el ejemplo en File->Examples->6.Sensors->Knock); para ello usaremos el piezo buzzer que usamos anteriormente (no es demasiado bueno), y una resistencia de 1MegaOhm. Entre que mi piezo es malillo, y que no tengo una resistencia de 1MegaOhm, he tenido que hacer ciertos ajustes, pero aún así no capta ruidos desde lejos, y como mejor reacciona es dándole un golpe seco al piezo, para que vibre con fuerza.

Cada vez que detecte vibración, nos lo hará saber mediante un LED que colocaremos en el pin 13 (cambiará su estado cuando esto ocurra), y mediante el Serial Monitor (Tools->Serial Monitor), en el cual escribirá "Knock!".

Veamos cómo hemos montado el circuito:



Negrita











Lo ideal habría sido conectarle una resistencia de 1MegaOhm en paralelo al piezo, pero como no tengo, he tenido que ponerle, como se ve en la imagen, tres resistencias de 330k puestas en serie entre ellas. De nuevo he puesto jumpers para conectar ambas partes de la protoboard. Como vemos, conectamos a tierra y a la entrada analógica A0, ya que por ahí se enviará el resultado a nuestro Arduino.

Por otro lado, vemos como hemos conectado un LED en el pin 13, como ya hicimos en el primer proyecto.

He aquí el código del programa:

/* Knock Sensor

This sketch reads a piezo element to detect a knocking sound.
It reads an analog pin and compares the result to a set threshold.
If the result is greater than the threshold, it writes
"knock" to the serial port, and toggles the LED on pin 13.

The circuit:
* + connection of the piezo attached to analog in 0
* - connection of the piezo attached to ground
* 1-megohm resistor attached from analog in 0 to ground

http://www.arduino.cc/en/Tutorial/Knock

created 25 Mar 2007
by David Cuartielles
modified 4 Sep 2010
by Tom Igoe

This example code is in the public domain.

*/


// these constants won't change:
const int ledPin = 13; // led connected to digital pin 13
const int knockSensor = A0; // the piezo is connected to analog pin 0
const int threshold = 1; // threshold value to decide when the detected sound is a knock or not


// these variables will change:
int sensorReading = 0; // variable to store the value read from the sensor pin
int ledState = LOW; // variable used to store the last LED status, to toggle the light

void setup() {
pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT
Serial.begin(9600); // use the serial port
}

void loop() {
// read the sensor and store it in the variable sensorReading:
sensorReading = analogRead(knockSensor);

// if the sensor reading is greater than the threshold:
if (sensorReading >= threshold) {
// toggle the status of the ledPin:
ledState = !ledState;
// update the LED pin itself:
digitalWrite(ledPin, ledState);
// send the string "Knock!" back to the computer, followed by newline
Serial.println("Knock!");
}
delay(100); // delay to avoid overloading the serial port buffer
}


Como vemos, hemos puesto const int threshold = 1. ¿Qué es el threshold? Es el umbral que queremos poner como sensibilidad de detección del ruido necesario para activar el LED e imprimir por pantalla. Yo he puesto 1, porque como dije antes, no cuento con material de primera. Sin embargo, en el programa venía por defecto 300... es decir, que juguéis con el umbral a vuestro gusto y como mejor véais que funciona.

El resultado, después de subirlo al Arduino, puede verse aquí:





Pues bien, esto es todo por hoy. Como digo son proyectos muy sencillos para gente que está empezando. Cualquier sugerencia, correción o similares, será de gran ayuda.

Un saludo.

No hay comentarios:

Publicar un comentario