jueves, 2 de julio de 2015

30 Ejemplos prácticos con arduino nivel básico, simulados en proteus+codigo en c y arduino

Hola de nuevo
traigo unas prácticas con arduino de nivel básico para los que se quieran iniciar en este campo.
todo va simulado en Proteus con su código en c,  los archivos .pde de los sketchs y un video demostrando el funcionamiento de cada ejemplo.
Sin más empezamos

Ejercicio 1 Blink

/*
* Intermitente
*
* Ejemplo básico con Arduino. Encendido y apagado de un led
* con una cadencia de 1 sg. usando el PIN 13 como salida
* no es necesario usar una resistencia para el led
* la salida 13 de Arduino la lleva incorporada.
*
* http://www.arduino.cc/en/Tutorial/Blink
*/
//Práctica de Luisdlahuerta
int ledPin = 13; // Definición de la salida en el PIN 13
void setup() //Configuración
{
pinMode(ledPin, OUTPUT); // designa la salida digital al PIN 13
}
void loop() // bucle de funcionamiento
{
digitalWrite(ledPin, HIGH); // activa el LED
delay(1000); // espera 1 seg. (tiempo encendido)
digitalWrite(ledPin, LOW); // desactiva el LED
delay(1000); // espera 1 seg. (tiempo apagado)
}

Simulación en proteus y código en c pinchando aqui


Ejercicio 2 Blink con Botón


//blink con botón
//Práctica de Luisdlahuerta
int ledPin=13;           // elijo el pin13 para el led
int inPin=5;             // elijo el pin d5 para entrada del botón
int val=0;               //declaro la variable para leer el estado del botón

void setup() {
pinMode(ledPin,OUTPUT);  //declaro el led como salida
pinMode(inPin,INPUT);    //declaro el pin del boton como entrada
}

void loop() {
val=digitalRead(inPin);   //Lee el valor de entrada del botón
if(val==HIGH){            //Chequea si el valor leido en el botón es 
                          //alto "1"(boton presionado)
digitalWrite(ledPin,LOW); //pone el led en off
}else{
digitalWrite(ledPin,LOW);  //apaga el led
delay(100);               //retardo 100ms  
digitalWrite(ledPin,HIGH);//enciende el led
delay(100);               //retardo 100ms
}
}

 

Simulación en proteus y código en c pinchando aqui

Ejercicio 3 Encendido y apagado de 3 leds


//Encendido y apagado de 3 led
//Práctica de Luisdlahuerta
int ledPin1=6;           //Defino las salidas de los leds
int ledPin2=7;
int ledPin3=8;
void setup() {           //configuro las salidas para los leds
pinMode(ledPin1,OUTPUT); //definidos como salidas
pinMode(ledPin2,OUTPUT);
pinMode(ledPin3,OUTPUT);
digitalWrite(ledPin1,LOW);//Apago los leds
digitalWrite(ledPin2,LOW);
digitalWrite(ledPin3,LOW);
}

void loop() {              //Bucle de funcionamiento
digitalWrite(ledPin1,HIGH);//Enciende y apago los leds cada 100ms
delay(100);
digitalWrite(ledPin1,LOW); 
delay(100);
digitalWrite(ledPin2,HIGH);//Enciende y apago los leds cada 100ms
delay(100);
digitalWrite(ledPin2,LOW); 
delay(100);
digitalWrite(ledPin3,HIGH);//Enciende y apago los leds cada 100ms
delay(100);
digitalWrite(ledPin3,LOW); 
delay(100);
}




Simulación en proteus y código en c pinchando aqui

Ejercicio 4 Lectura del estado de un botón

//Lectura del estado de un botón
// detecta si el boton se esta pulsando o no y enciende un led 
//Práctica de Luisdlahuerta
int ledPin=13;  //Pin del led
int inPin=10;   //Pin del boton
int value=0;    //establezco el valor del pulsador en cero

void setup() {
pinMode(ledPin,OUTPUT);  //establezco el pin del led como salida
pinMode(inPin,INPUT);    //establezco el pin del boton como entrada digital
}

void loop() {
value = digitalRead(inPin); //lee el valor del botón en la entrada digital
digitalWrite(ledPin, value);
}




Simulación en proteus y código en c pinchando aqui

Ejercicio 5 Lectura de la entrada analógica de un potenciometro

//potenciométro lectura de señal analógica
//enciende y apaga un LED conectado al pin digital #13;
// La cantidad de tiempo que el LED parpadeará depende del
//valor obtenido mediante analogRead(). En este caso al pin A0
//Práctica de Luisdlahuerta

int potPin=0;                //Defino el pin A0 como entrada analógica para el potenciómetro
int ledPin=13;               //defino el pin D13 para el led indicador
int val=0;                   //variable para almacenar la lectura del potenciómetro

void setup() {
pinMode(ledPin,OUTPUT);      //Declaro el led como salida
}
void loop() {
val=analogRead(potPin);      //Lee el valor del potenciómetro
digitalWrite(ledPin,HIGH);   //Enciende el led 
delay(val);                  //Detiene el programa por un tiempo igual a la lectura del potenciómetro
digitalWrite(ledPin,LOW);    //Apaga el led
delay(val);                  //Detiene el programa por un tiempo igual a la lectura del potenciómetro

}


Simulación en proteus y código en c pinchando aqui

Ejercicio 6 El coche fantástico 1

/*El coche fantástico 1
*/
//Práctica de Luisdlahuerta
int pin2 = 2; // PIN-es de los LED
int pin3 = 3;
int pin4 = 4;
int pin5 = 5;
int pin6 = 6;
int pin7 = 7;
int timer = 100; // Temporizador
void setup(){
pinMode(pin2, OUTPUT); // Configuración de los PIN-es como salida
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
}
void loop() {
digitalWrite(pin2, HIGH); // Enciende y apaga secuencialmente LED-s
delay(timer);
digitalWrite(pin2, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin7, HIGH);
delay(timer);
digitalWrite(pin7, LOW);
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
}


Simulación en proteus y código en c  pinchando aqui

Ejercicio 7 coche fantástico 2 con ciclo for


//el coche fantastico 2 reduciendo las lineas de codigo con un ciclo FOR
//Práctica de Luisdlahuerta
int pinArray[]={2,3,4,5,6,7};          //se define el array de pines, y ahorramos codigo
int count=0;                           //variable contador 
int timer=100;                         //temporizador con un valor de 100ms

void setup() {
for(count=0;count<6;count++){          //Sentencia For cuenta parriba
pinMode(pinArray[count],OUTPUT);       //configuramos todos los pines de los leds como salida
  }
}

void loop() {
for(count=0;count<6;count++){          //recorrido de ida, cuenta parriba con For
  digitalWrite(pinArray[count],HIGH);  //Ponemos los led en High, alto
  delay(timer);
  digitalWrite(pinArray[count],LOW);   //Apagamos los leds
  delay(timer);
}
for(count=5;count>=0;count--){         //recorrido de vuelta, pabajo los leds con for
  digitalWrite(pinArray[count],HIGH);  //Encendemos los leds
  delay(timer);
  digitalWrite(pinArray[count],LOW);  //Apagamos los leds
  delay(timer);
  }
}


Simulación en proteus y código en c  pnchando aqui

Ejercicio 8 coche fantástico 3 efecto visual


//El coche fantástico 3

int pinArray[]={2,3,4,5,6,7};         //pines del array
int count=0;                          //Contador
int timer=30;                         //temporizador

void setup(){

  for(count=0;count<6;count++){       //Incremeto
    pinMode(pinArray[count],OUTPUT);   //Configuramos todos los pines de una vez
    }
}

void loop(){                          //bucle
  
  for(count=0;count<5;count++){       //enciende los leds creando una estela visual
    digitalWrite(pinArray[count],HIGH);
    delay(timer);
    digitalWrite(pinArray[count+1],HIGH);
    delay(timer);
    digitalWrite(pinArray[count],LOW);
    delay(timer*2);
    }
  for(count=5;count>0;count--){
     digitalWrite(pinArray[count],HIGH);
    delay(timer);
    digitalWrite(pinArray[count-1],HIGH);
    delay(timer);
    digitalWrite(pinArray[count],LOW);
    delay(timer*2);
  }
}




Simulación en proteus y código en c   pinchando aqui


Ejercicio 9 Estrella fugaz


//Estrella fugaz, variante del coche fantastico
//Práctica de Luisdlahuerta

int pinArray[]={2,3,4,5,6,7,8,9,10,11,12};    //declaracion de pines mediante un array
int controlLed=13;                            //Led de control
int waitNextLed=100;                          //tiempo antes de encender el siquiente led
//Número de les que permanecen encendidos antes de empezar a apagarlos para formar la cola
int tailLength=4;                             //Numero de leds conectados(tamaño del array)
int lineSize=11;

void setup(){
int i;
pinMode(controlLed,OUTPUT);                 //configuramos los pines como salida digital
for(i=0;i<lineSize;i++){
pinMode(pinArray[i],OUTPUT);
 }
}

