Show Posts
Pages: 1 [2] 3 4 ... 14
16  International / Español / Activar ventilador 12 v on: July 01, 2012, 12:24:34 pm
Buenas.

A la caja donde quiero montar un clon arduino le quiero poner un ventilador que se conecte cuando la programación quiera. He pensado que el ventilador sea de 12 voltios por lo siguiente:
Puedo montar un trafo de este tipo: http://www.electan.com/transformador-encapsulado-2x6v-24va-p-1494.html
Y al mismo tiempo usar los 6 voltios de la salida simétrica para alimentar el arduino.

Pero tengo varias dudas:

  • ¿Serán suficientes los 2.4 VA para todo eso?
  • Con 6 voltios ¿tendré que montar un regulador low-dropout? Si la respuesta es afirmativa ¿Cual me recomendáis?
  • Para conmutar el ventilador, ¿tendré que usar un relé o será suficiente un transistor?
  • Estoy casi seguro que con un transistor será suficiente ¿cual me recomendáis?

Entiendo que en estas ecuaciones falta una variable muy importante: la potencia del ventilador. Estaba pensando en algo del tamaño del ventilador de la caja de un pc. Vale, ok, hay miles de tipos. Pensaba en algo sencillo. Dentro de la caja habrá magnetotermico, diferencial, custom-duino con trafo comentado y un variador de frecuencia de baja potencia. El variador es de los más pequeños del mercado (200w max). No lleva ventilación forzada. La caja será como una caja de zapatos grande.

Agradezco comentarios, alternativas, etc.

Bueno, sigo avanzando por mi cuenta.

Un saludo y muchas gracias.

17  International / Español / Re: Función para partir y unir un float (SOLUCIONADO) on: June 19, 2012, 03:49:56 pm
Efectivamente.

int en Chipkit usa 4 bytes. Cuando he usado dos short para montar un float ha salido bien.

Muchas gracias compañeros.
18  International / Español / Re: Función para partir y unir un float on: June 19, 2012, 03:59:02 am
Buenos dias.

1) No puedo usar el método de partir entero y decimal por que no puedo elegír la manera. Ya me viene el float en 4 bytes

2) Creo que ya se el motivo de que no funcione el union. Chipkit utiliza enteros de 4 bytes, con lo cual no sirve para la carambola. Intentaré hacer algo como:

Code:
union
{
  unsigned short shorts[2];   //o uint16_t
  float toFloat;
} foo;


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

   
void loop()
{
  // 3.141593
  foo.ints[0]=4059;
  foo.ints[1]=16457;

  Serial.println(foo.toFloat, 6); // con 6 decimales
  Serial.println(foo.ints[0]);
  Serial.println(foo.ints[1]);
  Serial.println("");
  delay(500);
}

Cuando pueda lo probaré.

Un saludo, y muchas gracias.
19  International / Español / Re: Función para partir y unir un float on: June 18, 2012, 03:51:15 pm
Pues a mi me da...

Code:
0.000000
4059
16457

0.000000
4059
16457


Y ahora es cuando yo digo... es que no estoy usando Arduino, estoy usando una chipkit max32.
Pero... ¿No debería dar igual?

Un saludo.
20  International / Español / Re: Función para partir y unir un float on: June 17, 2012, 11:33:26 am
Ya estoy de vuelta.

Con un servidor modbus en mi pc le puedo mandar el float partido en dos ints.
Esto lo hace bien y luego puedo recuperarlo de igual manera con el PC.

El problema viene cuando quiero volver a montar esos dos ints en un float y escribirlo en puerto serie.

El codigo que tengo es más o menos:


Code:

//fuera de setup y loop

unsigned int regs1[21];

union {
unsigned int ints[2];
float toFloat;
} foo;

void loop {

  foo.ints[0]=regs1[15];
  foo.ints[1]=regs1[16];

}


void contestar{

      Serial.println(foo.ints[0]);
      Serial.println(foo.ints[1]);
      Serial.println(foo.toFloat);
}


Eso está resumido.
Cuando llamo a "contestar" me aparece:
4059
16457
0.00

El float que debería aparecer es 3.141592654 (aprox)

Creo que el problema está en la implementación del float. Es decir: el pc ha mandado 2 ints que luego él sabe componer, pero arduino no.
¿Puede ser?
¿opiniones, ideas?
21  International / Español / Re: Función para partir y unir un float on: June 17, 2012, 09:16:17 am
Ostras, union hace la fuerza
Voy a probarlo
22  International / Español / Función para partir y unir un float on: June 16, 2012, 01:05:20 pm
Buenas.

