[Basics] Curso de Aquila - Día 1


#1

#Antes de comenzar

Si no leíste el tutorial anterior, te recomiendo ápliamente que te des una vuelta por allá para aprender a instalar y conectar tu kit.

#¡Seguridad!

Antes de comenzar, te explicaré algunas cuestiones de tensión y corriente (¡Es por tu bien!)

Generalmente, con tensiones abajo de 12V es seguro trabajar, y a pesar de que el Altair funciona por su cuenta con tensiones entre 5V-15V y su tensión de salida son 3.3V, en algún momento puede que requieras conectar fuentes de poder externas para abastecer todo tu circuito.Y, como quizá hayas escuchado por ahí, la tensión no es lo que te mata, sino la corriente.

El cuerpo tiene una resistencia natural ¡sí, como los resistores! Sólo que mejor no tratemos ser parte del circuito.
Hay una tensión que debe superarse para poder ir a través de una resistencia, si esa tensión mínima es excedida, entonces la corriente podrá moverse libremente por nuestro cuerpo (desde donde estemos tocando hasta encontrar alguna tierra; que podría ser a través de tu pies, ¡ZAPATO CERRADO SIEMPRE!). El problema es cuando la corriente pasa a través zonas sensibles como, exactamente, el corazón. Podría ser mortal.

De cualquier forma, uses o no una fuente externa, SIEMPRE usa zapatos cerrados a la hora que estés prototipando.

Revisa dos veces la polaridad de los componentes; según aplique. Algunos componentes podrían quemarse o explotar (no estamos hablando de TNT, pero aún así podrías salir lastimado).

Y por último, antes de conectar cosas al protoboard, desconecta el Altair o alguna fuente de poder.

#Primeros códigos

En este tutorial se intentará explicar de manera más detallada los ejemplos que cubren el primer día de clases.
En este primer ejemplo no se requirirá más que un Altair (su programador USB y cable también)

// Todo lo que va en la sección setup, prepara el Altair para su uso posterior. Sin embargo, si pones una variable aquí será destruida al finalizar la función.
void setup() {
  // Se prepara el Pin numero 13 para escribir datos (OUTPUT) y no para leerlos (INPUT)
  pinMode(13, OUTPUT); // El pin número 13 es el que hace referecia al pin 13 y al que también está conectado el LED interno color rojo del Altair.
}

// Todo lo que se escriba en la función loop va a ejecutarse indeterminadas veces hasta la finalización del programa.
void loop() {
  digitalWrite(13, LOW);   // Comenzamos la función escribiendo en el pin que controla el LED rojo. (LOW; para los LED internos es 'encendido')
  delay(1000);              // Espera 1 segundo (esta escrito en milisegundos)
  digitalWrite(13, HIGH);    // Apaga el LED rojo. (HIGH; para los LED internos es 'apagado')
  delay(1000);              // Espera 1 segundo (esta escrito en milisegundos)
}

##Así se verá cuando cargues el código y comience a funcionar.


Muy bien, ahora, en este ejemplo harás que el LED comience a funcionar de manera manual. ¡Sólo encenderá y apagará cuando tu se lo digas!

//Este ejemplo no requiere nada, mas que tu altair y su USB

#define LED 13 // Cada que el compilador se tope con la palabra "LED" lo sustituira por un 13
#define BUTTON 33 // Lo mismo que arriba, pero para la palabra "BUTTON"

void setup()
{
  pinMode(LED, OUTPUT); // El PIN 13 (LED ROJO) se prepara para que se le escriba info
  pinMode(BUTTON, INPUT); // Se prepara el PIN 33 para ser leido
}

// LOW para el boton interno signfica que esta presionado debido a la logica invertida de los elementos que estan directamente en la placa.
// Y HIGH sifgnifica que NO esta presionado el boton.

void loop()
{
 if (digitalRead(BUTTON) == LOW) //En caso de que el boton este presionado...
 {
   digitalWrite(LED, LOW); // ...entonces se enciende el boton.
 }
 else //Si no se cumple lo anterior, entonces..
 {
   digitalWrite(LED, HIGH); //Se apaga el LED
 }
} //Recuerda que al ser un loop, el Altair estara haciendo comprobaciones del boton TODO el tiempo.

En el siguiente ejemplo haremos uso de un botón externo y el LED interno del Altair, así que se necesitará de un protoboard y cables.

Para que te familiarices con el protoboard, debes saber que la forma en que funciona y en que los pines está conectados es como se muestra en la imagen. Todos los canales centrales están conectados unos a otros de 5 en 5, nunca con en canal paralelo.
Los que están a los costados (que generalmente tienen una línea azul y una roja) se utilizan para distribuir la tensión y corriente a través del circuito que estés armando; no obstante, unir los canales de tensión y corriente a los canales centrales es indispensable hacerlo con un cable adicional, de otra manera no recibirá nada el circuito y por ende no funcionará.

Y así, ¡es como se debe conectar!
(Si no estás familiarizado con los colores de los resistores, estoy usando uno de 10k Ohms; adicionalmente te facilito este link para calcularlo y aprender a hacerlo por tu cuenta. -> http://goo.gl/1ieEjA )

El código anterior funciona mientras el botón esté presionado, pero ¿qué tal si queremos hacer un interruptor?
No te despegues, que en el siguiente código te diré cómo lograrlo.

¡No desconectes el ejemplo anterior, en este sólo vas a añadir LED al mismo circuito!

#define LED 5 //Esta vez usaremos un LED externo
#define BUTTON 6 //Boton externo en configuracion Pull up
int estado_led = HIGH;
int estado_boton_actual = LOW; 
int estado_boton_anterior = HIGH; //Esto lo usaremos a manera de bandera

void setup()
{
 pinMode (LED, OUTPUT); //Preparamos el pin 14 (LED VERDE interno) para emitir.
 pinMode (BUTTON, INPUT); //Preparamos el pin 6 para ser nuestra entrada (y ahi ira el boto)
 digitalWrite(LED, estado_led); //Visto de otra forma, digitalWrite(14,HIGH);
}

void loop()
{
  estado_boton_actual = digitalRead(BUTTON);
  if(estado_boton_actual == LOW && estado_boton_anterior == HIGH)
  {
    estado_led = !estado_led; //Invierte el valor que tenga la variable
    digitalWrite(LED, estado_led); //Aplica esa variable modificada al LED
    estado_boton_anterior = LOW;
    //Esto hace que el loop no vuelva a entrar al if (y por ende no estar modificando el
    //valor de la variabla en cada ciclo). De todas formas, si esto no estuviera, el
   // led parpadearia tan rapido que no se notaria
  }
  else if (estado_boton_actual == HIGH)
  {
    estado_boton_anterior = HIGH; //Esto permite que el loop vuelva a entrar al primer if
  }
}

##El diagrama de conexión en este será así.

Esto concluye la primera clase de Altair, espero te hayas divertido en el proceso, según sus comentarios iré modificando los tutoriales; así que por favor, ¡no dejen de hacerlo!

Cualquier duda que tengas no olvides comentarla, ya que esto es para ustedes. Recuerda que cada ves iré explicando menos los códigos, así que trata de no perderte los siguientes tutoriales.


Recursos para Aquila (Documentación, código, etc.)
[Basics] Curso de Aquila - Día 2
#2

A todos los que siguen al 100% la guia y conecten el su Botón para el led en la salida 6 del Altair, les sugiero corregir al siguiente código, esto les evitara dolores de cabeza.

//Este ejemplo no requiere nada, mas que tu altair y su USB

#define LED 13 // Cada que el compilador se tope con la palabra “LED” lo sustituira por un 13
#define BUTTON 6 // Lo mismo que arriba, pero para la palabra “BUTTON”

void setup()
{
pinMode(LED, OUTPUT); // El PIN 13 (LED ROJO) se prepara para que se le escriba info
pinMode(BUTTON, INPUT); // Se prepara el PIN 6 para ser leido
}

// LOW para el boton interno signfica que esta presionado debido a la logica invertida de los elementos que estan directamente en la placa.
// Y HIGH sifgnifica que NO esta presionado el boton.

void loop()
{
if (digitalRead(BUTTON) == LOW) //En caso de que el boton este presionado…
{
digitalWrite(LED, LOW); // …entonces se enciende el boton.
}
else //Si no se cumple lo anterior, entonces…
{
digitalWrite(LED, HIGH); //Se apaga el LED
}
} //Recuerda que al ser un loop, el Altair estara haciendo comprobaciones del boton TODO el tiempo.