de temperatura
by Admin | Jul 14, 2018 | Tutoriales Arduino | 0 comments
En este tutorial te enseñaremos a conectar un termopar con Arduino a través de
un circuito integrado MAX6675 que esta diseñado para termopares tipo K.
Los termopares son excelentes cuando se desean medir temperaturas elevadas,
donde los sensores de silicio como el LM35DZ no pueden ser aplicados debido a
que serían destruidos o dañados por temperaturas extremas.
Desafortunadamente un termopar no puede conectarse fácilmente al ADC de un
microcontrolador, ya que la señal que genera es muy pequeña, pero existen
circuitos como el MAX6675 que facilitan la tarea enormemente y en esta entrada
abordaremos el procedimiento para conectar este tipo de sensores a nuestra
tarjeta arduino favorita.
Dentro del pequeño encapsulado SOIC 8 del MAX6675 se encuentra la electrónica
necesaria para amplificar, compensar y convertir a digital el voltaje generado por el
termopar, lo que hace muy sencilla la tarea de conectar un sensor de este tipo a
un microcontrolador como el Arduino Uno.
1 /**
2 GeekFactory - "INNOVATING TOGETHER"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
6 SKETCH PARA MEDIR TEMPERATURA CON TERMOPAR Y MAX6675. MUESTRA EL
7 RESULTADO
8 DE LA MEDICION EN EL MONITOR SERIAL DE ARDUINO. ESTE EJEMPLO USA LA LIBRERIA
9 PARA EL MAX6675 DE ADAFRUIT.
10 */
11 #include "max6675.h"
12
13 // CONFIGURACION DE LOS PINES UTILIZADOS PARA LA COMUNICACIÓN CON EL MAX6675
14 #define CONFIG_TCGND_PIN 8
15 #define CONFIG_TCVCC_PIN 9
16 #define CONFIG_TCSCK_PIN 10
17 #define CONFIG_TCCS_PIN 11
18 #define CONFIG_TCDO_PIN 12
19
20 // OBJETO UTILIZADO PARA LA COMUNICACION CON EL MAX6675
21 MAX6675 thermocouple(CONFIG_TCSCK_PIN, CONFIG_TCCS_PIN, CONFIG_TCDO_PIN);
22
23 void setup() {
24 // PREPARAR LA INTERFAZ SERIAL
25 Serial.begin(9600);
26
27 // USAR PINES DE ARDUINO PARA ALIMENTAR EL MODULO MAX6675
28 pinMode(CONFIG_TCVCC_PIN, OUTPUT); digitalWrite(CONFIG_TCVCC_PIN, HIGH);
29 pinMode(CONFIG_TCGND_PIN, OUTPUT); digitalWrite(CONFIG_TCGND_PIN, LOW);
30
31 // IMPRIMR MENSAJE INICIAL A LA TERMINAL
32 Serial.println(F("----------------------------------------------------"));
33 Serial.println(F(" TUTORIAL TERMOPAR CON ARDUINO Y MAX6675 "));
34 Serial.println(F(" http://www.geekfactory.mx "));
35 Serial.println(F("----------------------------------------------------"));
36
37 // ESPERAR A QUE SE ESTABILICE LA ENERGIA
38 delay(500);
39 }
40
41 void loop() {
42 // IMPRIMIR LA TEMPERATURA EN LA TERMINAL SERIAL
43 Serial.print("C = ");
44 Serial.println(thermocouple.readCelsius());
45
46 // ESPERAR UN SEGUNDO ENTRE LAS LECTURAS
47 delay(1000);
}
1 /**
2 GeekFactory - "INNOVATING TOGETHER"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
6 SKETCH PARA MEDIR TEMPERATURA CON TERMOPAR Y MAX6675. MUESTRA EL
7 RESULTADO
8 DE LA MEDICION EN EL MONITOR SERIAL DE ARDUINO Y ADEMÁS LO DESPLIEGA EN UNA
9 PANTALLA LCD DE 16X2.
10
11 ESTE EJEMPLO USA LA LIBRERIA PARA EL MAX6675 DE ADAFRUIT.
12 */
13 #include "LiquidCrystal.h"
14 #include "max6675.h"
15
16 // CONFIGURACION DE LOS PINES UTILIZADOS PARA LA COMUNICACIÓN CON EL MAX6675
17 #define CONFIG_TCGND_PIN 8 // ALIMENTACION GND
18 #define CONFIG_TCVCC_PIN 9 // ALIMENTACION VCC
19 #define CONFIG_TCSCK_PIN 10 // SPI SCK
20 #define CONFIG_TCCS_PIN 11 // SPI CS
21 #define CONFIG_TCDO_PIN 12 // SPI MISO
22
23 // CONSTRUCTOR PARA LA PANTALLA LCD 16X2
24 // AQUI SE CONFIGURAN LOS PINES PARA LA COMUNICACION CON LA PANTALLA
25 LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
26 // OBJETO UTILIZADO PARA LA COMUNICACION CON EL MAX6675
27 MAX6675 thermocouple(CONFIG_TCSCK_PIN, CONFIG_TCCS_PIN, CONFIG_TCDO_PIN);
28
29 void setup() {
30 // PREPARAR LA INTERFAZ SERIAL
31 Serial.begin(9600);
32
33 // IMPRIMR MENSAJE INICIAL A LA TERMINAL
34 Serial.println(F("----------------------------------------------------"));
35 Serial.println(F(" TUTORIAL TERMOPAR CON ARDUINO Y MAX6675 "));
36 Serial.println(F(" http://www.geekfactory.mx "));
37 Serial.println(F("----------------------------------------------------"));
38
39 // USAR PINES DE ARDUINO PARA ALIMENTAR EL MODULO MAX6675
40 pinMode(CONFIG_TCVCC_PIN, OUTPUT); digitalWrite(CONFIG_TCVCC_PIN, HIGH);
41 pinMode(CONFIG_TCGND_PIN, OUTPUT); digitalWrite(CONFIG_TCGND_PIN, LOW);
42
43 // INDICAMOS QUE TENEMOS CONECTADA UNA PANTALLA DE 16X2
44 // IMPRIMIR MENSAJE INICIAL EN PANTALLA
45 lcd.begin(16, 2);
46 lcd.clear();
47 lcd.print(F("TERMOPAR ARDUINO"));
48 lcd.setCursor( 0, 1 );
49 lcd.print(F(" CON MAX6675 "));
50
51 // ESPERAR UN SEGUNDO
52 delay(1000);
53 }
54
55 void loop() {
56 // LEER EL TERMOPAR Y ALMACENAR EL VALOR EN UNA VARIABLE
57 double t = thermocouple.readCelsius();
58
59 // PRIMERO LIMPIAMOS LA PANTALLA Y LUEGO IMPRIMIMOS LA TEMPERATURA
60 lcd.clear();
61 lcd.print(F("->TEMPERATURA<-"));
62 lcd.setCursor( 3, 1 );
63 lcd.print(t);
64
65 // IMPRIMIR LA TEMPERATURA EN LA TERMINAL SERIAL
66 Serial.print("C = ");
67 Serial.println(t);
68
69 // ESPERAR UN SEGUNDO ENTRE LAS LECTURAS
70 delay(1000);
}
1 /**
2 GeekFactory - "INNOVATING TOGETHER"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
6 EJEMPLO DE ENTRADAS DIGITALES 2
7
8 EJEMPLO ON/OFF LED CON 2 BOTONES, EN ESTE EJEMPLO SE ENCIENDE EL LED
9 CON UN BOTON Y SE APAGA CON OTRO BOTON DISTINTO, EL LED PERMANECE EN
10 EL ESTADO CORRESPONDIENTE AL ULTIMO BOTON ENCENDIDO.
11 */
12
13 // ASIGNACION DE PINES
14 const int pinon = 2;
15 const int pinoff = 3;
16 const int pinled = 13;
17
18 // VARIABLES DE ESTADO DE BOTONES
19 int estaon = HIGH;
20 int estaoff = HIGH;
21
22 void setup() {
23 // CONFIGURAR PINES COMO ENTRADAS
24 pinMode(pinon, INPUT);
25 pinMode(pinoff, INPUT);
26 // CONFIGURAR PIN DE LED COMO SALIDA
27 pinMode(pinled, OUTPUT);
28 }
29
30 void loop() {
31 // LEER EL ESTADO DE PINES DE BOTON A VARIABLES
32 estaon = digitalRead(pinon);
33 estaoff = digitalRead(pinoff);
34
35 // SE OPRIMIO EL BOTON DE ENCENDIDO?
36 if (estaon == LOW) {
37 // ENTONCES ENCENDEMOS EL LED
38 digitalWrite(pinled, HIGH);
39 }
40
41 // SE OPRIMIO EL BOTON DE APAGADO?
42 if (estaoff == LOW) {
43 // ENTONCES APAGAMOS EL LED
44 digitalWrite(pinled, LOW);
45 }
46 }
1 /**
2 GeekFactory - "INNOVATING TOGETHER"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
6 EJEMPLO DE ENTRADAS DIGITALES 5
7
8 EJEMPLO ON/OFF LED CON 2 BOTONES, EN ESTE EJEMPLO SE ENCIENDE EL LED
9 CON UN BOTON Y SE APAGA CON OTRO BOTON DISTINTO, EL LED PERMANECE EN
10 EL ESTADO CORRESPONDIENTE AL ULTIMO BOTON ACTIVADO.
11
12 ADICIONALMENTE EN ESTE EJEMPLO PROPONEMOS UNA DOBLE COMPROBACIÓN PARA
13 EVITAR QUE EL RUIDO ELÉCTRICO INTERFIERA EN NUESTRO CIRCUITO. DE ESTA
14 MANERA ES MUCHO MÁS SERGURO DE USAR EN APLICACIONES REALES.
15 */
16
17 // ASIGNACION DE PINES
18 const int pinon = 2;
19 const int pinoff = 3;
20 const int pinled = 13;
21
22 // VARIABLES DE ESTADO DE BOTONES
23 int estaon = HIGH;
24 int estaoff = HIGH;
25
26 void setup() {
27 // CONFIGURAR PINES COMO ENTRADAS
28 pinMode(pinon, INPUT);
29 pinMode(pinoff, INPUT);
30 // CONFIGURAR PIN DE LED COMO SALIDA
31 pinMode(pinled, OUTPUT);
32 }
33
34 void loop() {
35 // LEER EL ESTADO DE PINES DE BOTON A VARIABLES
36 estaon = digitalRead(pinon);
37 estaoff = digitalRead(pinoff);
38
39 // SE OPRIMIO EL BOTON DE ENCENDIDO?
40 // HACEMOS DOBLE COMPROBACION DEL ESTADO DEL BOTÓN
41 if (estaon == LOW) {
42 // ESPERAMOS ANTES DE COMPROBAR NUEVAMENTE
43 delay(50);
44 if (estaon == LOW ) {
45 // ENTONCES ENCENDEMOS EL LED
46 digitalWrite(pinled, HIGH);
47 }
48 }
49
50 // SE OPRIMIO EL BOTON DE APAGADO?
51 // HACEMOS DOBLE COMPROBACION DEL ESTADO DEL BOTÓN
52 if (estaoff == LOW) {
53 // ESPERAMOS ANTES DE COMPROBAR NUEVAMENTE
54 delay(50);
55 if (estaoff == LOW) {
56 // ENTONCES APAGAMOS EL LED
57 digitalWrite(pinled, LOW);
58 }
59 }
60 }
1 /**
2 GeekFactory - "INNOVATING TOGETHER"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
6 EJEMPLO PARA EL USO AVANZADO DE BOTONES. EN ESTE EJEMPLO DETECTAMOS
7 CUANDO
8 SE HA DEJADO OPRIMIDO UN BOTON POR MAS DE 5 SEGUNDOS (EL TIEMPO PUEDE SER
9 CONFIGURADO)
10 Y SOLAMENTE ACTUA EN CASO DE QUE SE DETECTE ESTA CONDICION.
11
12 ESTE EJEMPLO ESTÁ BASADO EN LA LIBRERÍA GFBUTTON DESARROLLADA POR GEEK
13 FACTORY.
14 */
15 #include "GFButton.h"
16
17 // CREAR INSTANCIAS DE LOS BOTONES EN LOS PINES 2 Y 3
18 // SE PUEDE UTILIZAR CUALQUIER PIN DEL ARDUINO PARA LOS BOTONES
19 // YA QUE LA LIBRERIA NO DEPENDE DE INTERRUPCIONES
20 GFButton btn1 = GFButton(2);
21 GFButton btn2 = GFButton(3);
22
23 void setup() {
24 // PREPARAR COMUNICACION SERIAL
25 Serial.begin(9600);
26
27 // CONFIGURAR PIN DE SALIDA
28 pinMode(13, OUTPUT);
29
30 // CONFIGURAR MANEJADORES DE EVENTOS (FUNCIONES CALLBACK)
31 btn1.setHoldHandler(button1_on_hold);
32 btn2.setHoldHandler(button2_on_hold);
33
34 // CONFIGURAR TEMPORIZADOR DE REBOTES EN 100 MILISEGUNDOS
35 btn1.setDebounceTime(100);
36 btn2.setDebounceTime(100);
37
38 // MOSTRAR DIALOGO INICIAL EN EL MONITOR SERIAL
39 Serial.println(F("----------------------------------------------------"));
40 Serial.println(F(" PROGRAMACION DE BOTONES CON LIBRERIA GFBUTTON "));
41 Serial.println(F(" http://www.geekfactory.mx "));
42 Serial.println(F("----------------------------------------------------"));
43 }
44
45 void loop() {
46 // SIEMPRE DEBEMOS LLAMAR AL METODO PROCESS DE CADA INSTANCIA
47 btn1.process();
48 btn2.process();
49
50 // PODEMOS REALIZAR OTRAS TAREAS DENTRO DEL CICLO PRINCIPAL
51 }
52
53 // MANEJADOR DE EVENTOS DEL BOTON DE ENCENDIDO
54 void button1_on_hold(GFButton & button)
55 {
56 // EL EVENTO SE DISPARARA VARIAS VECES, ACTUAREMOS DISTINTO LA PRIMERA VEZ
57 // EL METODO ISFIRSTHOLD() DETERMINA SI ES LA PRIMERA VEZ QUE SE LLAMA AL
58 MANEJADOR DE EVENTOS
59 if (button.isFirstHold())
60 {
61 // PODEMOS OBTENER LA CANTIDAD DE TIEMPO QUE SE HA MANTENIDO PRESIONADO EL
62 BOTON
63 // ESTA CANTIDAD ESTA EXPRESADA EN MILISEGUNDOS
64 Serial.print(F("BOTON OPRIMIDO DURANTE "));
65 Serial.print(button.getHoldTime() / 1000);
66 Serial.println(F(" SEGUNDOS."));
67 // ENDENDER EL LED
68 Serial.println(F("ENCENDER LED"));
69 digitalWrite(13, HIGH);
70 } else {
71 // IMPRIMIMOS PUNTOS MIENTRAS EL BOTON ESTE OPRIMIDO
72 Serial.print('.');
73 }
74 }
75
76 // MANEJADOR DE EVENTOS DEL BOTON DE APAGADO
77 void button2_on_hold(GFButton & button)
78 {
79 // EL EVENTO SE DISPARARA VARIAS VECES, ACTUAREMOS DISTINTO LA PRIMERA VEZ
80 // EL METODO ISFIRSTHOLD() DETERMINA SI ES LA PRIMERA VEZ QUE SE LLAMA AL
81 MANEJADOR DE EVENTOS
82 if (button.isFirstHold())
83 {
84 // PODEMOS OBTENER LA CANTIDAD DE TIEMPO QUE SE HA MANTENIDO PRESIONADO EL
85 BOTON
86 // ESTA CANTIDAD ESTA EXPRESADA EN MILISEGUNDOS
87 Serial.print(F("BOTON OPRIMIDO DURANTE "));
88 Serial.print(button.getHoldTime() / 1000);
89 Serial.println(F(" SEGUNDOS."));
90 // APAGAR EL LED
Serial.println(F("APAGAR LED"));
digitalWrite(13, LOW);
} else {
// IMPRIMIMOS PUNTOS MIENTRAS EL BOTON ESTE OPRIMIDO
Serial.print('.');
}
}
1 /**
2 GeekFactory - "INNOVATING TOGETHER"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
6 EJEMPLO PARA EL USO AVANZADO DE BOTONES. EN ESTE EJEMPLO DETECTAMOS
7 CUANDO
8 SE HA DADO "DOBLE CLICK" EN UN BOTÓN Y SOLAMENTE SE REALIZA ALGUNA ACCIÓN
9 CUANDO SE DETECTA ESTA CONDICIÓN.
10
11 ESTE EJEMPLO ESTÁ BASADO EN LA LIBRERÍA GFBUTTON DESARROLLADA POR GEEK
12 FACTORY.
13 */
14 #include "GFButton.h"
15
16 // CREAR INSTANCIAS DE LOS BOTONES EN LOS PINES 2 Y 3
17 // SE PUEDE UTILIZAR CUALQUIER PIN DEL ARDUINO PARA LOS BOTONES
18 // YA QUE LA LIBRERIA NO DEPENDE DE INTERRUPCIONES
19 GFButton btn1 = GFButton(2);
20 GFButton btn2 = GFButton(3);
21
22 void setup() {
23 // PREPARAR COMUNICACION SERIAL
24 Serial.begin(9600);
25
26 // CONFIGURAR PIN DE SALIDA
27 pinMode(13, OUTPUT);
28
29 // CONFIGURAR MANEJADORES DE EVENTOS (FUNCIONES CALLBACK)
30 btn1.setClicksHandler(button1_on_click);
31 btn2.setClicksHandler(button2_on_click);
32
33 // CONFIGURAR TEMPORIZADOR DE REBOTES EN 100 MILISEGUNDOS
34 btn1.setDebounceTime(100);
35 btn2.setDebounceTime(100);
36
37 // MOSTRAR DIALOGO INICIAL EN EL MONITOR SERIAL
38 Serial.println(F("----------------------------------------------------"));
39 Serial.println(F(" PROGRAMACION DE BOTONES CON LIBRERIA GFBUTTON "));
40 Serial.println(F(" http://www.geekfactory.mx "));
41 Serial.println(F("----------------------------------------------------"));
42 }
43
44 void loop() {
45 // SIEMPRE DEBEMOS LLAMAR AL METODO PROCESS DE CADA INSTANCIA
46 btn1.process();
47 btn2.process();
48
49 // PODEMOS REALIZAR OTRAS TAREAS DENTRO DEL CICLO PRINCIPAL
50 }
51
52 // MANEJADOR DE EVENTOS DEL BOTON DE ENCENDIDO
53 void button1_on_click(GFButton & button)
54 {
55 Serial.print(F("DETECTADOS VARIOS CLICKS EN 1 SEGUNDO: "));
56 Serial.println(button.getClicks());
57 // ENCENDER LED AL DETECTAR DOBLE CLICK
58 if (button.getClicks() >= 2) {
59 Serial.println(F("ENCENDER LED"));
60 digitalWrite(13, HIGH);
61 }
62 }
63
64 // MANEJADOR DE EVENTOS DEL BOTON DE APAGADO
65 void button2_on_click(GFButton & button)
66 {
67 Serial.print(F("DETECTADOS VARIOS CLICKS EN 1 SEGUNDO: "));
68 Serial.println(button.getClicks());
69 // APAGAR EL LED AL DETECTAR DOBLE CLICK
70 if (button.getClicks() >= 2) {
71 Serial.println(F("APAGAR LED"));
72 digitalWrite(13, LOW);
}
}
El puerto USB cuenta con un fusible PPTC que limita la corriente que el
arduino (y sus accesorios) pueden demandar del puerto USB. La corriente máxima
entonces queda limitada a unos 500 mA. Usualmente no podemos cometer
errores de polaridad ni de voltaje cuando usamos USB para alimentar.
Resumen: Podemos alimentar el arduino a través del conector USB cuando se utilizan cargas
pequeñas y no se requieran voltajes mayores a 5 volts. En este caso no debemos
preocuparnos de la polaridad / voltaje, ya que es estándar en todos los dispositivos USB.
El jack de alimentación externa del arduino
Resumen: Podemos utilizar el pin VIN para alimentar el arduino con fuentes no reguladas de
corriente directa o un conjunto de baterías AA o AAA (4 a 6 pilas). La alimentación con
baterías es recomendable a través de este pin cuando nuestras baterías proporcionan 6 volts,
ya que no hay diodo de protección que cause caidas de tensión adicionales
Alimentar el Arduino a través del pin 5V
De igual forma que VIN, el pin de 5 volts se puede usar de dos formas:
Este pin funciona como una salida de 5 volts para otros circuitos. El pin de 5 volts se
conecta directamente a la salida del regulador en la placa. Cuando alimentamos el
arduino a través de USB o el jack de alimentación, la salida de 5 volts del regulador o
USB está presente en este pin.
Podemos utilizar el pin de 5 volts para alimentar directamente el arduino con una
fuente de poder estabilizada y regulada a 5 volts cuando no hay un cable USB
conectado o un adaptador de corriente conectado al jack.
Resumen: Al alimentar el arduino a través del pin 5V no tenemos protección contra
inversiones de polaridad, sobre voltaje o corto circuito, pues todos los mecanismos de
protección en la placa se encuentran antes llegar a este punto del circuito. Solo se debe usar
este método de alimentación si planeamos tener una fuente de salida fija (5V) y una
conexión permanente con el arduino (para evitar errores).
Codificación de bits
La codificación de datos esta basada en un esquema de ancho de pulso (se toma
en cuenta el ancho del estado alto): Un pulso ancho representa un 1 lógico, un
pulso corto representa un 0 lógico.
Todos los bits comienzan con un pulso bajo de 50 uS. Las librerías de
comunicación con el DHT11 aprovechan este pulso para la sincronización. Luego
viene un pulso alto que varía según el estado lógico o el valor del bit que el DHT11
desea transmitir:
Se utilizan pulsos de 26-28 microsegundos para un “0”
Se utilizan pulsos de 70 microsegundos para un “1”
1 /**
2 GeekFactory - "Construye tu propia tecnologia"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
8 EJEMPLO PARA EL SENSOR DHT11 QUE PERMITE MEDIR HUMEDAD Y TEMPERATURA. ESTE
SENSOR
9
ES MUY ECONÓMICO Y PODEMOS USARLO PARA DETECTAR LA HUMEDAD EN EL
10
AMBIENTE EN ZONAS
11
COMO INVERNADEROS, LAVANDERIAS, FABRICAS Y BAÑOS. USAMOS LA LIBRERIA DHT DE
12 ADAFRUIT
14
15 */
16 #include "DHT.h"
17
22 void setup() {
24 Serial.begin(9600);
26
28 dht.begin();
29 }
30
31 void loop() {
33 delay(2000);
34
36 float h = dht.readHumidity();
38 float t = dht.readTemperature();
39
40 // REVISAR QUE LOS RESULTADOS SEAN VALORES NUMERICOS VALIDOS, INDICANDO QUE
LA COMUNICACION ES CORRECTA
41
if (isnan(h) || isnan(t)) {
42
Serial.println("Falla al leer el sensor DHT11!");
43
return;
44
}
45
46
// IMPRIMIR RESULTADO AL MONITOR SERIAL
47
Serial.print("Humedad: ");
48
Serial.print(h);
49
Serial.print(" % ");
50
Serial.print("Temperatura: ");
51
Serial.print(t);
Serial.println(" *C");
}
Conclusión
En este articulo exploramos los detalles del protocolo utilizado por el sensor DHT11 y
DHT22 para comunicarse con arduino.
Aprendimos sobre la conexión física entre arduino y el sensor.
Descargamos e instalamos una librería para comunicarnos con el DHT11 y DHT22 con el
mínimo esfuerzo.
Realizamos un programa básico que muestra las lecturas del sensor en el monitor serial.
Vimos que ambos sensores (DHT11 y DHT22) son muy similares y pueden usarse con las
mismas librerías y las mismas conexiones.
Se dejan las bases para proyectos más complejos con el DHT11 y DHT22.
Diagrama de pines Arduino (pinout arduino)
by Admin | May 4, 2016 | Tutoriales Arduino | 1 comment
2 // We pass the function pointers to the read and write functions that we implement below
2 shell_register(command_mycommand, "mycommand");
3 shell_register(command_othercommand, "othercommand");
2 shell_task();
2 {
4 shell_println("Exit...");
5 return SHELL_RET_SUCCESS;
6 }
Como podemos ver la función solamente imprime la cadena “Ejecutando
mycommand” y luego retorna, sin embargo, podemos crear funciones que afecten
prácticamente cualquier aspecto del funcionamiento del programa o que realicen
cualquier acción. El resultado del ejemplo mostrado aquí es el siguiente:
1 /**
4 * www.geekfactory.mx
5 *
7 * en un led RGB conectado a los pines PWM mediante comandos de texto. El programa
9 *
10 * Example for Shell library. This example controls the color displayed on the RGB
11 * led connected to PWM pins using text commands. The program accepts 3 parameters
13 */
14
15 #include <Shell.h>
16
17 void setup()
18 {
20 Serial.begin(9600);
22 delay(1000);
23
24 // Pins to connect RGB led (PWM outputs)
25 pinMode(3,OUTPUT);
26 pinMode(5,OUTPUT);
27 pinMode(6,OUTPUT);
28
30 // We pass the function pointers to the read and write functions that we implement below
33
35 shell_register(command_rgbled, "rgbled");
36 }
37
38 void loop()
39 {
41 shell_task();
42 }
43
44 /**
45 * This function implements the rgbled command and parses the required args
48 */
50 {
53
55 val_R = strtol(argv[1],NULL,0);
56 analogWrite(3, val_R);
57
58 val_G = strtol(argv[2],NULL,0);
59 analogWrite(5, val_G);
60
61 val_B = strtol(argv[3],NULL,0);
62 analogWrite(6, val_B);
63
66
68 return SHELL_RET_SUCCESS;
69 }
70
71 /**
75 */
77 {
79 if (Serial.available()) {
80 *data = Serial.read();
81 return 1;
82 }
83 return 0;
84 }
85
86 /**
90 */
92 {
94 Serial.write(data);
95 }
Nótese que hemos omitido todas las comprobaciones sobre los datos recibidos,
incluso si se han proporcionado las 3 componentes de color, todo esto en favor de
la simplicidad. Sin embargo, si hemos mostrado algunas características de la
librería “Shell” como la capacidad de imprimir texto con formato usando la función
shell_printf(). Hemos destacado esto en color amarillo en el código más arriba.
El resultado del ejemplo anterior es el siguiente visto en el monitor serial de
arduino:
Conclusiones
La librería shell.h permite controlar tu arduino desde la PC mediante el puerto
serial o ethernet fácilmente. En esta entrada hemos realizado un proyecto básico
que nos permite saber como funciona la librería y los pasos necesarios para
asociar comandos con las cadenas de texto. También pudimos observar que los
parámetros pasados a las funciones invocadas por la librería, son exactamente
iguales que el estándar para una utilidad de linea de comandos en C o C++. Por lo
que para muchos programadores más experimentados será fácil acostumbrarse a
escribir programas para la plataforma arduino y microcontroladores.
1 /*
2 * http://www.geekfactory.mx
3 *
4 * Ejemplo de medidor de luz con Arduino utilizando una fotoresistencia LDR y
5 * un grupo de leds para mostrar el resultado de las lecturas. Este sketch puede
6 * servir como base para otros proyectos que requieren medicion de la intensidad
7 * de luz con una fotoresistencia.
8 *
9 * Mas detalles y la conexion completa para este sketch en:
10 * http://www.geekfactory.mx/tutoriales/tutoriales-arduino/tutorial-arduino-con-fotoresistencia-ldr/
11 *
12 */
13
14 // Pin donde se conectan los leds
15 int pinLed1 = 2;
16 int pinLed2 = 3;
17 int pinLed3 = 4;
18 // Pin analogico de entrada para el LDR
19 int pinLDR = 0;
20
21 // Variable donde se almacena el valor del LDR
22 int valorLDR = 0;
23
24 void setup()
25 {
26 // Configuramos como salidas los pines donde se conectan los led
27 pinMode(pinLed1, OUTPUT);
28 pinMode(pinLed2, OUTPUT);
29 pinMode(pinLed3, OUTPUT);
30
31 // Configurar el puerto serial
32 Serial.begin(9600);
33 }
34
35 void loop()
36 {
37 // Apagar todos los leds siempre que se inicia el ciclo
38 digitalWrite(pinLed1, LOW);
39 digitalWrite(pinLed2, LOW);
40 digitalWrite(pinLed3, LOW);
41
42 // Guardamos el valor leido del ADC en una variable
43 // El valor leido por el ADC (voltaje) aumenta de manera directamente proporcional
44 // con respecto a la luz percibida por el LDR
45 valorLDR= analogRead(pinLDR);
46
47 // Devolver el valor leido a nuestro monitor serial en el IDE de Arduino
48 Serial.println(valorLDR);
49
50 // Encender los leds apropiados de acuerdo al valor de ADC
51 if(valorLDR > 256)
52 {
53 digitalWrite(pinLed1, HIGH);
54 }
55 if(valorLDR > 512)
56 {
57 digitalWrite(pinLed2, HIGH);
58 }
59 if(valorLDR > 768)
60 {
61 digitalWrite(pinLed3, HIGH);
62 }
63 // Esperar unos milisegundos antes de actualizar
64 delay(200);
65 }
Para probar nuestro flamante medidor de luz, solamente debemos colocarlo sobre
una fuente de luz y verificar que los led se encienden conforme aumenta la
cantidad de luz. En la terminal, también podremos ver como va cambiando el valor
de la conversión analógico a digital.
Sensor ultrasónico HC-SR04 y Arduino
by Admin | May 16, 2014 | Tutoriales Arduino | 62 comments
Cabe aclarar que nosotros hemos utilizado los pines 11 y 12, pero vale cualquier
otra combinación de pines. No hay mucho más que decir, ya que es bastante fácil
de conectar, solamente tener cuidado con la polaridad y posición de las señales.
1 /**
2 GeekFactory - "Construye tu propia tecnologia"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
6 EJEMPLO SENSOR ULTRASONICO 1
7
8 REALIZA LA MEDICION DE DISTANCIA CON UN SENSOR ULTRASÓNICO HC-SR04
9 CONECTADO
10 AL ARDUINO. ESTE EJEMPLO NO UTILIZA LIBRERIAS ESPECIALES PARA EL SENSOR,
11 SOLAMENTE
12 SE UTILIZA LA FUNCION "PULSEIN" PARA MEDIR LA LONGITUD DEL PULSO DE ECO.
13
14 */
15 // DECLARACION DE VARIABLES PARA PINES
16 const int pinecho = 8;
17 const int pintrigger = 9;
18 const int pinled = 13;
19
20 // VARIABLES PARA CALCULOS
21 unsigned int tiempo, distancia;
22
23 void setup() {
24 // PREPARAR LA COMUNICACION SERIAL
25 Serial.begin(9600);
26 // CONFIGURAR PINES DE ENTRADA Y SALIDA
27 pinMode(pinecho, INPUT);
28 pinMode(pintrigger, OUTPUT);
29 pinMode(13, OUTPUT);
30 }
31
32 void loop() {
33 // ENVIAR PULSO DE DISPARO EN EL PIN "TRIGGER"
34 digitalWrite(pintrigger, LOW);
35 delayMicroseconds(2);
36 digitalWrite(pintrigger, HIGH);
37 // EL PULSO DURA AL MENOS 10 uS EN ESTADO ALTO
38 delayMicroseconds(10);
39 digitalWrite(pintrigger, LOW);
40
41 // MEDIR EL TIEMPO EN ESTADO ALTO DEL PIN "ECHO" EL PULSO ES PROPORCIONAL A LA
42 DISTANCIA MEDIDA
43 tiempo = pulseIn(pinecho, HIGH);
44
45 // LA VELOCIDAD DEL SONIDO ES DE 340 M/S O 29 MICROSEGUNDOS POR CENTIMETRO
46 // DIVIDIMOS EL TIEMPO DEL PULSO ENTRE 58, TIEMPO QUE TARDA RECORRER IDA Y
47 VUELTA UN CENTIMETRO LA ONDA SONORA
48 distancia = tiempo / 58;
49
50 // ENVIAR EL RESULTADO AL MONITOR SERIAL
51 Serial.print(distancia);
52 Serial.println(" cm");
53 delay(200);
54
55 // ENCENDER EL LED CUANDO SE CUMPLA CON CIERTA DISTANCIA
56 if (distancia <= 15) {
57 digitalWrite(13, HIGH);
58 delay(500);
} else {
digitalWrite(13, LOW);
}
}
Como instalar una librería de Arduino
by Admin | Ene 3, 2014 | Tutoriales Arduino | 1 comment
Si ya llevamos un rato jugando con nuestro arduino y poco a poco vamos tomando
confianza para enfrentar proyectos cada vez más ambiciosos, seguramente nos
encontraremos muy pronto en el siguiente escenario: Acabamos de adquirir un
shield de arduino o un flamante nuevo sensor que requiere una librería especial
para poder ser utilizado y no sabemos como instalar el software necesario para
hacerlo funcionar. En este tutorial te explicamos como instalar una librería de
Arduino tanto en Windows como en Mac para que puedas seguir con tu
proyecto lo más rápido posible.
En este ejemplo estaremos viendo la instalación de la librería NewPing para
sensores ultrasónicos y veremos las 3 formas que existen de realizar la
instalación de una librería de Arduino. Hemos actualizado (en septiembre de
2018) este tutorial para que refleje los pasos a seguir en las nuevas versiones del
IDE Arduino.
Al instalar una librería por este método, tenemos la ventaja de que el IDE podrá
ubicar y descargar actualizaciones de la librería de forma
automática. Además podremos instalar la versión de la librería de nuestro interés:
ya sea la más nueva o una más antigua por razones de compatibilidad con
nuestros programas.
Una vez realizados los pasos anteriores, ya debemos tener nuestra libraría lista
para funcionar.
1 My Documents\Arduino\libraries\NewPing\src\NewPing.cpp
2 My Documents\Arduino\libraries\NewPing\src\NewPing.h
3 My Documents\Arduino\libraries\NewPing\examples
1 Documents/Arduino/libraries/NewPing/src/NewPing.cpp
2 Documents/Arduino/libraries/NewPing/src/NewPing.h
3 Documents/Arduino/libraries/NewPing/src/examples
1 #include <NewPing.h>
También podemos escribir nosotros esta misma linea en todos los programas que
utilizarán la librería NewPing. No hará falta realizar el procedimiento de
instalación para cada programa que deseemos realizar, pues la librería ya se
encontrará instalada para todos nuestros programas. Bastará con insertar la
directiva “include” en cada uno de nuestros programas que usen la librería.
Conclusión
Llegamos al final de este tutorial para instalar una librería en el IDE Arduino. Ahora
solo queda aprender a usar las nuevas funciones que nos proporciona nuestra
librería ya instalada. Si tienes alguna sugerencia o conoces algún tip para la
instalación de librerías, por favor usa la sección de comentarios para
compartir con nosotros.
1 Comment
1.
Justo on 15 enero, 2018 at 16:38
Buenas tardes
Tengo esta falla al grabar a la targeta fisica de arduino uno (atmega328) y por
que? alguien me puede ayudar por fa.
El Sketch usa 2042 bytes (6%) del espacio de almacenamiento de programa. El
máximo es 32256 bytes.
Las variables Globales usan 186 bytes (9%) de la memoria dinámica, dejando
1862 bytes para las variables locales. El máximo es 2048 bytes.
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\damellis-
PCM-ae3f463: C:\Program Files (x86)\Arduino\libraries\damellis-PCM-ae3f463
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\DS1307:
C:\Program Files (x86)\Arduino\libraries\DS1307
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\MAX6675-
library-master: C:\Program Files (x86)\Arduino\libraries\MAX6675-library-master
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\PCM-
master: C:\Program Files (x86)\Arduino\libraries\PCM-master
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\RS485:
C:\Program Files (x86)\Arduino\libraries\RS485
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\damellis-
PCM-ae3f463: C:\Program Files (x86)\Arduino\libraries\damellis-PCM-ae3f463
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\DS1307:
C:\Program Files (x86)\Arduino\libraries\DS1307
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\MAX6675-
library-master: C:\Program Files (x86)\Arduino\libraries\MAX6675-library-master
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\PCM-
master: C:\Program Files (x86)\Arduino\libraries\PCM-master
Librería inválida encontrada en C:\Program Files (x86)\Arduino\libraries\RS485:
C:\Program Files (x86)\Arduino\libraries\RS485
Reply
Trackbacks/Pingbacks
1. Termómetro con Arduino y DS18B20 - Geek Factory - […] en nuestro termómetro se
muestra a continuación. Para que compile correctamente es necesario tener instalada la
librería de control…
2. LCD 16x2 por I2C con Arduino usando solo dos pines - Geek Factory - […] explicamos en
alguna ocasión como cargar una librería y comenzar a utilizarla, si tienes dudas te
recomendamos revisar el…
3. Shield o Módulo GPS con Arduino Introducción - Geek Factory - […] Como se puede ver
en el ejemplo anterior sobre sentencias NMEA, sacar la información de navegación puede
ser una…
4. Tutorial Sensor Ultrasónico HC-SR04 y Arduino - Geek Factory - […] ultrasónico HC-
SR04 y Arduino para la medición de distancia. Ya hemos explicado con anterioridad como
se realiza la instalación de…
5. Controlar tu arduino desde la PC mediante comandos de texto - Geek Factory - […] La
librería puede descargarse desde github en el enlace que se muestra a continuación. Si
deseas saber como se…
El arduino utiliza un cristal de 16 Mhz que esta bastante sobrado para aplicaciones de bajo consumo de
energía.
5. Uso desmesurado de delays y programas que nunca pasan a modo de
bajo consumo (sleep).El problema que debe resolver un ingeniero para lograr un
producto de bajísimo consumo de energía va más alla del hardware. El software
también desempeña un papel importante en el consumo de energía de un
producto, y caso de que pensemos utilizar un programa con arduino durante un
periodo de tiempo considerable utilizando baterías, conviene evitar al máximo
el tiempo de pasamos en rutinas de retardos.
Con estos 5 factores cubrimos aspectos que uno puede pasar por alto fácilmente y
que pueden consumir bastante energía. Como podrás ver, se trata de factores que
caen predominantemente en el terreno del hardware, aunque el uso de energía
también podría verse afectado por cuestiones de software que por ahora
reservaremos para otra entrada.
De momento no me queda mas que invitarte a que nos hagas llegar tus
comentarios más abajo… ¿Como has hecho para exprimir el máximo de esos
mili-amperes hora en tus baterías?
Utiliza un relé con tu placa Arduino
28/11/2016
Hardware
Software
me gusta
13+
Dificultad media
¿Qué es un relé?
Cuando estamos desarrollando nuestros “inventos” a menudo sentimos la
necesidad de poder encender y apagar aparatos eléctricos de nuestro entorno.
Por ejemplo, imaginemos que queremos bajar o subir las persianas utilizando un
motor eléctrico, necesitaríamos activar o desactivar dicho motor, que
habitualmente funciona a 220V. También podríamos querer hacer que
nuestra lámpara nocturna fuera de verdad una lámpara y poder encender y pagar la
lámpara de nuestra mesilla.
Para poder realizar esto necesitaríamos un interruptor que pudiéramos activar y
desactivar desde nuestra placa Zum. Pues bien, ese interruptor se llama relé.
Si buscamos en Wikipedia leemos:
¿Qué quiere decir esto? Quiere decir que si activamos el relé, poniendo a 5 Voltios
el pin de control dejará pasar la corriente (se cierra el circuito interruptor), mientras
que si la tensión es 0 Voltios se interrumpirá la corriente.
Cuando compremos un relé deberemos tener en cuenta el voltaje del aparato
eléctrico que deseemos controlar ya que existen relés para 12 Voltios, 24 V, 110
V, 220 V, etc. Es importante que también tengas en cuenta de que lo que estás
haciendo es peligroso, y por lo tanto hay que realizarlo con las medidas de seguridad
adecuadas y nunca por niños que no estén acompañados por adultos.
¿Cómo se conecta?
Veamos cómo conectar el relé a nuestra placa y al aparato eléctrico que queramos
controlar. En este caso, estamos utilizando un componente que tiene dos relés,
pero sólo utilizaremos uno de ellos.
Como podemos observar, el relé tiene tres pines:
Tierra o GND, que deberá conectarse a uno de los pines marcados como GND.
Tensión, o VCC, que deberá conectarse a uno de los pines marcados como 5 Voltios.
Señal, o Sgn, que es un pin digital a través del cuál indicamos si el relé estará abierto
o cerrado. Lo conectamos a cualquiera de los pines digitales.
Por otro lado conectaremos el cable del aparato eléctrico que queramos controlar.
Habitualmente los aparatos eléctricos tienen 2 o 3 cables:
Un cable de color negro o fase L (es por donde llega la energía)
Otro azul o neutro N (por donde la energía regresa a la fuente)
Hay aparatos eléctricos que además incluyen un cable de color amarillo/verde o toma
a tierra TT
Pues bien, nosotros debemos conectar al relé el cable de fase. Entonces el relé
funcionará igual que si estuviéramos usando un interruptor, sólo que en lugar de
encenderlo y apagarlo con la mano lo haremos a través de la placa controladora.
Programándolo en Bitbloq
Seguimos los siguientes pasos:
Hardware
Software
me gusta
30+
Dificultad media
En este curso aprenderás a utilizar App Inventor para crear tus propias
aplicaciones, que podrás distribuir fácilmente e incluso subir a la tienda de
aplicaciones Play Store.
Video Player
00:00
00:17
Software
me gusta
12+
Dificultad media
Para comenzar a trabajar con App Inventor, en primer lugar, tenemos que acceder
a su página web. Una vez ahí, nos darán instrucciones de como configurar
un dispositivo Android conectado a la misma red wifi o un emulador. Considero que la
mejor forma de realizar este curso, y utilizar App Inventor, es mediante un
dispositivo Android conectado mediante Wifi, por lo que se va a explicar este
proceso.
Instalación y registro
En primer lugar tenemos que instalar la App Companion, es decir, la aplicación que
App Inventor utilizará como soporte para mostrar nuestros proyectos. Para ello hay
dos formas, instalando manualmente un apk o a través de Google Play Store.
Conviene instalar a través de Play Store, ya que cada vez que se produzca una
actualización en la App Companion se descargará automáticamente, por lo que
siempre estará actualizado.
Para instalar la aplicación, puedes escanear el código QR de la imagen, o pulsar
sobre este link.
A continuación, desde la interfaz web de App Inventor, tendremos que iniciar sesión
con nuestra cuenta de Google (Gmail) y aceptar los términos de servicio. Una vez
aceptados, entraremos en la interfaz de App Inventor, donde en primer lugar
configuramos el idioma para que la interfaz se muestre en Español. Para ello, en
el menú situado en la esquina superior derecha, pulsa sobre English y, dentro del
menú desplegable, escoge Español. Puedes ver una imagen de dicho menú a
continuación:
Para incluir dicha etiqueta en nuestra interfaz gráfica, busca Etiqueta en el menú
Interfaz de Usuario, que se encuentra dentro de Paleta, un “contenedor” donde se
almacenan todos los elementos que podemos utilizar.