Páginas

Visitas

miércoles, 4 de abril de 2018

Función millis() en arduino

La función millis() permite obtener un valor en ms. del tiempo de ejecución del sketch. El valor devuelto por esta función es del tipo unsigned long, como podéis ver aquí. Esta función trabaja también con el microcontrolador Nodemcu.
Ahora bien, para qué nos puede ser útil esta función. Esta función se usa para comparar un valor con un intervalo de tiempo y poder realizar una acción. Veamos un ejemplo escrito en concreto para Nodemcu:
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
void setup() {
//desactivamos el watchdog
  ESP.wdtDisable();
  Serial.begin(115200);
  delay(10);
//activamos el watchdog
  ESP.wdtEnable(WDTO_8S);
}

void loop() {
 //reseteamos el watchdog
  ESP.wdtFeed();
//establecemos el intervalo que se va a realizar una acción
  int t = 23000;
  unsigned long currentMillis, loopMillis;
//obtenemos el valor de tiempo y lo asignamos a la variable
  currentMillis = millis();
  do {
//reseteamos el watchdog para evitar que se resetee el micro si el periodo t es mayor que el tiempo de disparo del micro.
    ESP.wdtFeed();
//vamos obteniendo en cada repetición del bucle el valor del tiempo y lo asignamos a loopMillis:
    loopMillis = millis();

  } while ((loopMillis - currentMillis) < t);
  Serial.print("loopMillis ");
  Serial.println(loopMillis);
  Serial.print("currentMillis ");
  Serial.println(currentMillis);
}



Puede surgir la pregunta de por qué no usar la función delay(). Como podéis ver, en el bucle do while podemos resetear el watchdog a cada iteración lo que nos permite comparar periodos de tiempo superiores al tiempo de disparo del watchdog. Esto no puede hacerse con la función delay().

lunes, 6 de noviembre de 2017

Dómotica

Es posible realizar la automatización de una casa usando una Raspberry-pi y arduinos. En mi caso he usado una Raspberry-pi 3 y un arduino con capacidad wifi, por espacio el Yun mini. La Raspberry actúa como servidor y el Yun como controlador de los distintos actuadores (en nuestro caso el motor de la persiana). 
Para domotizar elementos de una casa hay que tener en cuenta que trabajamos con corriente alterna y una tensión de 230 V. Con lo cual, hay que tomar precauciones con la instalación eléctrica que vamos a manipular. Aquí un vídeo ejemplo del resultado:


sábado, 10 de septiembre de 2016

Sensor DHT22 con cable cat5 de 30 metros.

   Para este proyecto vamos a necesitar:
-un microcontrolador (en mi caso arduino mega2560).
-un cable cat-5 de 30 metros. La distancia puede variar en función de tus necesidades. 
-sensor DHT22.
- 2 módulos adaptadores rj45 para arduino (los mios son estos).

   Procedemos al montaje del proyecto.
     Simplemente conectamos los pines de los módulos adaptadores a las conexiones correspondientes del sensor y de la placa arduino respectivamente. En el sensor visto de frente de izquierda a derecha: 1. VCC.
2. Data.
3. Ground.
    
   Como comprobaréis si procedéis al montaje necesitamos dos adaptadores: uno para la parte del sensor-cable y otro para la parte cable-microcontrolador. 
  Podéis descargar la librería necesaría para comunicarse con el sensor pinchando aquí.  Esta librería dispone de un ejemplo para poder testear el sensor. Podéis usar la entrada digital que queráis siempre y cuando modifiquéis el valor en el programa.

   Un consejo: Comprad dos sensores y podéis contrastar si la longitud del cable influye en los valores de lectura del sensor.

miércoles, 20 de abril de 2016

Comunicación Raspberry-pi y Arduino.

   He realizado la comunicación de la placa Raspberry-pi y Arduino por puerto serie. La conexión física entre ellos se realiza por puerto usb. Visualmente, observamos como arduino enciende o apaga un par de leds en función de las ordenes de la Raspberry. 
   
   La Raspberry pi actúa como servidor, ejecutando un programa que conecta a través de un socket con la aplicación que lo requiere. A su vez, una vez algo conecta con la aplicación que se ejecuta en Raspberry se comunica con Arduino para mandarle las instrucciones recibidas.





   El ejemplo consta de tres aplicaciones: 
  • aplicación cliente: se conecta a Raspberry y le envía ordenes. Está escrita en Java con tecnología swing.
  • aplicacion enlace: ejecutada en Raspberry y escucha las ordenes del cliente y las envía a Arduino. 
  • aplicación de Arduino: se comunica con los actuadores. En nuestro caso, con los leds.
   En breve, video del funcionamiento.

martes, 22 de diciembre de 2015

Lugar de las raíces 

Aplicación online que representa el lugar de las raíces. Simplemente introducimos los numeradores y denominadores de la función de transferencia del proceso y del sensor. Los coeficientes de las funciones de transferencia se introducen de modo ascendente. Pulsamos el botón de cálculo y el sevidor procesa los datos. Gracias a la tecnología de Primefaces se puede hacer fácilmente un zoom sobre la zona que nos interesa. Las tecnologías utilizadas han sido JSF y PrimeFaces 5.2. No se almacenan datos sobre ninguna base de datos. Simplemente muestra los cálculos al usuario.
Aquí el video.

viernes, 2 de octubre de 2015

Primefaces spline en linechart

Dar curvatura a un gráfico de líneas con Primefaces.
   Usando la versión Primefaces 5.0 y posteriores podemos usar la propiedad setExtender aplicada a LineChartModel.  Esta propiedad nos permite añadir funcionalidades de jqplot al gráfico de líneas estándard de Primefaces. Por ejemplo, puede suceder que queramos dotar a la linea que une dos puntos del gráfico de cierta curvatura. Esto lo podemos realizar mediante:
 <script>
function spline() {
                                  this.cfg.seriesDefaults.rendererOptions.smooth = true;
                                 }
  </script>
   Definimos el script dentro del modelo del gráfico: model.setExtender("spline"); Siendo model un objeto de LineChartModel.
Vista resultado.
   Podéis encontrar el ejemplo completo aquí.


miércoles, 15 de julio de 2015

mostrar por pantalla menú

   En esta ocasión hemos desarrollado el código para leer las pulsaciones de los botones UP y DOWN de un LCD Keypad Shield con Arduino usando la librería LiquidLibrary. A medida que se van pulsando el menú varía. Aquí está el código y el video de muestra a continuación: