Aventuras y Desventuras de un hobbyist

Aventuras y Desventuras de un hobbyist....
Mostrando entradas con la etiqueta Soldar. Mostrar todas las entradas
Mostrando entradas con la etiqueta Soldar. Mostrar todas las entradas

Real Time clock para Arduino(DS1307)

El uso de un reloj es fundamental en algunos procesos con nuestro arduino especialmente cuando queremos enviar datos usando cualquier protocolo.
El reloj nos servira  para no tener simplemente datos sino saber cuando se han relalizado dichos cambios en los inputs.
Para este proyecto necesitaremos lo siguiente:
  • Arduino
  • Cristal de quarzo de 32.768 kHz
  • MAXIM DS1307
  • Socket de 8 pines
  • CR2032 3v bateria
  • CR2032 PCB socket
  • 2* resistencias de 2.2K.
  • Perfboard.
El diagrama es el siguiente:

    Luego de soldar el resultado es este:



    El código al final del post.

    Mas datos:

    El DS1307 es un reloj/calendario de bajo consumo con 56 bytes SRAM. El reloj/calendario nos da segundos, minutos, horas, dias y años. La fecha al finla del mes is automaticamente ajustada para meses con menos de 31 dias. El DS1307 funciona como esclavo en el us I2C . Se obtine acceso implementando una condición START y dando un codigo de identificación (0x68) seguido por una dirección registrada asi registros subsecuentes puenden ser accedidos secuencialmente. El DS1307 vienen en un 8-pin dip package. 

    Bit 7 del registro 0 es el clock halt (CH) bit. Cuando este bit  se cambia a 1, el oscilador se deshabilitathe y si vuelve a 0, el oscilador se habilita. Si no se cambia a 0 el reloj no funcionara.

    Ds1307 pin out
    Solo los primeros 8 bytes (0x00 - 0x07) son usados por el reloj y los otros 56 se usan com RAM adicional.
    DESCRIPCIÓN DE PINES
    Pins 1, 2 para el cristal de quarzo 32.768kHz no se necesita capacitor.
    Pin 3 VBAT Bateria de backup de 3v.
    Pin 4 GND Ground
    Pin 5 SDA Serial Data Input/Output. SDA es el data input/output para la interface I2C y requiere una resistencia pull-up Arduino pin 4.
    Pin 6 SCL Serial Clock Input. SCL  es el input del reloj para el  I2C y es usado para sincronizar el movimiento de datos en el puerto serie . Arduino pin 5.
    7 SWQ/OUT Square Wave/Output Driver. cuando esta habilitado el  SQWE bit  con valor 1,  SQW/OUT pin outputs uno de cuatro square-wave frecuencias (1Hz, 4kHz, 8kHz, 32kHz). El SQW/OUT pin requiere una resistencia pull-up. SQW/OUT Funciona con  VCC o VBAT . Un LED y 220 ohm resistencia en series conectada a VCC produce 1 HZ blink.  Esta es una buena forma de saber si el reloj esta funcionando.
    8 VCC (5 volts)


    //
    // Maurice Ribble
    // 4-17-2008
    // http://www.glacialwanderer.com/hobbyrobotics
    
    // This code tests the DS1307 Real Time clock on the Arduino board.
    // The ds1307 works in binary coded decimal or BCD.  You can look up
    // bcd in google if you aren't familior with it.  There can output
    // a square wave, but I don't expose that in this code.  See the
    // ds1307 for it's full capabilities.
    
    #include "Wire.h"
    #define DS1307_I2C_ADDRESS 0x68
    
    // Convert normal decimal numbers to binary coded decimal
    byte decToBcd(byte val)
    {
      return ( (val/10*16) + (val%10) );
    }
    
    // Convert binary coded decimal to normal decimal numbers
    byte bcdToDec(byte val)
    {
      return ( (val/16*10) + (val%16) );
    }
    
    // Stops the DS1307, but it has the side effect of setting seconds to 0
    // Probably only want to use this for testing
    /*void stopDs1307()
    {
      Wire.beginTransmission(DS1307_I2C_ADDRESS);
      Wire.send(0);
      Wire.send(0x80);
      Wire.endTransmission();
    }*/
    
    // 1) Sets the date and time on the ds1307
    // 2) Starts the clock
    // 3) Sets hour mode to 24 hour clock
    // Assumes you're passing in valid numbers
    void setDateDs1307(byte second,        // 0-59
                       byte minute,        // 0-59
                       byte hour,          // 1-23
                       byte dayOfWeek,     // 1-7
                       byte dayOfMonth,    // 1-28/29/30/31
                       byte month,         // 1-12
                       byte year)          // 0-99
    {
       Wire.beginTransmission(DS1307_I2C_ADDRESS);
       Wire.send(0);
       Wire.send(decToBcd(second));    // 0 to bit 7 starts the clock
       Wire.send(decToBcd(minute));
       Wire.send(decToBcd(hour));      // If you want 12 hour am/pm you need to set
                                       // bit 6 (also need to change readDateDs1307)
       Wire.send(decToBcd(dayOfWeek));
       Wire.send(decToBcd(dayOfMonth));
       Wire.send(decToBcd(month));
       Wire.send(decToBcd(year));
       Wire.endTransmission();
    }
    
    // Gets the date and time from the ds1307
    void getDateDs1307(byte *second,
              byte *minute,
              byte *hour,
              byte *dayOfWeek,
              byte *dayOfMonth,
              byte *month,
              byte *year)
    {
      // Reset the register pointer
      Wire.beginTransmission(DS1307_I2C_ADDRESS);
      Wire.send(0);
      Wire.endTransmission();
    
      Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
    
      // A few of these need masks because certain bits are control bits
      *second     = bcdToDec(Wire.receive() & 0x7f);
      *minute     = bcdToDec(Wire.receive());
      *hour       = bcdToDec(Wire.receive() & 0x3f);  // Need to change this if 12 hour am/pm
      *dayOfWeek  = bcdToDec(Wire.receive());
      *dayOfMonth = bcdToDec(Wire.receive());
      *month      = bcdToDec(Wire.receive());
      *year       = bcdToDec(Wire.receive());
    }
    
    void setup()
    {
      byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
      Wire.begin();
      Serial.begin(9600);
    
      // Change these values to what you want to set your clock to.
      // You probably only want to set your clock once and then remove
      // the setDateDs1307 call.
      second = 45;
      minute = 3;
      hour = 7;
      dayOfWeek = 5;
      dayOfMonth = 17;
      month = 4;
      year = 8;
      setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
    }
    
    void loop()
    {
      byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
    
      getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
      Serial.print(hour, DEC);
      Serial.print(":");
      Serial.print(minute, DEC);
      Serial.print(":");
      Serial.print(second, DEC);
      Serial.print("  ");
      Serial.print(month, DEC);
      Serial.print("/");
      Serial.print(dayOfMonth, DEC);
      Serial.print("/");
      Serial.print(year, DEC);
      Serial.print("  Day_of_week:");
      Serial.println(dayOfWeek, DEC);
    
      delay(1000);
    }
    
    

    Arduino RS232 Shield

    Me pareció interesante la idea de interconectar Arduinos y así formar redes, para ello tenemos diferentes formas de hacerlo: RS232, I2C,RS485 y BusCAN.
    Iré investigando estos 4 protocolos en el orden citado arriba.
    En esta ocasión toca ver el RS232 que también sirve para conectar nuestro ***duino al ordenador.
    Para comunicar RS232 y Arduino que utiliza TTL necesitaremos convertir la señal, se lo puede hacer a través de un sistema simple con transistores y resistencias pero también se puede utilizar un IC dedicado a ello, hablamos del MAX232 de Maxim.
    Existe diferentes tipos de configuraciones, yo he seguido la que se nos presenta en la web de Arduino pero no tuve éxito. Link
    La mayoría de mis proyectos los hago sobre Paperduino en sus diferentes versiones, luego de buscar mucho y probar  encontré un shield para easyduino que  me funciono y sirvió de base este shield.
    El esquema (sch)se muestra en la imagen de abajo.


     
      La plantilla para el lado del cobre de una Stripboard de 11*11 huecos.
    Imagenes del proceso de soldado.



    Y el resultado final luego de soldar es el siguiente:


    Los pines de la derecha en la imagen de arriba sirven para conectarse a **duino:


    Abajo fotos del shield conectado al Papeduino Stripboard y  Paperduino PCB

    Por si alguien esta interesado descargarse el archivo eagle(sch):

    Home made Arduino II

    Según lo comentado en el post anterior "Home made Arduino I" pude cargar el bootloader en el Atmega.328 usando el programador paralelo.

    Para este proyecto de paperduino he estrenado mi insoladora casera que lamentablemente no ha funcionado, no se si ha faltado tiempo de insolado (7 minutos) o no he manipulado correctamente la placa fotosensible, bueno el caso que luego de insolar la placa y luego de usar el químico para revelar me he encontrado con la sorpresa de que mi placa ha salido como una placa virgen de cobre.
    He tenido que recurrir al método "pcb a la plancha" y este fue el resultado:
    Seguidamente procedí a hacer los agujeros en la pcb, el clásico sistema del clavo para hacer la guía.
    Y asi luego usar el taladrin.
    Finalmente aquí tenéis la placa soldada y conectada a una batería de 9v.
      
    No he podido hacer uso de la paper-etiqueta porque dificultaba la visión a la hora de introducir los componentes ya que al realizar los huecos con taladrin y a mano sobre la PCB se tiene poca precisión especialmente a la hora de introducir el zócalo para el Atmega328.

    Insoladora casera de leds UV

    Como a partir de ahora realizare pequeñas placas me he decidido buscar un método casero para crear PCBs, he visto que el método de la plancha da resultados pero si la placa es muy pequeña parece ser que este método no funciona. 

    Debo decir que no lo he probado pero que por lo que he encontrado en internet la balanza se inclina en que es un poco difícil conseguir que la impresión se pegue en la placa, aunque hay personas que tienen este método totalmente contralado y que obtienen resultados casi profesionales.

    Leyendo me he enterado que las  insoladoras aseguran fidelidad en la transferencia del fotolito a la placa. Como estoy corto de presupuesto he buscado una insoladora casera y hay muchísimos diseños en internet.

    Por un momento estuve a punto de embarcarme en la realización de una insoladora dentro de un escáner viejo(Link1 Link2) , hasta que encontré una que he es pequeña y que será suficiente para mis necesidades a mediano plazo.
    La idea de tener un cacharo del tamaño de un scaner para hacer PCBs de 7x7cm máximo no me gustaba mucho.
    El Diseño lo he sacado de la web de los chicos de RadikalDesig Insoladora leds UV de tamaño compacto, buena presentacion y leds UV.
    Me hecho con todo lo necesario:

    54 Leds UV de 300nm 100leds en Ebay por 12€
    18 resistencias de 68 ohms, 1/4W - 0.36 €
    1 conector de dos polos tipo regleta - 0.50€
    1 condensador electrolitico de 2200uF y 30v -
    1 placa de cobre virgen 100x160 unos 7.6 €


    Los chicos de RadikalDesig tienen la suerte de tener una insoladora con la cual han transferido el circuito a la placa, en mi caso yo no dispongo de dicho equipo por lo que opte por usar el método “PCB  a la plancha” , no se si fue el papel que utilizaba o la plancha pero me llevo unos cuantos intentos hasta obtener una transferencia más o menos decente, a pesar de ello tuve que repintar las pistas con un marcador indeleble y luego del ataque químico aquí tenéis el resultado:

    Siguiendo el tutorial me he comprado una caja de maquillaje de los chinos. 9€
    Luego de soldar los componentes en la PCB y montar la PCB dentro de la caja, este es el resultado:
    La parte interior:
    La parte trasera con su conector hembra para usar un adaptador 12v. 
    Y finalmente con el cristal y la espuma en la tapa para tener un buen contacto entre la trasnparencia y la pcb.
    Ahora toca conseguir las transferencias, imprimir, insolar y ver que pasa.

    Para esta ocacion he elegido hacer un paperduino.

    LCD Shield

    Acabo de realizar un shield para mi LCD debido a que llego un momento en que era incomodo tener que enchufar los 10 cables cada vez que necesitase usar el LCD.

    Mi shield esta basado en este link:

    Y aqui el resultado final:


    Practical Arduino -Cool Projects for Open Source Hardware

    Luego del terminar el primer libro de Arduino queda un sabor a "quiero más", esta vez seguirá las instrucciones del libro "Practical Arduino -Cool Projects for OpenSource Hardware."

    A primera vista el libro promete un nivel de dificultad mucho mas alto, he visto que se pude controlar un enchufe con control remoto desde Arduino y también hay un termómetro online.

    Ya iré contando sobre los avances.....