Show Posts
Pages: 1 [2] 3 4 ... 19
16  Topics / Science and Measurement / Re: ranging cap meter not quite correct on: March 04, 2014, 10:57:36 am
I know how it is man, I had the same questions not too long ago... It took me while to figure it out though, so I tried to save you some time  smiley-wink. In very little you will realize, this kind of coding is even easier than BASIC and the others. The computer will save you a lot of time resolving the lines numbering and jumps (I don't know how) without you having to do it. I suggest you start by looking at some examples first ,to get a better idea about how to do it and not make the same mistakes I did, trying to program in Basic at first.  smiley-eek-blue
A few days ago, I posted an example which might help you figuring it out: smiley-roll-sweat
http://forum.arduino.cc/index.php?topic=217512.0
Good Luck with your Project.
17  International / Proyectos / Nivel de Burbuja GUI (Arduino+Processing) on: March 03, 2014, 10:47:11 pm
Hola:
Este es un nivel de burbuja (GUI) construido con Processing 1.5.1 para ser utilizado en Proyectos basados en Arduino. Las variables X, Y estan siendo manejadas por potenciometros conectados a las entradas analogicas A0 y A1 de Arduino. Las mismas estan expresadas en pulgadas (inches) lo mismo que la distancia (D).
Construido con Processing 1.5.1 y Arduino UNO.
Espero les ayude a encontrar ideas y soluciones para sus propios proyectos.
Gracias.
18  Topics / Science and Measurement / Bubble Level GUI (Arduino+Processing) on: March 03, 2014, 10:40:55 pm
Hi:
This is a Bubble Level GUI built with Processing 1.5.1 to be used in Arduino based Projects. The X and Y variables are being driven by potentiometers connected as voltage dividers to the Arduino analog inputs A0 and A1. They are both expressed in inches, likewise the Distance (D).
Built with Processing 1.5.1 and Arduino UNO.
Thanks,

19  Topics / Science and Measurement / Re: ranging cap meter not quite correct on: March 03, 2014, 07:14:00 pm
Something like this;
int ValueRead=analogRead(0);// its better this way as you may need to use the value later on avoiding having to read it again. That's if you can live with the old value. If the loop is slow you might need to read again to update.
if(ValueRead>0)
{
 Discharge();
}
else
{
StopDischarge()
}

void Discharge() //the function or method Discharge
{
//Anything you need to do to keep discharging
}
void StopDischarge() //the function or method StopDischarge
{
//Anything you need to do to stop discharging
}

The Arduino loop will do whaetver you say Discharge() is and it will continue right there when that (subroutine as you call it) finishes. It will check again in the next loop though and will keep discharging until so, without clogging the program as while() does.

In "modern times" they call what you (and me) knew as "subroutines" functions or methods a more appropriate term for Object Oriented Programming  smiley-roll-blue. I haven't found an equivalent for GOTO though. The lines are not numbered as they were before or at least you can't see it, so there is no reference where to jump. The way to do a GOTO is just calling a "function" or "method" when you need it. The program returns automatically to where it was. No need for Return or End. You need to forget about BASIC.  smiley-wink. I had to do it too. Takes a while to "unlearn" it though.
20  Topics / Science and Measurement / Re: ranging cap meter not quite correct on: March 03, 2014, 10:35:13 am
On a quick look:
-Serial.begin(9600); should be on the void setup() and not in void loop(). There is no need to repeat that constantly.
-while (analogRead(ledPin)>0){ //until full discharge. Doing nothing while that condition is true can result problematic.
}. Getting a real zero reading maybe difficult as the cap discharge takes a long time. Noise could also be blocking the program from exiting that while loop.
-Too many while() loops is risky. The loop gets stuck very easily unless its properly done and the exit condition can be satisfied at some point.
-Try replacing the while() loops by if() whenever possible and check the results. I suspect one of them is blocking the whole thing all together; but I haven't checked thoroughly.
21  International / Proyectos / Controles para Juego Simulador de Vuelo on: March 02, 2014, 11:20:00 pm
Hola:
Este es un primer intento de construir una GUI para los controles de un Juego Simulador de Vuelo. Como mis conocimientos de aviacion son practicamente inexistentes, no hay nada serio en este Proyecto y solo se trata de mi interpretacion artistica para este proposito. Sin embargo, los intrumentos de manera individual trabajan en realidad en la forma mostrada en el video. Los valores de las escalas se seleccionaron arbitrariamente. Es importante mencionar la resolucion obtenida en los intrumentos representados. Los Gauges por ejemplo son capaces de resolver 10000 valores diferentes de voltage en el interval de 0-5V, mientras que el conversor A/D de 10bits de Arduino sin ayuda del software solo puede resolver 1024 valores diferentes. Las lecturas son estables y el tiempo de respuesta es acceptable par un indicador de tipo Dial Gauge. Al utilizar un Arduino UNO solo se dispone de 6 entradas analogicas, motivo por el cual todos los Gauges y el indicador de combustible estan anclados  a la misma senal de la entrada A5. Esto se realizo solo para hacer prubas, en realidad hay que extender el numero de entradas probablemente utilizando multiplexores, pero yo estoy renuente a hacer cualquier trabajo de hardware for el momento. El indicador de Altura fue la parte mas dificil del Proyecto y es uno de los mas dificiles que he intentado hasta ahora. Los indicadores de cambio de las variables es possible que aun tengan problemas y aun tengo que comprobar detalladamente si las lecturas que entregan son correctas al cambiar las variables. Para poder probar correctamente los instrumentos que indican variables de rotacion infinita (los que leen angulos) hice que las variables rotaran mas de una vuelta completa por cada barrido completo (270 grados) del potenciometro que las maneja. En esta ocasion, el Horizonte Artificial puede realizar rotaciones continuas e infinitas de 360 grados en el Roll y el Pitch ( no se de veras como se llama eso en espanol), lo cual constituye una mejora clara en comparacion con los que habia hecho ateriormente. Todos los datos del vuelo simulado (con excepcion de la lectura de combustible que olvide incluir) son almacenados en un fichero de Excel como se observa al final del video, simulando la "Caja Negra".
He estado trabajando en este proyecto de forma intermitente por un buen tiempo ya y esta bien avanzado; pero voy a tomar un descanso de el por un rato y mientras tanto va a la gaveta de "algun dia continuara..." Lo positivo es, que tuve que construir muchos nuevos instrumentos virtuales que no tenia y que podre emplear en otros Proyectos,
Construido con Processing 1.5.1 y Arduino UNO.
Gracias.
22  Topics / Science and Measurement / Glass Cockpit for Flight Simulator Game on: March 02, 2014, 10:22:44 pm
Hi:
This is a first attempt at a Glass Cockpit GUI built to be used in a Flight Simulator Game. Since my knowledge of aviation is almost zero, there is nothing serious about it and it is only my artistic interpretation for that purpose. However, the individual instruments work for real in the way shown in the video. Scales were arbitrarily selected. Its important to mention the high resolution achieved with the instruments represented. The resolution for the Gauges for example, is 10000 different voltage values, while varying the voltage with the potentiometer from 0 to 5V. Without software tweaking the Arduino 10 bits A/D converter can only resolve 1024 different levels.The readings are stable and the response time is acceptable for a Dial Gauge indicator type. Since I'm using an Arduino UNO with only 6 analog inputs, the Gauges and Fuel indicator are all link together to the same A5 input signal. This is just for testing and the number of analog inputs must be extended probably with multiplexers; but I'm reluctant to do any hardware build up for now. Building the Altitude Indicator, was the hardest part of the Project and its one of the more difficult instruments I have tried so far. The rate indicators are probably still problematic and I need to check if the readings are correct. To test the infinite rotation instruments (those measuring angles) properly, this time I made the variables change more than one complete rotation per full swing (270 deg) of the potentiometers driving them. The Artificial Horizon this time can make full continuous infinite 360 degrees rotations in both, Roll and Pitch, which is a clear improvement when compared to the ones I've built before. All the data (except Fuel level which I forgot to include) is logged into an Excel file simulating the "Black Box" which can be seeing at the end of the video. I have been working in this Project (intermittently) for a while now and it is well advanced... but I have had enough of it already and its going to the "to be continued... drawer" for a while. The good thing though, is that I built several new virtual instruments for it, which can be used in other Projects.
Built with Processing 1.5.1 and Arduino UNO.
23  International / Software / Re: Codigo para Selector de Voltajes on: March 02, 2014, 08:27:44 am
Olvide colocar un break;
Como las condiciones son mutuamente excluyentes y el potenciometro no puede estar en 2 posiciones al mismo tiempo, ni tampoco cambiar significativamente, mientras el loop de Arduino se ejecuta, seria prudente, colocar un break; para aumentar la eficiencia del codigo y acelerar la velocidad de ejecucion. Esto es particularmente util, cuando el pot apunta a bajas velocidades seleccionadas. De esta forma, cuando se encuentra la posicion, se interrumpe la busqueda inmediatamente, que de continuar seria innecesaria.
Asi;
Gear=i;
break;
24  Topics / Science and Measurement / Re: Arduino Gear Position Sensor on: March 02, 2014, 08:18:31 am
Sorry, I forgot break;. Since the conditions are mutually exclusive and the pot can't be at 2 different positions at the same time or change significantly while the loop is checking, adding a break; once the position have been found will help increase efficiency and speed of the Arduino loop, particularly when low gears are engaged. It will simply stop searching when the position have been found.
Like this:
Gear=i;
break;
25  Topics / Science and Measurement / Re: Using Flags on: March 01, 2014, 08:24:54 pm
Quote
I haven't noticed the use of software flags in the codes I've looked into posted here. I'm not such a regular forum user though, so maybe wrong.
Thanks, I just haven't seen them then smiley-eek-blue

26  Topics / Science and Measurement / Using Flags on: March 01, 2014, 08:07:13 pm
Hi:
I want to bring this subject that I took part in the Spanish forum. It may result interesting for some here also. I haven't noticed the use of software flags in the codes I've looked into posted here. I'm not such a regular forum user though, so maybe wrong. Anyways, this person was getting repeated serial monitor print outs of the same event. He wanted only one per event occurrence. I suggested using software flags to prevent recurrence. These Flags were common use back in time when coding in assembly language. For me they are still very useful and allow me to avoid using delay in many instances which I consider almost always undesirable as it delays everything else also as you know. I also use them in some instances with Processing to redirect program flow sometimes.
I would like to post here the code I posted there for your consideration. I put the delay in there, just because he had it in his original code; but I think its not required. The point is that I think the code can read digital inputs without using delays for debouncing in the case keys are used (if only one key is pressed at a time). I haven't tried that physically building the thing though. I would like to hear your opinions on this.
Here is the original post in case you want to read it:
http://forum.arduino.cc/index.php?topic=222441.0
Code:
int MinInput=2;
int MaxInput=9;
boolean PrintFlag[8];
void setup()
{
  for (int i=0;i<8;i++)
  {
    PrintFlag[i]=false;
    pinMode((i+2), INPUT);
  }
  Serial.begin(9600);
}

void loop()
{
  for (int i=MinInput; i<MaxInput+1;i++)
  {
    if(digitalRead(i)==HIGH)
    {
      if(PrintFlag[i-MinInput]==false)
      {
        Serial.println("paso "+i);
        PrintFlag[i-MinInput]=true;// Sets the flag so it won't print the next time it finds the input in HIGH.   
        for (int j=MinInput;j<MaxInput+1;j++)
        {
          if((j==i)==false)// Resets all other Flags when anyone gets activated.
          {
            PrintFlag[j-MinInput]=false;
          }         
        }
      }
       delay(1000);
    }
  }
}
27  International / Software / Re: Duda quizas rapida de resolver on: March 01, 2014, 06:12:37 pm
Otra cosa:
Las banderas evitan en muchas ocasiones tener que utilizar delay() que es una instruccion que ademas de delay, introdude mucha ineficiencia en el programa y lo demora todo, quizas otras instrucciones que no es conveniente demorar. Prueba sin el delay(1000); Quizas ya no se necesite con el codigo presentado.
28  International / Software / Re: Duda quizas rapida de resolver on: March 01, 2014, 06:04:26 pm
Hola:
Trataria de emplear una bandera que bloquee un segundo acceso a la impression. La bandera solo se resetea cuando otra entrada es activada. En los 80's las banderas como esta se empleban con frecuencia en lenguaje ensamblador. Para mi siguen siendo muy utiles en casos como este, las empleo mucho aun cuando hago algo en Processing. No se porque nunca veo que las empleen hoy en dia???
Algo asi: (aunque compila, no se si corra en el caso que tienes armado en particular).

Code:
int MinInput=2;
int MaxInput=9;
boolean PrintFlag[8];
void setup()
{
  for (int i=0;i<8;i++)
  {
    PrintFlag[i]=false;
    pinMode((i+2), INPUT);
  }
  Serial.begin(9600);
}

void loop()
{
  for (int i=MinInput; i<MaxInput+1;i++)
  {
    if(digitalRead(i)==HIGH)
    {
      if(PrintFlag[i-MinInput]==false)
      {
        Serial.println("paso "+i);
        PrintFlag[i-MinInput]=true;// Setea (activa) la bandera para que no imprima la proxima vez que detecta la entrada en HIGH.   
        for (int j=MinInput;j<MaxInput+1;j++)
        {
          if((j==i)==false)// Resetea todas las demas banderas cuando alguna se activa.
          {
            PrintFlag[j-MinInput]=false;
          }         
        }
      }
       delay(1000);
    }
  }
}
29  International / Proyectos / Balanza Digital (Alta Resolucion y GUI) on: March 01, 2014, 05:04:41 pm
Hola:
Este es un proyecto reciente que consiste en la interfaz grafica de usuario (GUI) de una balanza digital (primera parte) que estoy construyendo. El objetivo en realidad era probar conceptos relacionados con lograr alta resolucion y desarrollar y mejorar algunos instrumentos virtuales que ya habia construido. Tambien queria construir y tener disponible un graficador como el mostrado. Yo habia  incursionado en lograr alta resolucion anteriormente en algunos de mis proyectos; pero nada comparable a lo aqui observado. Utilizando el mismo conversor A/D de Arduino, que en condiciones normales solo puede resolver 1024 diferentes niveles de voltaje en el intervalo de 0 a 5V, en el video se puede apreciar que en la escala de gramos por ejemplo, el sistema resuelve aproximadamente 100000 valores diferentes, lo que equivale a 5V/100000~5 microvolts (voltage steps). En otras escalas, la resolucion lograda es aun mayor como puede apreciarse al final del video. El metodo empleado es un tipo de promediacion con varias modificaciones introducidas. Es importante destacar, que aunque el sistema no tiene implementado ningun metodo de reduccion de ruido por hardware, ni emplea amplificacion, la estabilidad lograda es bastante aceptable. Tambien es bueno enfatizar, que el ruido constituye un gran problema para lograr estabildad en las lecturas obtenidas y es indispensable mantenerlo en los niveles adecuados. Yo trate de anadir "dithering"; pero sin cambios apreciables, quizas porque no lo hice bien o porque ya hay suficiente ruido en la senal y no se necesita. Aun no tengo una respuesta acertada para esta pregunta. Actualmente estoy construyendo un amplificador de instrumentacion y utilizando un sensor real de balanza digiatal. Los resultados no llegan a los aqui presentados con el potenciometro y tuve que disminuir la resolucion en un orden de magnitud para lograr resultados aceptables. El ruido es un gran problema com ya se menciono. Tambien queria mencionar que al no disponer de la instrumentacion con la precision necesaria para realizar las mediciones, no he realizado pruebas de precision, linealidad o repetibilidad serias, aunque tampoco tengo indicaciones claras de que alguno de estos parametros se haya degradado el el proceso. Las mediciones realizadas con los instrumentos a mi alcance, no permiten llegar a conclusions definitivas. Tengo la impression de todas formas, de que si la lectura permanence estable, entonces, los errores que pudieran presentarse se podrian considerar como sistematicos y en consecuencia proceder a cancelarlos matematicamente en el software.
Para poder lograr altos niveles de resolucion, obviamente hubo que reducir drasticamente la respuesta de frecuencia del sistema para eliminar la mayor cantidad de ruido posible y obtener una lectura estable. Esto provoca como es de esperar, que la respuesta en el tiempo del sistema en su conjunto sea lenta. En general, solo variables extremadamente lentas podrian tolerar tal situacion extrema. La lentitud en la respuesta es facilmente appreciable en la velocidad de movimiento de la aguja, aunque en realidad yo esperaba mucho mas deterioro del que  se observa. Hay una delicada linea divisoria entre la reduccion drastica de frecuencia que permite lograr estabilidad y la lentitud en la respuesta que puede considerarse como acceptable para la variable en cuestion.
Este es un ejemplo intencionalmente extremo, realizado con el proposito de probar ideas y conceptos y llegar a algunas conclusioines practicas. Aun tengo muchas preguntas sin respuesta en muchos aspectos; pero los resultados observados en la practica, resultan alentadores.
Gracias.
Aqui esta el video:
30  International / Proyectos / Indicadores Simples on: March 01, 2014, 03:46:24 pm
Hola a todos:
Esta es una version de indicadores simples (Dial Gauges en Ingles) que construi hace algun tiempo. La construccion se basa en Processing y el plan es  emplearlos como instrumentos virtuales en proyectos basados en Arduino. Permiten aprovechar mejor el espacio de pantalla, cuando se combinan con otros instrumentos. En el video se utilizaron  potenciometros connectados a las entradas analogicas de Arduino como divisores de voltaje para simular cambio en las variables. Las escalas se seleccionaron en % como ejemplo; pero pueden configurarse segun se necesite de manera independiente para cualquier otra variable.
Espero les ayude a encontrar ideas y soluciones para sus propios proyectos. Gracias.

Pages: 1 [2] 3 4 ... 19