Por necesidades varias necesito coger un float y guardarlo como dos int (para transmitirlo por modbus); luego tengo que coger esos dos ints y volver a componer el float.

Dicho de otra manera.
-Crear un float
-Meter los dos primero bytes en un int
-Meter los dos segundos bytes en otro int
-transmitirlos por modbus (eso ya lo tengo en marcha)
-volver a componer el float en base a los dos ints

He echado un vistazo a las operaciones

Code:
#include <WProgram.h>
template <class T> int EEPROM_writeAnything(int ee, const T& value)
{
    const byte* p = (const byte*)(const void*)&value;
    int i;
    for (i = 0; i < sizeof(value); i++)
  EEPROM.write(ee++, *p++);
    return i;
}

template <class T> int EEPROM_readAnything(int ee, T& value)
{
    byte* p = (byte*)(void*)&value;
    int i;
    for (i = 0; i < sizeof(value); i++)
  *p++ = EEPROM.read(ee++);
    return i;
}

y se que aqui tengo la respuesta, pero no lo saco.

¿Alguna manita?

Gracias.
23  International / Español / Re: array de punteros a arrays on: May 24, 2012, 03:35:10 pm
No, en este pc no puedo probarlo.
Preguntaba si es esa la estrategia.

Un saludo.
24  International / Español / Re: array de punteros a arrays on: May 24, 2012, 12:50:36 pm
A ver...

Supongamos que tengo 10 arrays del estilo:

int miarray0[20];
int miarray1[20];
int miarray2[20];
...
int miarray9[20];

Creo un array de punteros de la siguiente manera:

int * contenedor[10];          
contenedor[0] = miarray0
...
contenedor[9] = miarray9

lanzo la función dentro de un bucle.
funcion() admite un array de enteros

funcion(contenedor[var])


¿es más o menos eso?
25  International / Español / array de punteros a arrays on: May 23, 2012, 04:46:28 pm
Buenas.

Supongamos que tengo:
-int array[10]
-funcion(array)

Supongamos que quiero hacer un bucle que ejecute funcion(array) sobre un array distinto en cada ciclo.

He pensado que la solución sería hacer otro array que contenga las direcciones de los arrays a utilizar, y luego pasar a funcion(array) las posiciones de este nuevo array.

¿se haría así? ¿como declaro el nuevo array?

gracias
26  International / Español / Re: Array de dimensión "variable" on: May 22, 2012, 03:59:01 pm
Muchas gracias
27  International / Español / Array de dimensión "variable" on: May 22, 2012, 01:05:43 pm
Hola.

Necesito que un array tenga una dimensión determinada en tiempo de compilación:

int nSlaves = 1; 
const int TOTAL_NO_OF_PACKETS = nSlaves * 2;
Packet packets[TOTAL_NO_OF_PACKETS];

Pero me da un error: error: array bound is not an integer constant before ']' token

Además, si pongo directamente el valor en lugar de TOTAL_NO_OF_PACKETS funciona correctamente.

¿como se soluciona esto?
28  International / Español / Re: Duda de programación on: May 17, 2012, 03:21:32 pm
OK. Entonces la solución es priorizar las operaciones para que no se desborde la variable.

Gracias.
29  International / Español / Re: Duda de programación on: May 17, 2012, 02:33:18 pm
fm, eso es más o menos lo que he planteado.

El tema es que no se como evaluar el tiempo cuando se ha producido el desbordamiento de millis()
30  International / Español / Re: Duda de programación on: May 17, 2012, 01:50:11 pm
OK, gracias.

Vamos a concretar un poco más.

Digamos que quiero evaluar cuanto tiempo lleva una variable = 1.
Se me a ocurrido lo siguiente:

Si la variable = 0: t_start = millis()
Si es 1: duracion = millis() - t_start

Pero hay una particularidad: el overflow de millis() cada nosecuantos días

Entonces lo he planteado de la siguiente manera:

si millis() < t_start: duracion = 2^32 + now - t_start

Pero me decís que se desborda ¿que puedo hacer?
¿y si lo hago en dos veces: duracion = 2^32 - t_start, y luego duracion = duracion + now?

Gracias
Pages: 1 [2] 3 4 ... 14