Concurso de fotografía AM

Temática: «Una panorámica de tu acuario».
Ya esta abierto el plazo para presentar fotografías.

Más info
image01

¿Aún no conoces AMA?

Hazte socio de Acuariofilia Madrid Asociación.
CERRADO EL PLAZO DE INSCRIPCIÓN

Más info
image01

Atlas de peces de AM

¡Hemos alcanzado las 800 fichas! Visita nuestro atlas de peces actualizado.

Más info
image01

Cardúmenes y sociabilidad

Nueva actualización de la tabla con una extensa relación de peces, donde podrás conocer qué entorno necesita cada especie, su sociabilidad y si convive o no en cardumen. ¡Pasa a descubrirla!

Mas info
image01
Aula Arduino para principiantes.
Respuestas: 1783    Visitas: 466759
#1,696
Antonio ,como estas?
Tengo una duda y no se si ya la he expuesto aqui .,Trabajo con tip 121 para dimear mi pantalla ,el caso es que de mi fuente salen 13.8V y al pasar por los tip121 baja a 12.8V o menos, es normal esta bajada de voltaje? Podre tener estable todos? Algunos transistores me varia la caida de voltaje a 12.2V
Gracias
Saludos
#1,697
(16-04-2016, 06:49 PM)libre escribió: Antonio ,como estas?
Tengo una duda y no se si ya la he expuesto aqui .,Trabajo con tip 121 para dimear mi pantalla ,el caso es que de mi fuente salen 13.8V y al pasar por los tip121 baja a 12.8V o menos, es normal esta bajada de voltaje? Podre tener estable todos? Algunos transistores me varia la caida de voltaje a 12.2V
Gracias
Saludos

Si la caída de tensión ocurre en la misma salida de la fuente será por exceso de consumo para esa fuente. Si la bajada de tensión es en el voltaje que reciben los LEDs se deberá a la caída de tensión en el TIP121.

CAO1 documenta el dimeo con Tip121 porque es lo que yo conocía y lo que yo he usado. Lo ha usado mucha gente pero no es la solución óptima. El inconveniente es que se calientan. Eso tiene que ver con la caida de tensión en los LEDs. Ofrecen cierta resistencia al paso de la corriente.

La primera solución es continuar con los TIP121 poniendo disipadores de calor y asumir un pequeño consumo extra de energía.

La segunda opción solo para Arduinos a 5v es la de dimear con transistores Mosfet.

[Imagen: Mosfet-conexion-logic-level.png]
#1,698
Hola Antonio y demás miembros de este foro.

Te cuento, me llego hoy la placa arduino mega2560 y la verdad llevo toda la tarde y no hay narices a que arranque, tengo dos leds rojos encendidos, uno de ellos intermitentes.

Intenté descargar el driver y no me va tampoco, pues lo pincho en el usb y no me aparece ni en otros dispositivos ni en COM, asi que por más que estuve mirando por internet, no hay forma de comunicarme con el.

Tengo instalado el Win 10, para que te sirve de referencia.

Me recuerdo que cuando compre la placa me comentaste algo de un parche, pues no es original.

Echame una mano por favor cuando puedas que con la ilusion que tenía, me estoy hundiendooooooooooooooo..

Gracias de antemano y saludos a todos.
#1,699
Puede que se trate del problema con el chip CH340 (en clones chinos)
driver-ch340-para-arduino-chinos-o-genericos


Yo uso Linux y de momento no me he tropezado con este tipo de problemas de dejo algunas URLs más por si acaso la primera no te sirve.
http://www.instructables.com/id/How-to-f...no-clones/
https://www.arduino.cc/en/Guide/Troubleshooting
http://www.electrohobby.org/usb-ftdi-no-se-reconoce/
http://www.taringa.net/posts/ciencia-edu...duino.html
#1,700
(21-04-2016, 09:56 PM)vidiagu escribió: Hola Antonio y demás miembros de este foro.

Te cuento, me llego hoy la placa arduino mega2560 y la verdad llevo toda la tarde y no hay narices a que arranque, tengo dos leds rojos encendidos, uno de ellos intermitentes.

Intenté descargar el driver y no me va tampoco, pues lo pincho en el usb y no me aparece ni en otros dispositivos ni en COM, asi que por más que estuve mirando por internet, no hay forma de comunicarme con el.

Tengo instalado el Win 10, para que te sirve de referencia.

