miércoles, 10 de enero de 2024

viernes, 21 de noviembre de 2014

Arduino: Temperatura con DS18B20 en display LCD (I2C)


COMO MEDIR LA TEMPERATURA coN EL DS18B20 EN UN LCD (gestionado mediante i2C)

En la anterior entortada del ds18b20, se mostraba la temperatura en el monitor serial, esto solo tiene la utilidad de ver que funciona bien, pero nada de practico.
El controlador del LCD, se puede ver en Controlador I2C para LCD
En el montaje muestro el valor de la temperatura en un LCD, controlado con I2C.
Se utilizan solo los pines 4 y 5 para el bus I2C.

Librerías necesarias:


  • <OneWire.h> 
  • <Wire.h>
  • <LCD.h>
  • <LiquidCrystal_I2C.h>  

Programa

/*******************************************
Prueba del funcionamiento del:
Sensor de temperatura DS18B20
con dispaly LCD I2C
Proyecto
ds18b20_i2c
  ** EA7TB **
www.ea7tb.com
*******************************************/
#include <OneWire.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define BACKLIGHT_PIN     7
#define  LED_OFF  0
#define  LED_ON  1
int DS18S20_Pin = 2; //DS18S20 Señal digital en digital 2

//Temperatura chip i/o
OneWire ds(DS18S20_Pin);
LiquidCrystal_I2C  lcd(0x20,4,5,6,0,1,2,3);
void setup(void) {
 
 Serial.begin(9600);
 lcd.begin (16,2);  // inicializo el LCD 20x4
  // Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
  lcd.setBacklight(LED_ON);

  lcd.home();
 
  lcd.setCursor(0, 0);

  for(int i=0;i<16;i++) lcd.print("*");
  lcd.setCursor(0, 1);

  lcd.print(" Hola mundo   ");
  lcd.setCursor(0,2);
  delay(1000);
  lcd.clear();
}

void loop(void) {
 float temperatura = getTemp();
 Serial.println(temperatura);
 lcd.setCursor(0,0);
 lcd.print("temperaura:");
 lcd.print(temperatura);
 delay(500);

}


float getTemp(){
 //Da la temperatura esta ª

 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) {
 
   ds.reset_search();
   return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
   Serial.println("CRC no es valido!");
   return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) {
   Serial.print("No se ha reconocido el dispositivo");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1); // comienza la converesion

 byte present = ds.reset();
 ds.select(addr);
 ds.write(0xBE);


 for (int i = 0; i < 9; i++) {
  data[i] = ds.read();
 }

 ds.reset_search();

 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB);
 float TemperatureSum = tempRead / 16;

 return TemperatureSum;

}

Arduino: Temperatura con DS18B20

Como medir la temperatura mediante este sensor de 1 Wire.

Información sobre el integrado.

Para mas información sobre integrado lo podemos ver en el siguiente enlace: http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf



El patillaje es el mostrado en siguiente imagen.



El montaje con el arduino seria el siguiente:




Libreria necesarias:

Se necesita la librería OneWire, 
Que debe estar en el siguiente directorio:
  • MAC: (directorio personal)/Documents/Arduino/libraries
  • Win: Mis documentos/Arduino/libraries
  • LINUX: (directorio personal)/Documents/Arduino/libraries

Esta disponible en: http://playground.arduino.cc/Learning/OneWire

Programa:

Un pequeño programa para leer la temperatura.
#include <OneWire.h>

int DS18S20_Pin = 2; //DS18S20 Señal digital en digital 2

//Temperatura chip i/o
OneWire ds(DS18S20_Pin);

void setup(void) {
 Serial.begin(9600);
}

void loop(void) {
 float temperatura = getTemp();
 Serial.println(temperatura);
 delay(100);

}


float getTemp(){
 //Da la temperatura esta ª

 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) {
 
   ds.reset_search();
   return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
   Serial.println("CRC no es valido!");
   return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) {
   Serial.print("No se ha reconocido el dispositivo");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1); // comienza la converesion

 byte present = ds.reset();
 ds.select(addr);
 ds.write(0xBE);


 for (int i = 0; i < 9; i++) {
  data[i] = ds.read();
 }

 ds.reset_search();

 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB);
 float TemperatureSum = tempRead / 16;

 return TemperatureSum;

}

