miércoles, 21 de diciembre de 2016

Tipos de botones en arduino

Hola amigos!
Hoy empezamos con una nueva sección en Arduteka: Las comparativas!
Estas comparativas pretenden servir de referencia a la hora de realizar la elección de que componente utilizar para nuestros hacks, una manera rápida de conocer el principal abanico de componentes a nuestra disposición de un vistazo, permitiéndonos customizar mucho más nuestros proyectos Arduino.
¿A quién no le ha pasado encontrar un pulsador o un diodo más adecuado para un prototipo ya terminado?
Además nos servirá para tener una descripción de uso para aquellos no iniciados en la electrónica! Espero vuestro feedback de esta sección pidiendo comparativas entre componentes, shields, o cualquier tema que creáis digno de una comparativa y que os facilite el trabajo en vuestros cacharreos!
Otra de las novedades es que, a partir de ahora, podremos disfrutar de muchos de los contenidos que se realizarán en Arduteka tanto en Español, como en Inglés, así pues, al principio de los artículos bilingües podréis observar la etiqueta [English Versión] con un enlace a la traducción del artículo. Vamos creciendo!!

Comparativa Pulsadores

En esta primera comparativa vamos a descubrir los principales pulsadores que vamos a poder utilizar en nuestros proyectos Arduino, desde los pequeños pulsadores de superficie hasta los teclados pasando por los botones tipo arcade, en esta comparativa vas a encontrar todo lo necesario para incluirlos en tu próximo hack!
En primer lugar y antes de adentrarnos en los diferentes tipos, podéis recordar en este tutorial como conectar un pulsador a vuestro Arduinomediante resistencias de pull-up o pull-down para evitar errores de lectura así como un pequeño ejemplo para conseguir encender un diodo LED.

Pulsadores tipo switch para pcb

Estos pulsadores se utilizan normalmente para montaje sobre PCB (Printed Circuit Board) o para pinchar sobre nuestra Protoboard en aquellos proyectos donde necesitemos un pulsador sin demasiado protagonismo, o bien para prototipar algo de una manera rápida; se caracterizan sobre todo por su reducido tamaño y se suelen utilizar normalmente para tensiones no superiores a 12v.
Switch, pulsador, button, led, pcb, arduteka, proyecto, arduino, tutorial
Los principales tipos que podemos encontrar en el mercado son los siguientes:
  • Pulsador Mini-Switch de 6mm: El más pequeño de todos con tan solo 6mm de lado y de actuación momentánea (solo cierra el circuito mientras estamos pulsando) en la siguiente imagen podemos ver sus conexiones internas, las cuales se van a repetir en casi todos los pulsadores de tipo switch, el hecho de tener 4 patillas, no nos quiere decir que tenga dos contactos internos, sino que tenemos un contacto al que tenemos acceso por dos lugares diferentes, un truco para recordar que patillas son las que están comunicadas interiormente es observar las que están enfrentadas entre sí, si se miran, están comunicadas!

switch, 6mm, pulsador, base, boton, pequeño, arduino, tutorial, arduteka, proyecto, ejemplo, comparativa

  • Pulsador Switch de 12mm: Exactamente igual que el anterior, salvo por su tamaño, que es el doble (12mm de lado), lo cual nos va a facilitar la vida si tenemos un proyecto en el que lo necesitemos pulsar a menudo.
  • Pulsador Switch de 12mm con LED: Un pulsador de tamaño similar al anterior pero con la característica añadida de incluir un diodo LEDintegrado el cual puede dar mucho juego en nuestros proyectos Arduino al poderlo activar o desactivar a través de una resistencia con una señal digital. ¿Te atreves a hacer una réplica del viejo juego SIMON? El negativo del diodo irá a la patilla serigrafiada como BN y el positivo a la patilla Nº10. Además, si lo deseamos, tenemos una placa Breakout COMO ESTA preparada para soldar estos pequeños e integrarlos de una manera muy elegante en vuestros hacks!

Pulsadores tipo arcade

Este tipo de pulsadores son perfectos para usar en proyectos que requieran un uso intensivo de ellos; semejantes a los que todos hemos usado alguna vez en las olvidadas recreativas, estos pulsadores nos harán revivir viejos momentos en los recreativos, donde tu estatus social dependía de cuan rápido eras capaz de apretar una otra vez el botón.
Boton, arcade, arduteka, arduino, pulsador, proyecto, tutorial, switch, comparativa
Los podermos encontrar de dos tipos:
  • Pulsador sencillo de 33mm: Un contacto simple que podremos utilizar, al igual que los anteriores pulsadores, con nuestro Arduino y si necesitamos trabajar con mayores intensidades, este tipo de botón nos va a permitir hasta un límite de 24A!! Más que suficiente para nuestros hacks!