void loop()
{                                          //bucle
int i;
int tailCounter = tailLength;                         //Se establece la longitud de la cola en un contador
digitalWrite(controlLed, HIGH);                       //Se enciende el led de control para indicar el incio del loop
for (i=0; i<lineSize; i++)                            //For de incremento
{                      
digitalWrite(pinArray[i], HIGH);                     //Se encienden consecutivamente los leds
delay(waitNextLed);                                  //esta variable de tiempo controla la velocidad a la que se mueve la estrella
if (tailCounter == 0)                                //aqui cuidado!! puse ; sin querer y no daba con la falla XD
{
digitalWrite(pinArray[i-tailLength],LOW);           //Se apagan los leds en funcion de la longitud de la cola
}
else
if (tailCounter > 0)
tailCounter--;
}
for (i=(lineSize-tailLength); i<lineSize; i++)
{
digitalWrite(pinArray[i],LOW);                     //se apagan los leds
delay(waitNextLed);
}
}



Simulación en proteus y código en c pinchando aqui

Ejercicio 10 Cuenta pulsador


//Contar las veces que se pulsa un botón
//el botón va a estar en el pin digital 7 y a la vez que contamos
//encendemos un led conectado al pin digital 13
//Práctica de Luisdlahuerta

int led=13;
int boton=7;
int valor=0;
int contador=0;
int estadoanteriorboton=0;

void setup(){
  Serial.begin(9600);             //configuración de los baudios de transmisión para el puerto com
  pinMode(led,OUTPUT);           //inicializa como salida el pin digital 13 (led)
  pinMode(boton,INPUT);          //inicializa como entrada el pin digital 7 (boton)
  }

void loop(){                     //bucle
  valor=digitalRead(boton);      //lee el valor de la entrada digital del boton en pin d7
  digitalWrite(led,valor);
    if(valor!=estadoanteriorboton){
      if(valor==1){
        contador++;
        Serial.print(contador);
        Serial.write(10);
        Serial.write(13);
      }
    }
      estadoanteriorboton=valor;
  }


Simulación en proteus y código en c pinchando aqui

Ejercicio 11 Contador modificado


Código

/* Main.ino file generated by New Project wizard
 *
 * Created:   Thu Sep 5 2013
 * Processor: ATmega328P
 * Compiler:  Arduino AVR
 */

//Contador modificado
//Práctica de Luisdlahuerta
//es muy parecido al anterior sketch pero ahora al pulsar el boton introducimos un "=" en el pin d7
//por lo tanto para que se encienda la salida del pin d13 hay que escribir en ella un valor leido negado
//"!valor!

int led=13;
int boton=7;
int valor=0;
int contador=0;
int estadoanteriorboton=0;

void setup(){
  Serial.begin(9600);                           //configuro la velocidad de los baudios de transmisión
  pinMode(led,OUTPUT);                          //inicializo como salida el pin digital 13
  pinMode(boton,INPUT);                         //inicializo como entrada digital el pin 7
  digitalWrite(boton,HIGH);                     //habilito la resistencia interna pull-up del pin d7
 }
void loop(){
  valor=digitalRead(boton);                     //leo el valor de la entrada d7, el boton 
  digitalWrite(led,!valor);                     //Escribimos en la salida el valor leido negado
    if(valor!=estadoanteriorboton){
      if(valor==1){
        contador++;
Serial.print("Has pulsado  ");
        Serial.print(contador);
Serial.print("  Veces  ");
        Serial.write(10);
        Serial.write(13);
      }
    }
      estadoanteriorboton=valor;
    }



Simulación en Proteus y código en c pinchando aqui

Ejercicio 12 Contador de cero a 10 con pulsador


Código

/* Main.ino file generated by New Project wizard
 *
 * Created:   Thu Sep 5 2013
 * Processor: ATmega328P
 * Compiler:  Arduino AVR
 */

//Contador de 0 a 10 ejercicio 12
//Práctica de Luisdlahuerta
//cuando el valor del contador llegue a 10 se pondrá en cero de nuevo


int led=13;
int boton=7;
int valor=0;
int contador=0;
int estadoanteriorboton=0;

void setup(){
  Serial.begin(9600);                    //Configuro los baudios de transmision del puerto com
  pinMode(led,OUTPUT);                   //inicializa el pin 13 como salida digital
  pinMode(boton,INPUT);                  //inicializa el pin 7 como entrada digital
}

void loop(){
  valor=digitalRead(boton);              //lee el valor del boton en pin d7
  digitalWrite(led,valor);

    if(valor!=estadoanteriorboton){
      if(valor==1){
        contador++;
        Serial.print("Has pulsado  ");
        Serial.print(contador);
        Serial.print("  veces");
        Serial.write(10);
        Serial.write(13);
          if(contador==10){             //limito la cuenta a un valor de 10 para la variable contador
            contador=0;
            }
      }
 
    }
      estadoanteriorboton=valor;
    }


Simulación en Proteus y código en c pinchando aqui




seguimos mañana que ya es tarde 
Saludos





viernes, 26 de junio de 2015

Recopilación de Librerías de Eagle y Proyectos