martes, 12 de noviembre de 2013

Raspberry Pi: Instalar PYWWS

Como instalar el programa PYWWS para recoger los datos de una estación meteorológica.


Instalar Git

    sudo apt-get install git

Instalar python-dev

    sudo apt-get install python-dev
    sudo apt-get install libudev-dev

crear un directorio para descargar y descomprimir los ficheros de instalación

    cd ~
    mkdir dls
    cd dls


Descargar las librerías y utilidades necesarias

    wget http://pypi.python.org/packages/source/C/Cython/Cython-0.16.tar.gz
    wget http://sourceforge.net/projects/libusb/files/libusb-1.0/libusb-1.0.9/libusb-1.0.9.tar.bz2
    git clone https://github.com/gbishop/cython-hidapi.git


Descomprimir los ficheros que habíamos descargado.

    tar xvzf Cython-0.16.tar.gz
    tar xvjf libusb-1.0.9.tar.bz2

Compilar e instalar Cython 0.16 (esto puede llevar un tiempo)

    cd ~/dls/Cython-0.16
    sudo python setup.py install
    cd ~/dls/libusb-1.0.9
    ./configure
    make  
    sudo make install            
    cd ~/dls/cython-hidapi

Editar el fichero de conflagración: setup.py

    sudo nano setup.py

Cambiamos la linea:

   os.environ['CFLAGS'] = "-I/usr/include/libusb-1.0"
a
   os.environ['CFLAGS'] = "-I/usr/local/include/libusb-1.0"


Cambiamos la linea:

   os.environ['LDFLAGS'] = "-L/usr/lib/�i386-linux-gnu -lusb-1.0 -ludev -lrt"
a
   os.environ['LDFLAGS'] = "-L/usr/lib/arm-linux-gnueabihf -lusb-1.0 -ludev -lrt"


Copiar el fichero libudev.so.0

   sudo cp /lib/arm-linux-gnueabihf/libudev.so.0 /usr/lib/arm-linux-gnueabihf/libudev.so
   sudo python setup.py install


Descargar la ultima versión pywws http://pypi.python.org/pypi/pywws/

   cd ~
   sudo mkdir weather
   cd weather
   sudo git clone https://github.com/jim-easterbrook/pywws.git

Conectar la estación a la Raspberry con el conector USB

Cambiamos al directorio:

   cd ~/weather/pywws

Comprobamos la conexion de la estación meteorológica.

sudo python -m pywws.TestWeatherStation





Debería ver una serie de números hexadecimales si la conexión está funcionando.
Si no tiene conexión o no esta conectada:

Si esta conectada daría:
pi@raspberrypi ~/weather/pywws $ sudo python -m pywws.TestWeatherStation
  
Ya tenemos instalado el programa ahora falta configurarlo.
En un próximo estará explicado.

sábado, 9 de noviembre de 2013

Raspberry PI: Instalar Transmission.

Con nuestra Raspberry podemos crear un centro de descargas, con un consumo mínimo. Con un pendrive de 16G, su consumo es ínfimo, es suficiente un cargador de 0,6A para que funcione.

Configuración de las carpetas de descarga

Para que el programa descargue en el pendrive que utilizamos como almacenamiento, hay que crear varias carpetas. En la entrada "Crear un pendrive", puedes ver como hacerlo.
  • Carpeta de descarga de ficheros.
  • Carpeta de almacenamiento de incompletos.
Carpeta de descarga: descarga
cd /media/pendrive
sudo mkdir descargas
sudo chmod 777 descargas

Carpeta de almacenamiento de incompletos: partes
cd /media/pendrive
sudo mkdir partes
sudo chmod 777 partes

Instalación del programa:

Ejecutamos el comando:

  •  sudo apt-get -y install transmission-daemon
Una vez instalado, debemos para el demonio para poder configurarlo.

  •   sudo service transmission-daemon stop

 Configuración del programa:

Una vez parado el programa, configuramos los parámetros de trabajo.
Editamos el fichero de configuración
  •  sudo nano /var/lib/transmission-daemon/info/settings.json