Boton, arcade, arduteka, arduino, pulsador, proyecto, tutorial, switch, comparativa
  • Pulsador doble contacto 33mm: Similar en aspecto al anterior, pero con un contacto doble; en situación de reposo, tendremos cerrado el contacto entre COMún y NC (Normalmente cerrado) y cuando pulsemos, cerrará el contacto entre común y NO (Normalmente Abierto-Open) y abrirá el contacto entre Común y NC. Si conectamos el común a nuestra entrada Arduino, el terminal NC a 0v y el terminal NO a 5v, no nos hará falta la resistencia de pul-down para mantener estable la entrada sin falsas lecturas!!

Sensores táctiles

El Sensor táctil que os muestro, es de tipo capacitivo, esto quiere decir que está formado por unas láminas que hacen de condensador cuya capacidad se ve alterada al aproximar objetos de tipo no metal, cuando esa capacidad sobrepasa un límite, un pequeño controlador hace las funciones de interruptor permitiendo el paso de la corriente entre los terminales señalados.
En este ejemplo podemos observar un Sensor touch con conector de tipo Twig.
Un lugar donde podemos encontrar normalmente este tipo de sensores/pulsadores, es en vitrocerámicas o incluso en nuestros iPod!! Nos van a dar mucho juego, dado que los podemos colocar debajo de un cristal u otro material aislante, e incluso hacerlos invisibles para un acceso secreto y este seguirá funcionando al tocar dicha superficie! Por que no hacer un control de alarma integrado en un espejo??

Pulsadores para panel

Este tipo de pulsadores son usados normalmente para su montaje en cajas, tableros de control e incluso como interruptores en el caso de los pulsadores con bloqueo de estado; su robustez y facilidad de montaje dado su cuerpo roscado metálico, hacen de ellos los más duraderos frente al uso cotidiano.
Pulsador, Panel, Led, Arduino, Comparativa, Arduteka, Lock, Tutorial, Proyecto
Podemos encontrarnos varios tipos:
  • Pulsador momentáneo: Mantiene el estado sólo cuando lo tenemos pulsado.
  • Pulsador con bloqueo: Cambiará de estado cada vez que lo pulsemos, es decir, al pulsar una vez, cerrará el contacto, y hasta que no volvamos a pulsar, no lo volverá a abrir.
  • Pulsador con enclavamiento e iluminación: Este tipo de pulsadores tienen un diseño muy atractivo, disponen de un aro luminoso alrededor del pulsador además de un contacto doble como el explicado en el pulsador de tipo Arcade. El mostrado en este ejemplo, además es estanco,  por lo que resiste perfectamente zonas húmedas. El aro podremos conectarlo de 5v a 12v DC con una resistencia para controlar su intensidad.

Keypad o teclados

