Programando un ATtiny85 con Arduino



Hacía tiempo que quería hacer algún proyecto con un Arduino, y finalmente encontré algo útil que hacer: ¿Por qué no hacer que una luz que tengo en el garage se encienda cuando detecte movimiento?
Ciertamente es un proyecto super sencillo que quería usar para poder enseñar a otras personas los fundamentos básicos de un Arduino y de paso los de programación en C.
Una vez finalizado el mini proyecto, la idea era haberlo montado sobre un Arduino nano pero al llegar a la tienda a comprarlos descubrí el ATtiny 85. Con este microcontrolador podemos ejecutar lo mismo que en un Arduino aunque con ciertas restricciones, la página de especificaciones está aquí.
El precio ronda los 2 euros, por lo que para proyectos pequeños es mucho más barato que un Arduino nano y encima era un nuevo reto, por lo que me pareció interesante probarlo.
El modelo que yo he utilizado es exactamente igual al que aparece en la imagen: ATTINY85-20PU, con un rango de voltage de 2.7 a 5.5 voltios.
Llegados a este punto tenemos 2 partes claramente diferenciadas:
  1. Hacer el programa para Arduino.
  2. Programar el ATiny85 usando el Arduino.


Programa para el Arduino.


En este apartado no voy a detallar como empezar a programar un Arduino, para ello hay magníficos manuales por internet. EL código del programa sería el siguiente:

#include <Arduino.h>

#define pinLight 13
#define pinSensor 12
#define delayTime 500

int steps = 0;

void setup()
{
  pinMode(pinSensor, INPUT);

   pinMode(pinLight, OUTPUT);

   //Only to show some lights activity at the beginning of the program

   //is not necessary and can be removed.
  digitalWrite(pinLight, HIGH);
   delay(2000);
   digitalWrite(pinLight, LOW);
}

void loop()
{
    delay(delayTime);
     
    if(digitalRead(pinSensor) == HIGH){
      steps = 0;
      digitalWrite(pinLight, HIGH);
    }
    else if(steps > 10){
        digitalWrite(pinLight, LOW);      
        steps = 0;
    }
    steps++;
}




Como se puede comprobar el programa es muy simple.
Conectando el sensor y un led siguiendo este esquema podemos ver que todo funciona correctamente, en este caso el led es opcional ya que el led que hay en el Arduino se maneja con el pin 13.
Cuando vayamos a programar el ATtiny hay que cambiar los pines que se van a utilizar en mi caso he utilizado el 0 y 1.

Programar el ATiny85 usando el Arduino.

Para poder utilizar el Arduino como ISP (In-System programmer)  para el ATtiny tendremos que seguir los siguientes pasos:
  1. En el entorno de desarrollo de Arduino (Preferiblemente la última versión) https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json


Configurar programa Arduino 1.6.7



Configurar arduino como isp

Turning the Arduino board into a programmer

We’re going to use the Arduino board to program the ATtiny. First, we’ll need to turn the Arduino board into an “in-system programmer” (ISP). To this:
  • Run the Arduino development environment.
  • Open the ArduinoISP sketch from the examples menu.
  • Note for Arduino 1.0: you need to make a small change to the ArduinoISP sketch before uploading it. Find the line in the heartbeat() function that says “delay(40);” and change it to “delay(20);”.
  • Select the board and serial port that correspond to your Arduino board.
  • Upload the ArduinoISP sketch.

subir el sketch y hecho !!! :)

.


Referencias:
https://www.arduino.cc/en/Main/Software
http://www.atmel.com/devices/ATTINY85.aspx
http://highlowtech.org/?p=1695