Me recuerdo que cuando compre la placa me comentaste algo de un parche, pues no es original.

Echame una mano por favor cuando puedas que con la ilusion que tenía, me estoy hundiendooooooooooooooo..

Gracias de antemano y saludos a todos.

a mi me paso algo parecido
instale la nueva versión de arduino(el programa del pc) y a correr
#1,701
Hola de nuevo a todos, espero estar por aquí una temporada si las obligaciones laborales me lo permiten.

el caso es que mis poquísimos ratos libres, he estado leyendo un poco de todo sobre progarmación c++ y arduino y estoy haciendo un pequeño programilla para ver si soy capaz de hacer algo por mi mismo.

Código:
int nivel_minimo=3; // nivel de cambio de agua
int nivel_relleno =2;//sensor de nivel donde comenzara el llenado... ligeramente inferiror al de máximo
int nivel_maximo=1;//sensor de nivel máximo del acuario
int rele_vaciado=4;// relé que activaría la bomba de vaciado
int rele_llenado=5;// relé que abre la llave de paso de entrada de agua nueva
int pulsador_cambio=6;// pulsador para comenzar el cambio de agua
void setup ()
{
pinMode (nivel_minimo, INPUT);
pinMode (nivel_relleno, INPUT);
pinMode (nivel_maximo, INPUT);
pinMode (rele_vaciado, OUTPUT);
pinMode (rele_llenado, OUTPUT);
pinMode (pulsador_cambio, INPUT);
}
void loop ()

{
  // condicion =if ... quiero que al pulsar el interruptor comience el cambio y que después de la primera función if
  //pase automáticamente a la siguiente ya que la primera no se cumplirá.
  
  if (digitalRead (pulsador_cambio==1 && nivel_minimo==0)); //Si pulso el interruptor de cambio y el sensor de nivel mínimo indica que el nivel esta por encima.
  {digitalWrite (rele_vaciado, HIGH);                       // se activa el relé de la bomba

//[b]aquí me surge la una de las dudas: no tengo claro si después de la primera función if, ¿pasa  la segunda?[/b]
if (digitalRead (nivel_minimo==0));
{digitalWrite (rele_vaciado, HIGH);
if (digitalRead (nivel_minimo==0));


}
  }

  }
}

Quiero que cuando la segunda condición no se cumpla por que el nivel ha llegado al mínimo comience el llenado es en lo que estoy ahoraBig Grin
#1,702
He cambiado el tipo de dato de la variable int, por boolean, no se si realmente reduzca el peso.

También he aumentado el codigo, pero sigo sin tener claro si funcionaria como yo esperoHuh
No tengo claro como lee los bloques:
Se que tras leer las variables lee el setup, pero el bloque void loop y void cambio, no lo tengo nada claro-no2.gif

Código:
boolean nivel_minimo=3;
boolean nivel_relleno =2;
boolean nivel_maximo=1;
boolean rele_vaciado=4;
boolean rele_llenado=5;
boolean pulsador_cambio=6;
void setup ()
{
pinMode (nivel_minimo, INPUT);
pinMode (nivel_relleno, INPUT);
pinMode (nivel_maximo, INPUT);
pinMode (rele_vaciado, OUTPUT);
pinMode (rele_llenado, OUTPUT);
pinMode (pulsador_cambio, INPUT);
}

void loop ()
{
{
  if (digitalRead (nivel_relleno==HIGH && nivel_maximo==LOW));
  {
    digitalWrite (rele_llenado, LOW);
    
  if (digitalRead (nivel_relleno==HIGH && nivel_maximo==HIGH));
  {
    digitalWrite (rele_llenado, HIGH);
    
if (digitalRead (nivel_relleno==HIGH && nivel_maximo==LOW));
  {
    digitalWrite (rele_llenado, HIGH);

if (digitalRead (nivel_relleno==LOW && nivel_maximo==LOW));
  {
    digitalWrite (rele_llenado, LOW);
  }}}}
  }
  }
void cambio ()

{
   if (digitalRead (pulsador_cambio==HIGH && nivel_minimo==LOW)); //Si pulso el interuptor de cambio y el sensor de nivel minimo indica que el nivel esta correcto
  {digitalWrite (rele_vaciado, HIGH);                       // se activa el relé de la bomba
  }
if (digitalRead (nivel_minimo==HIGH));   // cuando el sensor de nivel minimo indica que el nivel esta en el minimo
{digitalWrite (rele_vaciado, LOW); }     //cesara el vaciado ¿pero no tengo claro que pasaria? ¿si volveria al void loop?

}
#1,703
No uses el tipo boolean para un dato entero. En todo caso podrías usar el tipo de dato byte.

Boolean, teóricamente, solo maneja dos valores: 1) true (cualquier valor distinto de cero se considera true) y 2) false (se representa internamente por cero). En la conversión automática de tipos, algún compilador puede hacer algo raro con los valores de los datos distintos de cero.

Si lo que quieres es ahorrar memoria, no necesitarás usar variables globales, que van a reservar memoria desde que empieza el programa hasta que termine. Lo que en realidad quieres hacer es una simple asociación de identificadores y valores que puede conseguirse usando macros. Eso no consume memoria.

Código:
#define nivel_minimo       3
#define nivel_relleno        2
#define nivel_maximo      1
#define rele_vaciado        4
#define rele_llenado         5
#define pulsador_cambio  6

Para estos identificadores de macros suele preferirse el uso de identificadores en mayúsculas.

Si solo se van a usar dentro de una función otra cosa que podrías hacer es declarar las variables como locales. De esta forma, terminada la función loop(), las variables desaparecen y se recupera el espacio que estaban ocupando en la memoria.


Código:
void setup ()
{
boolean nivel_minimo=3;
boolean nivel_relleno =2;
boolean nivel_maximo=1;
boolean rele_vaciado=4;
boolean rele_llenado=5;
boolean pulsador_cambio=6;

pinMode (nivel_minimo, INPUT);
pinMode (nivel_relleno, INPUT);
pinMode (nivel_maximo, INPUT);
pinMode (rele_vaciado, OUTPUT);
pinMode (rele_llenado, OUTPUT);
pinMode (pulsador_cambio, INPUT);
}

void loop ()
{
{
  if (digitalRead (nivel_relleno==HIGH && nivel_maximo==LOW));
  {
    digitalWrite (rele_llenado, LOW);
    
  if (digitalRead (nivel_relleno==HIGH && nivel_maximo==HIGH));
  {
    digitalWrite (rele_llenado, HIGH);
    
if (digitalRead (nivel_relleno==HIGH && nivel_maximo==LOW));
  {
    digitalWrite (rele_llenado, HIGH);

if (digitalRead (nivel_relleno==LOW && nivel_maximo==LOW));
  {
    digitalWrite (rele_llenado, LOW);
  }}}}
  }
  }
void cambio ()

{
   if (digitalRead (pulsador_cambio==HIGH && nivel_minimo==LOW)); //Si pulso el interuptor de cambio y el sensor de nivel minimo indica que el nivel esta correcto
  {digitalWrite (rele_vaciado, HIGH);                       // se activa el relé de la bomba
  }
if (digitalRead (nivel_minimo==HIGH));   // cuando el sensor de nivel minimo indica que el nivel esta en el minimo
{digitalWrite (rele_vaciado, LOW); }     //cesara el vaciado ¿pero no tengo claro que pasaria? ¿si volveria al void loop?

}

Dado que internamente los ordenadores trabajan con bytes o con combinaciones de varios bytes, el dato boolean, se implementará en un Arduino de 8 bits con un byte por razones de eficielcia. Ningún tipo de dato ocupará menos de un byte. El tamaño de un tipo de datos es siempre un numero de bytes y este tamaño puede ser preguntado en el programa mediante la función sizeof().

sizeof(int) devolverán. (2 bytes).
sizeof(char), sizeof(boolean), o sizeof(byte) devolveran 1. (1 byte).

Puedes ejecutar el código siguiente y algunos de los tipos de datos ocuparan distinto tamaño en un Arduino de 8 bits (Arduino UNO) que en uno de 32 bits (Arduino DUE).

Código:
void loop() {
  Serial.print("sizeof(byte)="); Serial.println(sizeof(byte));
  Serial.print("sizeof(char)="); Serial.println(sizeof(char));
  Serial.print("sizeof(short)="); Serial.println(sizeof(short));
  Serial.print("sizeof(int)="); Serial.println(sizeof(int));
  Serial.print("sizeof(long)="); Serial.println(sizeof(long));
  Serial.print("sizeof(long long)="); Serial.println(sizeof(long long));
  Serial.print("sizeof(bool)="); Serial.println(sizeof(bool));
  Serial.print("sizeof(boolean)="); Serial.println(sizeof(boolean));
  Serial.print("sizeof(float)="); Serial.println(sizeof(float));
  Serial.print("sizeof(double)="); Serial.println(sizeof(double));
  Serial.print("sizeof(int8_t)="); Serial.println(sizeof(int8_t));
  Serial.print("sizeof(int16_t)="); Serial.println(sizeof(int16_t));
  Serial.print("sizeof(int32_t)="); Serial.println(sizeof(int32_t));
  Serial.print("sizeof(int64_t)="); Serial.println(sizeof(int64_t));
  Serial.print("sizeof(uint8_t)="); Serial.println(sizeof(uint8_t));
  Serial.print("sizeof(uint16_t)="); Serial.println(sizeof(uint16_t));
  Serial.print("sizeof(uint32_t)="); Serial.println(sizeof(uint32_t));
  Serial.print("sizeof(uint64_t)="); Serial.println(sizeof(uint64_t));
  Serial.print("sizeof(char*)="); Serial.println(sizeof(char*));
  Serial.print("sizeof(int*)="); Serial.println(sizeof(int*));
  Serial.print("sizeof(long*)="); Serial.println(sizeof(long*));
  Serial.print("sizeof(float*)="); Serial.println(sizeof(float*));
  Serial.print("sizeof(double*)="); Serial.println(sizeof(double*));
  Serial.print("sizeof(void*)="); Serial.println(sizeof(void*));
  Serial.println();
  delay(5000);
}
#1,704
Espero no molestar o inportunar a nadie,tengo una duda desde ya mucho tiempo atras
Gracias
Tengo tip 120 y los controlo mediante arduino y en la Base del tip va una resistencia de 2.2K ohm ,almeno en todos los diagramas hay una,. Para que sirve esta?
que pasa si le pongo una de 1K o si no le pongo?
#1,705
(29-04-2016, 09:01 AM)libre escribió: Espero no molestar o inportunar a nadie,tengo una duda desde ya mucho tiempo atras
Gracias
Tengo tip 120 y los controlo mediante arduino y en la Base del tip va una resistencia de 2.2K ohm ,almeno en todos los diagramas hay una,. Para que sirve esta?
que pasa si le pongo una de 1K o si no le pongo?

Creo que es para limitar la corriente que demande del pin de arduino. Sin ella o con una más baja se te podría quemar el pin. Ahora bien, no se decirte si una de 1K te valdría.
#1,706
(29-04-2016, 09:01 AM)libre escribió: Espero no molestar o inportunar a nadie,tengo una duda desde ya mucho tiempo atras
Gracias
Tengo tip 120 y los controlo mediante arduino y en la Base del tip va una resistencia de 2.2K ohm ,almeno en todos los diagramas hay una,. Para que sirve esta?
que pasa si le pongo una de 1K o si no le pongo?
Como muy bien te dice Agamenon es para limitar la corriente del pin de Arduino, sino pusieramos resistencia la corriente de base del TIP142 puede llegar a ser de 500mA (muy superior al máximo que puede manejar un Arduino que es 40mA).
En cuanto a tu pregunta, sí que funcionaría con una resistencia de 1K. Aunque la corriente del pin seguiría siendo muy baja, sería el doble que con una de 2K2. Y siempre es bueno ahorrar algo de corriente en las salidas de los arduinos, ya que si queremos conectar más cosas en él, no se puede exceder de 150mA sumando todas las salidas. Así que si te ahorras un poco aquí en un futuro te puede ayudar.
#1,707
Jejeje gracias ,ya he entendido gracias de nuevo a los 2
#1,708
Antonio, esta duda va para ti porque implican a DemoBotonera y CAO.

Estoy teniendo problemas muy raros con una botonera que he fabricado y CAO. La botonera la he testeado entera con multímetro y no detecto nada raro, y probándola en DemoBotonera va perfecta. Pero al intentar usarla en CAO, el sistema se vuelve loco, le doy una sola vez al botón para navegar por los menús, y sigue bajando infinitamente como si se hubiese quedado pillado el botón (cuando NO se queda pillado). He revisado las soldaduras, los contactos, todo. No tengo ni idea cómo resolver este problema y me estoy empezando a desesperar.

Para demostrar y que se entienda mejor el problema adjunto dos videos.

Testeo de la botonera en el programa DemoBotonera



