O lo que es lo mismo, hacer funcionar el atmega328 sin necesidad de la placa del arduino.
Razón de hacer esto: - ahorro de espacio - el atmega por separado es mucho más barato - para proyectos dedicados no merece la pena perder una placa arduino
Tras una larga tarde buscando por internet como iban las conexiones, he conseguido hacer que funcione el ejemplo de blink y ha quedado así
Ingredientes necesarios:
1x Atmega328 1x 16MHz clock crystal 2x 22 pF capacitors cable y alimentación a 5v
En el caso que tengas que alimentarlo con un voltaje mayor de 5v necesitarás un
1x L7805CV (este sirve para pasar un voltaje de entrada de hasta 40v a 5v para la alimentación del atmega, ojo que debe ser mínimo 7 u 8v)
OJO. He puesto en el dibujo 2 pilas AA pero sólo para indicar como va la entrada de corriente, que debe ser 5v, el dibujo es orientativo
Esto es lo mínimo que se puede poner, después ya te apañas tu para ponerle lo que necesites, si no te sabes de memoria que es cada patilla, puedes fijarte aquí
Y después de ponerle algo útil. Tenemos nuestro atmega funcionando
Si queremos programar el Atmega sin tener que sacarlo y ponerlo en la placa de arduino debemos hacer la siguiente conexión:
Y ya tenemos el primer paso hecho hacia el siguiente proyecto...
Bueno, dada la pereza, haré un breve pero interesante documento sobre lo que llevo hecho. La intención del proyecto es poder controlar cosas con IR así que esta es la primera parte, entender los datos.
Como emisor, usaré un mando a distancia cualquiera. Ya haré otra publicación sobre como hacer uno propio.
Parte del receptor:
He usado un receptor IR que tenía por ahi perdido, pero básicamente todos los receptores tienen 3 pines, uno para la entrada de 5v, otro para la tierra y otro para los datos.
Los 5v y tierra los conectamos a arduino, y el de datos lo conectamos al pin2 de los digitales.
En mi ejemplo he puesto que arduino, según lo leido por IR , controle un led bicolor y los he conectado a los pines 8 y 9
Cuando estas trasteando y aprendiendo en el mundo de la electrónica siempre es interesante mirar circuitos que otras personas han diseñado y probado para realizar funciones específicas que necesitas. Es simple, te bajas el esquema, te haces con los componentes y los sueldas en una placa perfboard o te haces tu propio PCB.
Pero hay un problema que siempre se me presenta con un circuito analógico medianamente complicado, y es ¿y como cojones se que inductancia tiene esta bobina?
Para los fans de este maravilloso proyecto que es Arduino, aquí os dejo un excelente documental realizado por LABoral Centro de Arte y Creación Industrial (link) y filmado en Madrid, Gijón y Nueva York, que muestra los comienzos y la historia de este peculiar proyecto que cambió todos los esquemas en el mundo de la electrónica para aficionados (y no tan aficionados).
Aquí os dejo el trailer de Arduino: The Documentary.
Es un plugin de eclipse que extiende CDT (el componente de C/C++) y te integra avr-gcc (el compilador libre, el mismo que usa arduino), avrdude (para programar el chip, soporta tb el bootloader de arduino) y eclipse, el IDE de programación preferido por los niños
Para rematar el conjunto, podéis incorporar las librerias arduino a vuestros proyectos escritos en C, pero esto ya lo dejo para otro post :P
Hoy volveremos a hacer un proyecto sencillo, pero resultón ;) Una sencilla alarma anti-robo, haciendo uso de un tilt sensor, es decir, un sensor de inclinación/vibración/movimiento... Este sensor, se comporta a efectos prácticos como un botón normal y corriente (ON/OFF).
Lo montaremos con ayuda de nuestra protoboard, de forma que cuando alguien mueva la protoboard, un LED se iluminará y un zumbador hará ruido. Para este proyecto necesitaremos:
El circuito, que es bastante simple, se puede ver en la siguiente imagen:
Como vemos, hemos conectado el tilt sensor al pin 2, y el buzzer al 7.
El código que hemos usado es el siguiente:
int ledPin = 13; // PIN del LED int inPin = 2; // PIN del pulsador int value = 0; // Valor del pulsador
void setup() {
pinMode(ledPin, OUTPUT); // Inicializa el pin 13 como salida digital pinMode(inPin, INPUT); // Inicializa el pin 2 como entrada digital Serial.begin(9600); // use the serial port
}
void loop() {
value = digitalRead(inPin); // Lee el valor de la entrada digital
if (digitalRead(inPin) == 1) { value = 0; noTone(7); } else { value = 1; tone(7, 150, 500); } digitalWrite(ledPin, value); Serial.println(value);
}
El pequeño “arreglo” que hemos hecho en el loop, poniendo value a 0 cuando por el pin 2 se lee 1, y poniéndolo a 1 cuando se lee 0, es porque así el LED estará apagado en estado de reposo.
El resultado, una vez conectado todo y habiendo subido el programa al Arduino, se puede ver en el siguiente vídeo (por cierto, comentar que mi tilt sensor está un poco suelto, ya que las patillas son demasiado cortas, y no me apetecía ponerle alargadores, por eso lo aprieto contra la protoboard cuando levanto todo ;)):
Siguiendo con nuestros proyectos para principiantes, a continuación veremos dos que nos permitirán controlar la intensidad de un LED (y ver los datos resultantes también en el Serial Monitor). Empecemos...
Control de intensidad de un LED con un potenciómetro
En este sencillo proyecto controlaremos la intensidad de un diodo LED mediante un potenciómetro que usaremos como manivela. Necesitaremos:
-1 LED.
-1 potenciómetro.
Conectaremos una de las patillas del potenciómetro que van juntas (hay dos en un lado y una sola en el otro) a tierra (negativo), y la otra a 5V (positivo). La patilla que va sola en su lado, la conectaremos al pin analógico (A0) de Arduino.
Por otra parte, conectaremos el negativo del LED a tierra, y el positivo al pin digital 9 de Arduino.
El resultado, con la ayuda de nuestra protoboard, es el siguiente:
El código que hará que podamos controlar la intensidad con el potenciómetro se expone a continuación:
int knobValue, fadeValue;
void setup(){
// initialize the serial port
Serial.begin(9600);
}
void loop(){
// read the value from the input
knobValue = analogRead(knobPin);
// remap the values from 10 bit input to 8 bit output
fadeValue = map(knobValue, 0, 1023, 0 , 254);
// use the input value to fade the led
analogWrite(ledPin, fadeValue);
// print the input value to the serial port for debugging
Serial.println(fadeValue);
}
Como veis es muy simple. El resultado se puede ver en este vídeo:
Control de intensidad de un LED con un botón
Ahora vamos a controlar la intensidad del LED mediante un botón. Cuando se pulsa el botón, la intensidad del LED va aumentando, y cuando se suelta, va disminuyendo.
Necesitaremos:
-1 LED.
-1 botón.
-1 resistencia de 10k Ohms.
Conectaremos los componentes del siguiente modo:
Como se puede ver, usamos el pin digital 8 con el botón, y el 9 con el LED.
El código que hemos empleado es el siguiente:
const int fadeTimerFreq = 30;
// fadeTime is the total time it will take to complete the ease (in milliseconds)
const int fadeTime = 3000;
// <<
// additional variable for the timer
int currentTime, fadeTimerLast;
// these constant variables store the pin numbers
const int ledPin = 9;
const int buttonPin = 8;
const int fadeRange = 254;
// the amount to step the fade; must be between 1 and the fadeRange