Hola
En esta ocasión voy a subir todas mis librerías de Eagle con todos mis proyectos hasta  la fecha, más que nada para tener una copia de seguridad, y como no para poder compartirlas con los demás.
Este es el enlace de descarga por mega de los proyectos, pincha aqui (aproximadamente 26 megas)
y por otro lado las librerías que pesan algo más, pincha aqui

Para cualquier duda o sugerencia,  mi correo es Luisdlahuerta@hotmail.com
Saludos


lunes, 22 de junio de 2015

Módulo 2 relés 12v comandados por 5v del microcontrolador

Hola de nuevo

En esta ocasión quiero presentaros una plaquita con 2 relés de 12v comandados por 5v para poder utilizarla con microcontroladores como los de la familia de atmel (arduino) o PIC de Microchip.
Sin más os muestro el esquemático de este pequeño proyecto.



Un pequeño video para mostrar su funcionamiento.

Los archivos de descarga por Mega aqui

Espero que os haya gustado el post.
Para cualquier duda o sugerencia,  mi correo es Luisdlahuerta@hotmail.com
Saludos



Placa Entrenadora para PIC18F2455 en formato smd

Hola de nuevo

Tenía un Matrix nand Programmer para leer y escribir las nand de xbox 360 por ahí rodando en casa. Como ya no lo uso (me pasé a squirt que es mucho más rápido) y tiene un pic 18f en smd pues se me ocurrió usarlo para hacer esta entrenadora. Este pic tiene comunicación por usb
El reto ha sido hacerlo todo en smd con los medios de que dispongo, y sin hacer ni un sólo taladro en la pcb.


Sin más paso a mostraros el esquemático de esta entrenadora y las fotos. Todos los archivos están en el archivo rar que dejaré al final del post (descarga directa por Mega).

Esquemático


Cara  Top

Cara Top con componentes

Fotos sacadas con el microscopio usb
















La prueba de fuego con mi pickit2

Los archivos de descarga por Mega aqui

Espero que os haya gustado el post.
Para cualquier duda o sugerencia,  mi correo es Luisdlahuerta@hotmail.com
Saludos










Programador PicKit2 con zócalo multipic hasta 40 pines

En esta ocasión voy a mostrar como fabricar un programador usb para la familia de microcontroladores PIC (Circuito integrado programable).
el diseño de la placa y el esquemático está hecho en Eagle. Espero que sea de ayuda para los que quieran montarse uno.
Decidí hacerme este porque me parece muy útil tener el puerto para el icsp y el zócalo multi de 40 pines en la misma placa.

Empecemos por el diagrama esquemático.

La lista de componentes para montar este programador son:

C1                      47uF 
C2 y C3             15pF   encapsulado smd 0805
C4                     100nF  encapsulado smd 0805
C5                     10uF           
C6                     47uF                   
D1                     1N4148
IC1                    PIC18F2550_28DIP + Correspondiente zócalo de 28 pines   
ICSP                 Tira de pines acodado  6 pines  modelo en eagle;  MA06  
L1                      Bobina 680 uH (se puede hacer casera, pero yo la compré ya con este valor)
Led1 y 2            Led de 5mm del color que se quiera
Q1,2 y 3            BC548    encapsulado TO92-EBC/NPN   
Q4                     BC557    encapsulado TO92-EBC/PNP                                            
X1                     20MHz   encapsulado smd, tambien puede usarse uno dil.
R1                     1K           encapsulado smd  M0805
R2 y 4               4.7K        encapsulado smd  M0805     
R3                     100          encapsulado smd  M0805
R5                     2.7K        R-US_0204/7  
R6                     100k         R-US_0204/7  
R7                     10k           R-US_0204/7      
R8                     10K          encapsulado smd  M0805
R9  y 10            330R        encapsulado smd  M0805
R11                   10K          encapsulado smd  M0805
R12                   10K          encapsulado smd  M0603  
R13,14 y 16      33             R-US_0204/7                                                                                                   SV1                  Tira 3 de pines vertical        MA03-1                                
U$1                  ZIFSOCKET-40 (Zócalo verde)
X2                    USB_4P  
Una pieza de pcb de 9x8 cm 



Os paso unas capturas del proceso de fabricación:
Insoladora con el fotolito 
Leds uv de la insoladora
 Atacado con ácido después del revelado de la película fotosensible


 Con alcohol y algodón quitamos la película fotosensible.. ya no nos sirve,
 presentación del fotolito de la cara de componentes  y empiezo a poner las piezas
 Acabado con todos los componentes
 Cara de cobre ya lacada
Prueba de funcionamiento del programador, va perfecto XD
Los archivos de descarga pinchando aqui, tanto esquemático como pcb en Eagle.
El archivo .HEX del micro aqui.
El programa para el Pickit 2 en Windows aqui
Espero que les haya gustado el post.
Para cualquier duda mi correo es
 Luisdlahuerta@hotmail.com
Saludos