martes, 20 de agosto de 2013

Escaner Térmico

Bueno pues nada, esta vez os presento un escaner termico que he hecho estos días.

Ingredientes:
- 1 palca Arduino Uno
Arduino UNO rev3
- 2 servomotores
Micro servo miniatura digital DS65HB
- 1 sensor de temperatura por infrarrojos MLX90614
Sensor de temperatura MLX90614
- 1 puntero laser para indicar el punto donde estamos midiendo
Diodo Laser Rojo 0.8 mW
Unas horas de picar código en Arduino y en Visual Basic y el resultado es el siguiente:


La idea la saque del blog de Bricogeek

En ella podéis encontrar todo el material utilizado en esta aplicación. No dejéis de pasar por ella si os gusta este mundillo, tiene cosas muy interesantes.

domingo, 3 de febrero de 2013

Control 0-10V con PIC12F1840

Esta entrada del blog muestra el desarrollo de una tarjeta de circuito impreso para controlar una señal de entrada y otra de salida de 0-10V desde un pequeño microcontrolador de Microchip PIC12F1840.


Lo que queremos conseguir es lo siguiente:


  • Que el circuito sea capaz de entregar una señal de 0-10V para controlar un actuador mediante esta señal. Por ejemplo, un motor mediante un variador de frecuencia que tenga una entrada 0-10V, o un balastro de luces fluorescentes con interfaz DALI para poder regular la luz del fluorescente mediante esta señal de 0-10V, o un dimmer o muchos otros dispositivos.
  • Que también sea capaz de leer mediante un sensor el estado del actduador con una señal de entrada de 0-10V o 0-5V.
  • Además enviará y recibirá datos desde un PC para poder controlar o mostrar en una gráfica el control del actuador y el sensor.
Primer Paso: realizar el esquema electrónico de la PCB.


Segundo Paso: Diseñar el routeado de la tarjeta electrónica:


Tercer Paso: Generar archivos gerber y fabricar físicamente la tarjeta electrónica. Este paso se puede hacer manual para quien tenga las herramientas necesarias (placas, insoladora, acidos, etc). Yo he decidido buscar un fabricante de tarjetas electrónicas para darle un acabado más profesional.

He decidido hacerlo con una empresa China, por que los fabricantes de la zona suelen ser muy caros.
Os dejo el link por si estais interesados:
PCBCART

Me ofrecieron un servicio rápido y profesional.

El resultado fue este:


Estoy a la espera de los componentes electrónicos para acabar de montarla y probarla, pero mientras he decidido comenzar el diseño del firmware y simularlo con el simulador Proteus.

La herramienta elegida para hacer el firmware es MPALB X que es la herramienta oficial de Microchip, el fabricante del microcontrolador usado. Esta herramienta de desarrollo se puede descargar desde la pagina de Microchip y tiene una versión gratuita que son servirá para nuestros desarrollos.

Lo primero que he querido desarrollar del firmware es la parte de comunicaciones, de esta manera cuando comience a realizar la parte de las entrada y salida analógicas podre visualizar los datos en el PC.

El primer programa hace parpadear un LED para probar las entradas y salidas del PIC y envía un mensaje al PC junto con una variable que se va incrementando.


#include <xc.h>
#include <stdlib.h>
#include <stdio.h>


// PIC12F1840 Configuration Bit Settings

// CONFIG1
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON        // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = ON      // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON         // Low-Voltage Programming Enable (Low-voltage programming enabled)

#define _XTAL_FREQ 32000000

//Definicion de Pines I/O
#define DACPin      PORTAbits.RA0
#define ADCPin      PORTAbits.RA1
#define TachoPin    PORTAbits.RA2
#define ResetPin    PORTAbits.RA3
#define TxPin       PORTAbits.RA4
#define RxPin       PORTAbits.RA5

void Config(void);
void putch(char c);

/******************************************************/
/* Programa principal                                 */
/******************************************************/
int main(void) {
    int a=0;
    Config();
    while(1){
        DACPin = !DACPin;
        printf("Hola lectores de BitPic %i\r",a++);
        __delay_ms(1000);
    }

}

/*****************************************************************/
/* Configuracion de los registros del PIC                        */
/*****************************************************************/
void Config(void){

    // Configuración cristal interno a 16MHZ
    OSCCONbits.IRCF0 = 0;
    OSCCONbits.IRCF1 = 1;
    OSCCONbits.IRCF2 = 1;
    OSCCONbits.IRCF3 = 1;
    OSCCONbits.SCS0 = 1;
    OSCCONbits.SCS1 = 1;

    //Caonfiguracion I/O
    ANSELA = 0b00000000;             // Entradas analogicas desactivadas
    TRISAbits.TRISA0 = 0;   // DAC
    TRISAbits.TRISA1 = 1;   // ADC
    TRISAbits.TRISA2 = 1;   // Tacho
    TRISAbits.TRISA3 = 1;   // Reset PIN
    TRISAbits.TRISA4 = 0;   // Tx
    TRISAbits.TRISA5 = 1;   // Rx

    APFCONbits.RXDTSEL = 1;
    APFCONbits.TXCKSEL = 1;

    //Configuración
    BAUDCON = 0b00000000;
    INTCON = 0b00000000;
    PIE1 = 0b00000000;
    PIR1 = 0b00000000;
    RCSTA = 0b10010000;
    TXSTA = 0b00100000;

    SPBRGL = 51; // 9600 baudios a 32MHz
    SPBRGH = 0; // 9600 baudios a 32MHz
}
/********************************************************************/
/*Implementacion de putch para poder enviar mensajes con printf*/
/*putch envia un caracter y prinf envia una cadena de caracteres*/
/********************************************************************/
void putch(char c){
    while (!TXIF);
    TXREG = c;
}


Ahora pasamos el programa al simulador PROTEUS y el resultado es el siguiente:























Hasta aquí el inicio de este proyecto, iré dejando más datos a medida que os vaya realizando.

domingo, 25 de noviembre de 2012

MikroC




Recientemente he encontrado un muy buen tutorial sobre los microcontroladores y más en concreto sobre los microcontroladores de Microchip y la IDE de programación MikroC.

No he probado esta IDE, pero tiene buena pinta.


Espero que este tutorial os ayude a comenzar a programar microcontroladores y crear vuestras propias aplicaciones.


domingo, 18 de noviembre de 2012

Tecnología

Bien venidos al Blog de BitPIC!

En este blog se publicarán proyectos y noticias relacionadas con tecnología electrónica como pueden ser:


- Diseños creado con microcontroladores PIC de Microchip


 - Utilización de sistemas libres como Arduino:


- Sistemas más potentes como Raspberry PI: