Hola, no he indagado mucho por que el LibreCAD no permite importar ficheros, pero como me hacia falta una solución rápida yo le he echo de esta forma:
Desde la consola del linux he ido al directorio /usr/share/librecad/ y le he cambiado los permisos a la carpeta library mediante chmod para poder crear directorios y pegar archivos dentro de dicha carpeta.
Posteriormente dentro de la carpeta library he creado un directorio donde he guardado los diferentes ficheros DXF que quería importar en mi proyecto.
Después de reiniciar el LibreCad, he habilitado Library Browser que esta en:
View -> Toolbars -> Enable Library Browser
Ahora nos debería de aparecer nuestra carpeta en una pestaña desplegable y si la seleccionamos veremos nuestros dibujos...
miércoles, 27 de agosto de 2014
domingo, 5 de enero de 2014
Arduino cast o truncar un número foat para Convertit float a int, convertir int a byte...
Según el manual de referencia de Arduino, el operador cast (convertidor de tipos) traduce de un tipo de variable a otra y fuerza que los cálculos se realicen según en el nuevo tipo de variable.
Ejemplo
int i;
float f;
f = 3.6;
i = (int) f; // ahora i es 3
Nota
Cuando hacemos un casting de un float a un int (coma flotante a entero) el valor es truncado, no redondeado. Así que por ejemplo, tanto (int) 3.2 como (int) 3.7 acaban siendo 3.
Fuente: http://arduino.cc/es/Reference/Cast
Una ved llegados a este punto podemos pensar que cast no muy útil puesto que al utilizarlo perdemos los decimales. Pero existe un truco para pasar un valor foat a int sin perder las decimales. Imaginemos que estamos trabajando con un termometro que nos mide la temperatura en grados, y el valor entregado lo tenemos almacenado en una variable float, y nosotros queremos pasarlos a una variable tipo int con dos decimales de precisión. Para solventar este problema, tenemos que trabajar en fracciones de la unidad (décimas, centésimas, milésimas) y escoger la unidad que mejor se ajuste a nuestras necesidades.
En este ejemplo que me puso noter en el foro de arduino se ve claramente a que me refiero:
Gracias a ehrja y noter por enseñarme este truco.
Ejemplo
int i;
float f;
f = 3.6;
i = (int) f; // ahora i es 3
Nota
Cuando hacemos un casting de un float a un int (coma flotante a entero) el valor es truncado, no redondeado. Así que por ejemplo, tanto (int) 3.2 como (int) 3.7 acaban siendo 3.
Fuente: http://arduino.cc/es/Reference/Cast
Una ved llegados a este punto podemos pensar que cast no muy útil puesto que al utilizarlo perdemos los decimales. Pero existe un truco para pasar un valor foat a int sin perder las decimales. Imaginemos que estamos trabajando con un termometro que nos mide la temperatura en grados, y el valor entregado lo tenemos almacenado en una variable float, y nosotros queremos pasarlos a una variable tipo int con dos decimales de precisión. Para solventar este problema, tenemos que trabajar en fracciones de la unidad (décimas, centésimas, milésimas) y escoger la unidad que mejor se ajuste a nuestras necesidades.
En este ejemplo que me puso noter en el foro de arduino se ve claramente a que me refiero:
Código: |
float grados=27.56; int centGrados= grados*100.0; // centGrados=2756 Serial.print(centGrados/100); // Imprime 27 Serial.print(","); Serial.print(centGrados%100);// Imprime 56 |
Fuente: http://forum.arduino.cc/index.php?topic=208565.0 |
Gracias a ehrja y noter por enseñarme este truco.
sábado, 4 de enero de 2014
Arduino Histeresis, retardo o tolerancia de una medida
Normalmente se le llama histeresis a una tolerancia o retardo que tiene un material. Imaginemos que nuestro arduino esta midiendo la temperatura de un liquido que tiene que empezar a fluir a los 30ºC y tiene una tolerancia de 2ºC pues nuestro liquido fluiría entre los 28 y los 32ºC.
De esta forma nosotros podríamos calentar el liquido hasta alcanzar los 33ºC y dejar de calentarlo hasta que la temperatura leída sea menor que 30ºC pero pero superior a 28ºC....
Con esta función calculamos la histeresis de un número:
De esta forma nosotros podríamos calentar el liquido hasta alcanzar los 33ºC y dejar de calentarlo hasta que la temperatura leída sea menor que 30ºC pero pero superior a 28ºC....
Con esta función calculamos la histeresis de un número:
Código: |
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 es la direccion del LCD 16x2 int tolerancia = 5; void setup() { lcd.init(); lcd.backlight(); //enciende la iluminacion } void loop() { Histeresis (random(-10, 10), random(-10, 10), tolerancia ); delay(2000); } // x = Es un valor fijo, por ejemplo el que hemos programado o estipulado. // y = Puede ser el valor obtenido por una sonda. // t = La tolerancia o magen que hemos estipulado, la histeresis. void Histeresis (int x, int y, int t) { lcd.clear(); lcd.setCursor(0, 1); lcd.print("X: "); lcd.print(x); lcd.print(" Y: "); lcd.print(y); lcd.setCursor(0, 0); lcd.print("Tol: "); lcd.print(t); lcd.setCursor(6, 0); int superior, inferior = 0; superior = x + t; //valor fijo + tolerancia inferior = x - t; //valor fijo + tolerancia if ((y >= inferior) && (y <= superior)) { lcd.print(" Si"); } else { lcd.print(" No"); } } |
viernes, 3 de enero de 2014
Arduino Obtener el taño de un aray 2D con sizeof();
Hacia tiempo que estaba atascado con un programa, necesitaba recorrer un array multidimensional o array 2D del cual desconocía el tamaño o número de filas.
Después de preguntar en el foro de arduino, noter me dio la solución. Cuando hacia sizeof(ProgTemporizador); el resultado que obtenía era 56 y yo me pensaba que estaba haciendo algo mal. Pero no es así, ya que sizeof(); no el número de filas de un array, si no que nos devuelve tamaño en bytes del array. Para obtener el número de filas de un array en nuestro caso tenemos que dividir el resultado por 14:
Si hacemos un sizeof(ProgTemporizador); obtenemos 56 (4*7*2), que es el resultado de la mutiplicación del número de filas del array por El número de columnas del array por 2 ya que un INT ocupa 2 bytes.
Código: |
int ProgTemporizador [][7] = { //Fecha, Mes, Año, Hora, Minutos, Salida, Estado {2014, 1, 2, 10, 12, 0, 1}, {2014, 1, 2, 10, 13, 0, 0}, {2014, 1, 2, 10, 13, 1, 1}, {2014, 1, 2, 10, 14, 1, 0} }; |
Después de preguntar en el foro de arduino, noter me dio la solución. Cuando hacia sizeof(ProgTemporizador); el resultado que obtenía era 56 y yo me pensaba que estaba haciendo algo mal. Pero no es así, ya que sizeof(); no el número de filas de un array, si no que nos devuelve tamaño en bytes del array. Para obtener el número de filas de un array en nuestro caso tenemos que dividir el resultado por 14:
Si hacemos un sizeof(ProgTemporizador); obtenemos 56 (4*7*2), que es el resultado de la mutiplicación del número de filas del array por El número de columnas del array por 2 ya que un INT ocupa 2 bytes.
Código: |
int ProgTemporizador [][7] = { //Fecha, Mes, Año, Hora, Minutos, Salida, Estado {2014, 1, 2, 10, 12, 0, 1}, {2014, 1, 2, 10, 13, 0, 0}, {2014, 1, 2, 10, 13, 1, 1}, {2014, 1, 2, 10, 14, 1, 0} }; void setup() { Serial.begin(9600); } void loop() { int x = sizeof(ProgTemporizador); x = (x / 7) / 2; //x = x / 14; Mas facil seria dividirlo por 14... Serial.print ("Numero X = "); Serial.println (x); for (int i=0; i < x; i++) { for (int n=0; n < 7; n++) { Serial.print(ProgTemporizador [i][n]); Serial.print(" "); } Serial.println(); } Serial.println ("-----------------------------------------------------"); delay(5000); } |
Fuente: http://forum.arduino.cc/index.php?topic=208323.0 |
Arduino Funcion para obtener la fecha en modo texto
Hace un rato me he encontrado con esta funcion que ha publicado jalfonsosuarez en el foro de arduino, y me ha parecido muy interesante, ya que con ella se puede pasar una fecha obtenida del relog en tiempo real (RTC) a modo texto muy facilmente y con poco codigo:
Código: |
/* FUNCION PARA OBTENER LA FECHA EN MODO TEXTO Devuelve: DD-MM-AAAA HH:MM:SS */ String dimeFecha() { char fecha[20]; DateTime now = RTC.now(); //Obtener fecha y hora actual. int dia = now.day(); int mes = now.month(); int anio = now.year(); int hora = now.hour(); int minuto = now.minute(); int segundo = now.second(); sprintf( fecha, "%.2d.%.2d.%.4d %.2d:%.2d:%.2d", dia, mes, anio, hora, minuto, segundo); return String( fecha ); } |
Fuente: http://forum.arduino.cc/index.php?topic=207403.0 |
lunes, 30 de diciembre de 2013
Arduino mostrar temperatura con un DS1820 en un LCD 16x2 I2C
Tras varios días de desesperación ya he conseguiguido echar a andar el DS1820 conectado a un display, este es el codigo que he utilizado:
Nota:
A mi a la hora de compilar, las librerias del DS1820 me dierón problemas. Si este es tu caso mira este enlace:
http://aitormartin-apuntes.blogspot.com.es/2013/12/arduino-sensores-ds-1820-y-el-error.html
Código: |
/* Autor: Aitor Martin Fecha: 28-12-2013 Titulo: Sensor de temperatura DS1820 Placa: Arduino uno Post: http://aitormartin-apuntes.blogspot.com.es/2013/12/arduino-mostrar-temperatura-con-un.html Código de dominio publico. Se puede distribuir y modificar libremente, siempre y cuando se mencione al autor y se proporcione un enlace a su web. */ #include <OneWire.h> //Configurar bus onewhire de Dallas #include <DallasTemperature.h>//El ternometro de Dallas DS1820 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 es la direccion del LCD 16x2 //Pata por la que van a entrar los datos al Arduino #define ONE_WIRE_BUS 2 // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); void setup() { lcd.init(); lcd.backlight(); //enciende la iluminacion sensors.begin(); //Iniciamos la libreria del DS1820 } void loop() { sensors.requestTemperatures(); //leemmos la temperatura del sensor. lcd.setCursor(0, 0); lcd.print(sensors.getTempCByIndex(0)); lcd.print(" *C"); delay(3000); } |
Nota:
A mi a la hora de compilar, las librerias del DS1820 me dierón problemas. Si este es tu caso mira este enlace:
http://aitormartin-apuntes.blogspot.com.es/2013/12/arduino-sensores-ds-1820-y-el-error.html
Arduino sensores DS 1820 y el error WConstants.h
Hace cosa de un par de días que me puse a hacer pruebas con los DS 1820 y no conseguia que me funcionase nada me daba un error el :
De internet me descargue muchas librerias diferentes, pero nada si no era un error, era el otro. Me fui a la que creo que es la web oficial y me descarge la versión TCL 3.7.1 Beta, pero me daba el error que aparace en el recuadro de arriba. A si que me decidi descargarme una versión mas vieja de la libreria. Me baje la libreria TCL 3.5.0 me me dio otro error muy diferente:
Esta ved me decia que no encontraba WConstants.h, a si que buscando por internet me encontre con una web en la que David Dicha Perez nos da la solución a este problema:
A si que con el editor de textos abri el fichero DallasTemperature.cpp y cambie el texto que ponia WConstants.h por Arduino.h tal y como comentava David, compile y me funciono a la primera.
Si no quereis complicaros, en la sección de descargas suelo tener una copia de seguridad de mis librerias compartida con todo el mundo.
Error (TCL 3.7.1 Beta): |
Documents/Arduino/libraries/DallasTemperature_371Beta/DallasTemperature.cpp:9:26:
error: WConstants.h: No such file or directory
|
De internet me descargue muchas librerias diferentes, pero nada si no era un error, era el otro. Me fui a la que creo que es la web oficial y me descarge la versión TCL 3.7.1 Beta, pero me daba el error que aparace en el recuadro de arriba. A si que me decidi descargarme una versión mas vieja de la libreria. Me baje la libreria TCL 3.5.0 me me dio otro error muy diferente:
Error (TCL 3.5.0): |
Documents/Arduino/libraries/DallasTemperature/DallasTemperature.cpp:9:26: error: WConstants.h: No such file or directory |
Fuente: http://www.todomarino.com/forum/showthread.php?84914-Informativo-DS18B20-y-arduino-v-1-0 |
Esta ved me decia que no encontraba WConstants.h, a si que buscando por internet me encontre con una web en la que David Dicha Perez nos da la solución a este problema:
Solucion: |
Si alguien se le ha dado por bajarse la ultima versión que han sacado
los de arduino (la v 1.0) y usa los sensores de temperatura del tipo
ds1820 o otros de dallas os va a fallar. A parte de bajar las ultimas
versiones de las librerías onewire y dallastemperature hay que editar a
mano la de dallastemperature y cambiar los sitios donde pueda poner
WConstants.h o wiring.h por Arduino.h. No se si ya lo sabíais pero me acabo de volver mico para encontrar esa referencia... por si alguien quiere ver el resto de cambios echadle un ojo a los de la 1.0: http://arduino.cc/en/Main/ReleaseNotes |
A si que con el editor de textos abri el fichero DallasTemperature.cpp y cambie el texto que ponia WConstants.h por Arduino.h tal y como comentava David, compile y me funciono a la primera.
Antes: |
// This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. #include "DallasTemperature.h" extern "C" { #include "WConstants.h" } |
Despues: |
// This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. #include "DallasTemperature.h" extern "C" { #include "Arduino.h" } |
Si no quereis complicaros, en la sección de descargas suelo tener una copia de seguridad de mis librerias compartida con todo el mundo.
Suscribirse a:
Entradas (Atom)