Modificaremos los siguientes parámetros:

Directorio donde se guardaran los ficheros descargados:
 "download-dir": "/var/lib/transmission-daemon/downloads",

cambiamos a:

"download-dir": "/media/pendrive/descargas",

Habilitar que las partes se guarden en un directorio diferente a las dercargas:
"incomplete-dir-enabled": false,

cambiar por

"incomplete-dir-enabled": true,

Directorio donde se guardaran las partes:
"incomplete-dir": "/root/Downloads",

cambiar por

"incomplete-dir": "/media/pendrive/partes",

Habilitar las aplicaciones que pueden conectarse al RPC:
Necesario para poder conectarnos mediante la pagina web. xxx.xxx.xxx.xxx:9091
Por defecto esta habilitada, si no estuviera, se tiene que habilitar
"rpc-enabled": true,

Habilitar las direcciones para conectarse.
Por defecto viene 0.0.0.0. Si queremos limitar a una dirección IP, la pondremos aquí.
"rpc-bind-address": "0.0.0.0",

Deshabilitar las listas RPC :
Si no se deshabilita, buscaría esa lista para ver las direcciones que pueden acceder.

"rpc-whitelist-enabled": true,

 Cambiamos por

"rpc-whitelist-enabled": false,

Usuario para conectarse:
Por defecto es "transmission". Lo podemos cambiar a gusto del usuario.
"rpc-username": "transmission",

Password
Por defecto es "transmission ".
"rpc-password": "{75e10b6e7306b07d013a7d866eea98fe484e12cd/RzC0ohJ",
Para cambiarla, borramos lo que hay entre las comillas y escribimos la nueva contraseña.

Definir el numero de descargas:
Definimos cuantas descargas se realizan simultáneamente. Por defecto es 5.
"download-queue-size": 5,




Una vez configurado, hay que arrancar el demonio para que se ejecute. Para ello, ejecutamos el comando:

  • sudo /etc/init.d/transmission-daemon start

 Acceso al programa:

El acceso se hace mediante la web del programa. La dirección es la que tenga la Raspberry, (por ejemplo 192.168.0.22)
Para acceder seria 192.168.0.22:9091


Raspberry PI: Montar un Pendrive

Como añadir un Pendrive a un Raspberry.

Para almacenar información en un Raspberry, se puede utilizar cualquier dispositivo USB. Para ello es necesario utilizar un HUB con alimentación externa, ya que el Raspberry no puede alimentarlo.

Primero: Identificar la direccion del Pendrive.

Sin tener conectado el Pedrive, ejecutamos la orden:
  • sudo fdisk -l
  Ahora conectamos el pendrive y ejecutamos el comando de nuevo.

 En la utlimas lineas se muestra el pendrive, y el punto de montaje.
Como se ve, la dirección es /dev/sda1. El pendrive lo formatee en el sistema de archivos es EXT4. Pero se puede formatear en FAT32, para que sea compatible con otros sistemas operativos.

Segundo: Crear el punto de montaje.

De esta forma, podremos acceder a el. Se creara una carpeta dentro del directorio /media. En mi caso lo llamare 80G. Lo podemos hacer con el comando:
  •  sudo mkdir /media/80G



Tercero: Modificar /etc/fstab
Si no modificáramos este archivo, habría que crear la partición cada vez que se arrancar la Raspberry.
Para modificarla, ejecutamos el comando:
  • sudo nano /etc/fstab
añadimos la linea
 Quedando el fichero de la siguiente forma:

Para que los cambios tengan efecto se debe de resetear o ejecutar el comando:

  • sudo mount -a

Si nos hemos equivocado no mostrar el siguiente error:

Si revisamos lo que escribimos anteriormente, nos daremos cuenta que pusimos 
/dev/sda y lo correcto es /dev/sda1



viernes, 8 de noviembre de 2013

Raspberry Pi: Actualizar el software

Actualización del Software

Una vez instalado por primera vez es muy conveniente actualizar el software. Para ello debemos de teclear los siguientes comandos:
  • sudo apt-get update
  • sudo apt-get upgrade.
Es recomendable  realizarlo cada cierto tiempo.