Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

08/05/2016 #1


Arduino, proyecto calcular cadencia en bicicleta
Saludos a esta comunidad, primero decir que esta página es un magnifico trabajo, de verdad, me ha servido mucho, no puedo estar mas satisfecho. Así que, gracias de verdad.

Como no, necesito vuestra ayuda, porque estoy estancado, os cuento brevemente:

Tengo que realizar un proyecto de en el que trabajando con una bicicleta estatica, gracias a arduino saque los valores de temperatura antes y despues del freno de la rueda (tengo dos sensores de temperatura) y que me de la cadencia de la rueda, los giros que va dando, la frecuencia podríamos decir.

El codigo para leer temperatura, aunque supongo que pueda tener algun fallo, creo que lo tengo bien hecho, pero necesito que me ayudeis con lo demás. Hay un imán en la rueda, y a partir de él necesito calcular por interrupcion (tengo que usar el attachInterrupt) el tiempo que se tarda en que la rueda dé una vuelta, y así continuamente, que me de el tiempo que tarda en dar cada vuelta. Por lo que necesito un codigo de interrupcion que almacene este valor de tiempo de una vuelta (que registre el valor del timer, como un conometro, continuamente me tiene que dar la duracion de cada vuelta de la rueda de la bici) y que al darmelo el timer se resetee, T=0, y asi me pueda dar el valor de la siguiente vuelta, asi continuamente. El iman que está en la rueda de la bici pasará por el mismo punto en cada vuelta, tengo que sacar a partir de esa idea la duracion de cada vuelta, lo que tarda en volver a pasar por ese punto otra vez; no estoy seguro que necesito mas elementos en mi sistema para poder hacer esto

Para empezar es solo eso, pero no consigo que se me ocurra como introducir el codigo de interrupcion de attachInterrupt para poder calcular el valor del timer en cada vuelta y meter este codigo junto al que lee temperatura.

Por favor, se os ocurre algo ? gracias de antemano

Aqui pongo lo que llevo de codigo de temperatura:

float temp1;
int sensortempPin1=0;
float temp2;
int sensortempPin2=1;

void setup() {
// put your setup code here, to run once:

Serial.begin(9600);

}

void loop() {
// put your main code here, to run repeatedly:

temp1=analogRead(sensortempPin1);
temp2=analogRead(sensortempPin2);
temp1=(5.0*temp1*100)/1024.0;
temp2=(5.0*temp2*100)/1024.0;

Serial.print(temp1);
Serial.println(” grados C en el sensor 1″);
Serial.print(temp2);
Serial.println(” grados C en el sensor 2″);
//
delay(1000);

} ...
09/05/2016 #2


A ver si esto te sirve para empezar:

http://www.jovenescientificos.es/tac...se-de-pruebas/

http://kaiwatechnology.com.ar/contad...metro-arduino/
16/05/2016 #3


Continuación
Ya he avanzado. Gracias por vuestra ayuda.

Os cuento:
En la rueda de la bicicleta hay un imán, y en la estructura tengo un relé.
Cada vez que el imán da una vuelta y pasa por el punto donde está el relé, éste salta.
Con esto he de calcular el tiempo que tarda en dar cada vuelta, a través de las interrupciones, y a su vez que dos sensores de temperatura (uno antes del freno y otro después del freno) me den sus dos datos.
Por lo que quiero que se me de continuamente estos datos de Temp1, Temp2 y le tiempo de cada vuelta.

He hecho todo lo que he podido del código, pero necesito que le echéis un vistazo, y me vayáis corrigiendo, porque está lleno de errores seguro, y dudas.
Como que variable tengo que poner volatile, para evitar el rebote, o donde tengo que poner la interrupción e iniciarla de nuevo para que se puedan hacer los cálculos, etc.
No sé si los 'if' están bien, quizás se os ocurra otra forma de hacerlo.

Os enseño lo que tengo:
Código PHP:
const int  releReedPin 2;
int estadoRele 0;         
int ultimoEstadoRele 0;   
long tiempo_anterior 0;
long tiempo_una_rev 0;
unsigned long tiempo_ahora;
long rpm;
long T0 ;  // Variable global para tiempo

// int0 en pin2
// int1 en pin3

float temp1;
int sensortempPin1=0;
float temp2;
int sensortempPin2=1;


void setup() {

  
//pinMode(releReedPin, INPUT);
  
Serial.begin(9600);
  
attachInterrupt(0contartiempoFALLING);

}


void loop() {

// Lee el estado del rele
  
estadoRele digitalRead(releReedPin);
 
// Compara el estado del rele con el estado previo
  
if (estadoRele != ultimoEstadoRele) {
 
// Si el estado ha cambiado incrementa el contador
    
if (estadoRele == HIGH
    {
      
detachInterrupt(0);    //deshabilita le interrupción para realizar los cálculos

      
tiempo_ahora =millis();
      
tiempo_una_rev tiempo_ahora tiempo_anterior;
      
rpm = (60000 tiempo_una_rev) / 3// 1 minuto = 60000 ms
      
      
Serial.print("Tiempo por revolucion: ");
      
Serial.println(tiempo_una_rev);
      
Serial.print("Revoluciones por minuto: ");
      
Serial.println(rpm);


   else {
      
Serial.println("Parada"); 

      
tiempo_anterior tiempo_ahora;
    }
  }
// Guarda el estado actual como ultimo estado
  
ultimoEstadoRele estadoRele;

attachInterrupt(0contartiempoFALLING); //inicia la interrupción


temp1=analogRead(sensortempPin1);
temp2=analogRead(sensortempPin2);
  
temp1=(5.0*temp1*100)/1024.0;
  
temp2=(5.0*temp2*100)/1024.0;
 
  
Serial.print(temp1); 
  
Serial.println(" grados C en el sensor 1");
  
Serial.print(temp2); 
  
Serial.println(" grados C en el sensor 2");
  
//
    
delay(1000);



void contartiempo()

 if ( 
millis() > T0  250)
          {                  
             
tiempo_ahora =millis() ;
          
              
T0 millis();
          }


¿Qué me decís? ¿Qué iríais corrigiendo?

Gracias.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.