Los Keypad son tremendamente útiles para el control de nuestros proyectos, haciendo la lista de posibles aplicaciones casi infinita, desde utilizarlos para introducir contraseñas en una alarma, hasta usarlo como marcador telefónico con un módulo 3G.
Keypad, Arduino, Comparativa, proyecto, tutorial, Comparativa, pulsadores, Arduteka
En esta comparativa vamos a estudiar 2 tipos, en primer lugar, un keypad numérico y en el segundo, una placa con 5 pulsadores que podremos controlar con tan solo una salida de Arduino!!
Comencemos con el KeyPad numérico.
Arduteka, cabecera, camara, arduino academy, modulo 3G, GPS, gprs, Arduino, teclado matricial, led rgb, ultrasonidos, ping, altavoz, mp3, mms, sms, multimedia, diy, iot,
El funcionamiento es muy sencillo, un keypad no más que una matriz de conexiones dispuestas en filas y columnas, de izquierda a derecha y de arriba a abajo, de manera que si pulsamos el número 1, estaremos uniendo fila 1 con columna 1, si pulsamos el número 0, estaremos uniendo fila 4 con columna 2, etc.. mejor veamos una representación de sus conexiones internas:
Arduteka, cabecera, camara, arduino academy, modulo 3G, GPS, gprs, Arduino, teclado matricial, led rgb, ultrasonidos, ping, altavoz, mp3, mms, sms, multimedia, diy, iot,
En cuanto a la configuración de pines, es muy sencilla, con las teclas hacia nosotros, tendremos de izquierda a derecha, primero las filas en orden, y luego las columnas, es posible que pueda cambiar la configuración de un keypad a otro, así que siempre es recomendable usar nuestro polímetro en modo continuidad y observar entre que dos terminales se produce la unión al pulsar una tecla.
Arduteka, cabecera, camara, arduino academy, modulo 3G, GPS, gprs, Arduino, teclado matricial, led rgb, ultrasonidos, ping, altavoz, mp3, mms, sms, multimedia, diy, iot,
Para gestionar todas estas combinaciones, tendremos la librería keypad.h que nos va a facilitar en gran medida la programación, aquí podéis ver en detalle un ejemplo de su uso y como configurarla.
Pasemos al segundo tipo de teclados.
El problema de los KeyPad como el anterior, es la gran cantidad de pines que utilizan, pero para solucionar esto, tenemos otro tipo de teclados muy útiles para cuando vamos vamos escasos de pines en nuestro Arduino, el anterior descrito, nos va a requerir 8 entradas digitales, algo que puede ser complicado de implementar dependiendo del proyecto, así que para solucionarlo tenemos el ADKeyboard!!
ADKEyboard, Arduino, Proyecto, Tutorial, Pulsadores, Comparativa
El ADKeyboard es un teclado de 5 pulsadores que tan solo va a utilizar 1 entrada analógica para todos ellos! Esto es posible gracias a que en función de que pulsador usemos, hace uso de una, dos o más resistencias variando la tensión de nuestra entrada analógica, dato que podremos interpretar mediante código en nuestro Arduino.
Para finalizar, os dejo un ejemplo de como filtrar esas señales para interpretar qué pulsador está accionado en cada momento. También os dejo un link a este tutorial donde recordamos como leer una entrada analógica y como Arduino convierte una tensión determinada en un valor digital mediante el conversor analógico/digital de 10bit que posee en su interior.
Espero que haya sido de vuestro agrado esta primera comparativa!
Hasta pronto!!
//ADKeyboard Module
//Developed by DFRobot.com
//Last modified 30/11/2011
//Version 1.0
int adc_key_val[5] ={50, 200, 400, 600, 800 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
void setup()
{
  pinMode(13, OUTPUT);  //we'll use the debug LED to output a heartbeat
  Serial.begin(9600); // 9600 bps
}
void loop()
{
  adc_key_in = analogRead(0);    // read the value from the sensor 
  digitalWrite(13,LOW); 
  key = get_key(adc_key_in);  // convert into key press

  if (key != oldkey)   // if keypress is detected
   {
    delay(50);  // wait for debounce time
    adc_key_in = analogRead(0);    // read the value from the sensor 
    key = get_key(adc_key_in);    // convert into key press
    if (key != oldkey)    
    {   
      oldkey = key;
      if (key >=0){
        digitalWrite(13,HIGH);
        switch(key)
        {
           case 0:Serial.println("S1 OK");   
                  break;
           case 1:Serial.println("S2 OK");   
                  break;
           case 2:Serial.println("S3 OK");   
                  break;
           case 3:Serial.println("S4 OK");   
                  break;      
           case 4:Serial.println("S5 OK");   
                  break;  
        }                
      }
    }
  }
 delay(100);
}
// Convert ADC value to key number
int get_key(unsigned int input)
{
    int k;
    for (k = 0; k < NUM_KEYS; k++)
    {
      if (input < adc_key_val[k])
     {
            return k;
        }
   }
       if (k >= NUM_KEYS)k = -1;  // No valid key pressed
       return k;
}


Fuente:
https://www.tr3sdland.com/2012/10/comparativa-pulsadores-para-proyectos/

lunes, 12 de diciembre de 2016

Motores brushless

Si nos enfrentamos a un motor de este tipo veremos que aparece una numeración que corresponde a sus características esenciales, y que va a definir de una manera clara su comportamiento y capacidades.
motores brushless
En el ejemplo de la foto tenemos un EMAX 2204-2300KV
Las cuatro primeras cifras se leen de dos en dos y  se corresponden con la longitud del motor (22 milímetros) y con su altura (04 milímetros).
Las cuatro siguientes cifras (2300KV) se corresponden con los KV o Kilo volt y se trata de la característica física que define la calidad de un motor.

Significado del valor KV


Este número depende de muchos factores:
  • Número de espiras
  • Diámetro del hilo de cobre utilizado en el bobinado.
  • Potencia de los imanes.
  • Geometría del motor.

El valor expresado en KV se refiere a la constante de revoluciones de un motor, en resumen, el número de revoluciones por minuto (rpm) que será capaz de ofrecernos cuando se le aplique 1V (un voltio) de tensión.  Nota: No confundir KV con kV (kilovoltio).

El fabricante expresa este valor calculándolo sobre un banco de pruebas que no es del todo real, ya que para realizar los cálculos no se utiliza ningún tipo de peso en el motor. Por tanto este valor no deja de ser en cierta manera teórico, y muy distinto al valor real obtenido cuando el motor está funcionando con una hélice.

Volviendo al motor del ejemplo, vamos a realizar un par de supuestos.
Con una batería 4s de 14.8v el valor teórico del motor es de 35520 rpm.
El resultado se obtiene de multiplicar el valor 2300KV x 14,8V
Con una batería 3s de 11.0v el valor teórico del motor es de 26640 rpm.
El resultado se obtiene de multiplicar el valor 2300KV x 11,0V

¿Cómo elegir un motor adecuado?


Aunque el número KV es un dato importante a la hora de evaluar el tipo de motor a elegir, debemos tener en cuenta que se trata de un dato más bien teórico. El rendimiento del motor dependerá en gran medida de la batería, los variadores instalados (ESC), el tipo de hélice, el peso del conjunto final que compone el drone, etc…

motores

Un motor genera potencia, que es un concepto distinto al empuje. El empuje depende del tipo de hélice que estemos utilizando, y cada motor suele acompañarse de unas dimensiones recomendadas a utilizar.
Si elevamos el voltaje, o lo que es lo mismo, el número de celdas de la batería (S), estaremos consiguiendo más potencia, y por tanto la hélice realizará más empuje. Pero nada es gratis, aumentaremos en mucho el consumo eléctrico.
Una mala elección en relación entre dimensiones de hélice y potencia podría sobrecalentar el motor y poner en compromiso su rendimiento, hay que estudiar la curva de rendimiento del fabricante para tomar decisiones.

Tipos de KV y usos


KV Bajo
El número de espiras es mayor, por tanto, el hilo de cobre es más fino. El total de amperios que circulará por el motor es inferior a otros con KV más alto.
Recomendado para drones que necesiten mucho par y poca velocidad. Indicado para mover hélices de grandes dimensiones. Son motores menos vivos, muy suaves, con un menor consumo eléctrico.

KV Alto
El número de espiras es menor, por tanto, el hilo de cobre es más grueso. El total de amperios que circulará por el motor es superior a los de KV bajo.
Recomendado para drones de carreras, aparatos que necesitan poco par y mucha velocidad. Indicado para mover hélices de dimensiones pequeñas. Son motores muy vivos, con reacción muy violenta y gran consumo eléctrico.

domingo, 4 de diciembre de 2016

Arduino Time

Time Library

Time, by Michael Margolis, adds timekeeping ability in hours, minutes, seconds, days, months and years.
Download:Included with the Teensyduino Installer
Latest Developments on Github

Time Library using Teensy 3.0 RTC

Hardware Requirements

Time does not require any special hardware. Internally, Time depends upon Arduino's millis() function to keep track to elasped time. However, Time can synchronize to several types of hardware which provide time and date information.
See below for details:

Basic Usage

hour();
The current time, in hours (0 to 23)
minute();
The current time, in minutes (0 to 59)
second();
The current time, in seconds (0 to 59)
day();
The current date, in day of the month (1 to 31)
month();
The current date, in month of the year (1 to 12)
year();
The current date, in years (2013, 2014, etc)
setTime(hours, minutes, seconds, days, months, years);
The time and date, using the 6 parameters above.
adjustTime(number);
Adjust the time, adding (positive numbers) or removing (negative numbers) seconds.

Usage with 32-Bit "time_t"

Time uses a special time_t variable type, which is the number of seconds elapsed since 1970. Using time_t lets you store or compare times as a single number, rather that dealing with 6 numbers and details like the number of days in each month and leap years.
now();
Reads the current time, as a time_t number.
setTime(t);
Sets the current time, based on a time_t number.
makeTime(tm);
Convert normal date & time to a time_t number. The time_t number is returned. The tm input is a TimeElements variable type, which has these fields:
tm.Second  Seconds   0 to 59
tm.Minute  Minutes   0 to 59
tm.Hour    Hours     0 to 23
tm.Wday    Week Day  0 to 6  (not needed for mktime)
tm.Day     Day       1 to 31
tm.Month   Month     1 to 12
tm.Year    Year      0 to 99 (offset from 1970)
breakTime(t, tm);
Convert a time_t number to normal date & time. The tm input is a TimeElements variable which breakTime fills with the 7 numbers, computed from the "t" input.
hour(t);
minute(t);
second(t);
day(t);
month(t);
year(t);
Convert a time_t number to a single time or data field. These can be simpler to use than breakTime() and a 7-field TimeElements variable.

Synchronization With Other Time Services

Time can synchronize its clock with another source of known time. You can use the setTime functions above, or configure Time to automatically call a function which will report the time.
timeStatus();
Returns the status of time sync. Three type of status are defined, with these names:
timeNotSet     Time's clock has not been set.  The time & date are unknown.
timeSet        Time's clock has been set.
timeNeedsSync  Time's clock is set, but the sync has failed, so it may not be accurate.
setSyncProvider(getTimeFunction);
Configure Time to automatically called the getTimeFunction() regularly. This function should obtain the time from another service and return a time_t number, or zero if the time is not known.
setSyncInterval(seconds);
Configure how often the getTimeFunction is called.

TimeSerial Example Program

TimeSerial demonstrates how to set the time & date when no other hardware is capable of providing this information.
You can open this example from File > Examples > Time > TimeSerial.
TimeSerial listens for a message from your computer. This message is sent by a Processing-based program, found in Time's examples/Processing folder. You will need Processing to run this program.
When you click in the window, or when TimeSerial requests an update, this program will send the message using your computer's time. Text printed by TimeSerial appears in the black console windows in Processing.
On Linux, you can send the time message in UTC time zone using "date +T%s > /dev/ttyACM0"

TimeRTCSet Example Program

TimeRTCSet demonstrates synchronizing to a DS1307 real time clock chip. It can also accept Serial messages from the Processing program, to set both Time's clock and the DS1307.
You can open this example from File > Examples > Time > TimeRTCSet.
This example requires the DS1307RTC library.
If you have trouble with the DS1307, the DS1307RTC library provides 2 example for diagnosing problems and setting the time (without Processing).

TimeGPS Example Program

TimeGPS demonstrates synchronizing Time to data from a GPS receiver module, which reports very accurate time when tracking GPS satelites.
You can open this example from File > Examples > Time > TimeGPS.
To use TimeGPS with Teensy, edit this code to use Serial1, and comment out the earlier lines with SoftwareSerial.
// To use a hardware serial port, which is far more efficient than
// SoftwareSerial, uncomment this line and remove SoftwareSerial
#define SerialGPS Serial1
Connect the GPS data to the Serial1 pins (0/1 on Teensy 3.0, 7/8 on Teensy 2.0).
One more edit is necessary. You need to configure your time zone, since GPS reports UTC time.
// Offset hours from gps time (UTC)
//const int offset = 1;   // Central European Time
//const int offset = -5;  // Eastern Standard Time (USA)
//const int offset = -4;  // Eastern Daylight Time (USA)
//const int offset = -8;  // Pacific Standard Time (USA)
const int offset = -7;  // Pacific Daylight Time (USA)
If the GPS module is acquiring satelite tracking, you may see a delay before Time synchronizes and begins printing to the Arduino Serial Monitor.

TimeNTP Example Program

TimeNTP uses the Network Time Protocol with an ethernet adaptor to synchronize to time servers over the internet.
You can open this example from File > Examples > Time > TimeNTP.

TimeTeensy3 Example Program

TimeTeensy3 demonstrates synchronizing Time to the Real Time Clock in Teensy 3.0.
To use the Teensy 3.0 RTC, you must add a 32.768 kHz, 12.5 pF crystal to the bottom side of the board. The crystal shown is Citizen part CFS-206, Digikey part 300-8303-ND, 300-8762-ND, 300-8763-ND, or 300-1002-ND.
The Teensy 3.0 RTC will work without a battery, but to retain the time and date while power is off, of course you must also add a 3V battery.
You can open this example from File > Examples > Time > TimeTeensy3.
The time can be set using the Processing program from TimeSerial above.

Details

Details may be found at the official Arduino Time page.

Fuente:
http://www.pjrc.com/teensy/td_libs_Time.html