Prueba de la botonera en CAO y demostración del problema




A ver si pudieses entender qué ocurre, porque ya no se qué más probar, he desmontado todo y comprobado las soldaduras dos veces.

Gracias!
#1,709
Me resulta familiar. El hardware que has realizado, además de quedar muy chulo, veo que funciona perfectamente. No le des más vueltas, parece que es un problema de software.

Durante el desarrollo de alguna versión de CAO, recuerdo que uno de los BUGs que tuve que corregir tenía que ver con un comportamiento de ese tipo.

También creo recordar que tenía que ver con un mal funcionamiento del módulo Cao1_Botonera5Puls y más concretamente con el uso de la función ButtPressed() o BreakPressed() dentro de la funcion GettButton().

Está última función en determinadas ocasiones se invoca con autorepetición de tecla automática. El Bug según creo recordar es que dentro de la autorepetición no se liberaba porque no detectaba cuando se liberaba el botón.

Ten en cuenta que CAO son 9000 líneas, que he ido trabajando en una nueva linea de proyectos en los cuales no uso interfaz de botonera+LCD, y que toda es parte hace muchos meses que no la trabajo.

No recuerdo en que momento apareció ese problema, pero recuerdo que lo corregí.

La última versión estable es CAO1 (Versión 1.2.2).

Mira a ver si te sirve lo que te he contado y en caso contrario dime que versión tienes tú para intentar hacer alguna prueba.

Desempolvaré el ArduinoMega que usaba para pruebas de CAO en mi despacho. El del acuario de 150L de momento no lo toco.
#1,710
(30-04-2016, 08:35 PM)Antonio Castro escribió: Me resulta familiar. El hardware que has realizado, además de quedar muy chulo, veo que funciona perfectamente. No le des más vueltas, parece que es un problema de software.

Durante el desarrollo de alguna versión de CAO, recuerdo que uno de los BUGs que tuve que corregir tenía que ver con un comportamiento de ese tipo.

También creo recordar que tenía que ver con un mal funcionamiento del módulo Cao1_Botonera5Puls y más concretamente con el uso de la función ButtPressed() o BreakPressed() dentro de la funcion GettButton().

Está última función en determinadas ocasiones se invoca con autorepetición de tecla automática. El Bug según creo recordar es que dentro de la autorepetición no se liberaba porque no detectaba cuando se liberaba el botón.

Ten en cuenta que CAO son 9000 líneas, que he ido trabajando en una nueva linea de proyectos en los cuales no uso interfaz de botonera+LCD, y que toda es parte hace muchos meses que no la trabajo.

No recuerdo en que momento apareció ese problema, pero recuerdo que lo corregí.

La última versión estable es CAO1 (Versión 1.2.2).

Mira a ver si te sirve lo que te he contado y en caso contrario dime que versión tienes tú para intentar hacer alguna prueba.

Desempolvaré el ArduinoMega que usaba para pruebas de CAO en mi despacho. El del acuario de 150L de momento no lo toco.

Hola Antonio, sí que tiene pinta de un problema de software, pero resulta que cuando probé el montaje inicialmente, antes de que Pedmar me ayudara a dejar con los acabados finales (el trabajo del metacrilato es suyo, es un máquina Pedro Tongue) funcionaba perfectamente. Y ha sido al intentar dejarlo en marcha ya con el montaje final cuando veo que se vuelve loco con la repetición de los botones.

Lo único que puede que varíe es que las pruebas iniciales sí conectaba un sensor de temperatura, y ahora no tenía conectado ninguno. Me parecería un bug enrevesado, pero quien sabe.

De todas formas no sabía que habías sacado la 1.2.2, la versión que tengo yo es la 1.2.1. Dónde la tienes para descargarla?? en tu blog sigues con la 1.2.1 beta.

Todo esto es para mi nuevo acuario. En el anterior tenía el montaje de CAO hecho con protoboards y cables por todas partes jaja, en este lo estoy dejando todo mucho más apañado. El módulo ese que ves de botonera + buzz + pantalla se conecta a arduino por cable de red, así puedo colocar esa placa de metacrilato en una parte más accesible del mueble mientras toda la electrónica puede estar escondida en las entrañas.

A ver si consigo encontrar el problema y poder dejar esto funcionando de una vez, que me está volviendo loco.

Usuarios navegando en este tema: 5 invitado(s)


Salto de foro: