Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Adafruit_GFX
Diff: main.cpp
- Revision:
- 4:7f4d81ed3984
- Parent:
- 3:3fbadf6c492f
- Child:
- 5:faf450e9aab0
--- a/main.cpp Thu Dec 16 11:39:46 2021 +0000
+++ b/main.cpp Thu Dec 16 15:01:29 2021 +0000
@@ -38,11 +38,13 @@
Timer t;
Timer bot;
+Timer timerVel;
//Ticker tickerVel;
-int velocidad=0;
+float velocidad=0;
float temperatura;
int contador=0;
+float velocidad_relativa=0.0;
//int target=75; Para el control de velocidad
void encoderAIrq()// contador de vueltas
@@ -62,24 +64,22 @@
step=0;
wait_us(900);
}
-void estadoreset()
+void estadoreset()// estado de seguridad, si el taladro esta situado en un sitio que no sea uno de los 2 finales de carrera, retrocederá hasta el principio dejandolo en el estado de apagado.
{
if (final1!=1) {
enableMotor=1;
paso(0);
- } else if (final1 ==1) {
-
+ } else if (final1 ==1) {// Una vez pisa el final de carrera 1 habilita un mensaje en pantalla dando el valor de la temperatura del motor del taladro y la velocidad del mismo en RPM.
gOled.clearDisplay();
gOled.printf("La temperatura es de %.4f\n",temperatura);
- gOled.printf("La velocidad en rpm es de %d\r\n",velocidad);
+ gOled.printf("La velocidad en rpm es de %.4f\r\n",velocidad);
gOled.display();
gOled.setTextCursor(0,0);
estado = apagado;
enableMotor =0;
}
}
-
-void estadoapagado()
+void estadoapagado()// Estado "inicial" en el que pulsando el boton de inicio comenzará su avance para iniciar la perforación.
{
dirBMotor =0;
@@ -89,23 +89,21 @@
estado= motorpalante;
}
}
-
-void estadomotorpalante()
+void estadomotorpalante()// estado que hace funcionar el avance, el motor taladra a la vez que perfora.
{
- if (boton_emergencia==1) {
+ if (boton_emergencia==1 || temperatura>80) {//es el boton de emergencia y de temperatura, en caso de pulsar la seta de emergencia y que la temperatura supere el valor de 80º, se parará automaticamente.
estado=emergencia;
}
if (boton_inicial==0&&final2==0) {
paso(1);
dirBMotor=1;
rele =1;
-
} else if (final2==1) {
int tiempo=t.read();
//pc.printf("La temperatura es de %.4f\n",temperatura);
gOled.clearDisplay();
gOled.printf("La temperatura es de %.4f\n",temperatura);
- gOled.printf("La velocidad en rpm es de %d\r\n",velocidad);
+ gOled.printf("La velocidad en rpm es de %f\r\n",velocidad);
gOled.display();
gOled.setTextCursor(0,0);
@@ -130,25 +128,25 @@
void estadoatras()
{
- if (boton_emergencia==1) {
+ if (boton_emergencia==1 || temperatura>80) {//es el boton de emergencia y de temperatura, en caso de pulsar la seta de emergencia y que la temperatura supere el valor de 80º, se parará automaticamente.
estado=emergencia;
}
- if (final2!=1 && boton_inicial==1 && final1!=1) {
+ if (final2!=1 && boton_inicial==1 && final1!=1) {// si se pulsa el boton de inicio, el avance dejara de funcionar pero el motor seguirá funcionando
enableMotor=0;
rele=0;
- dirBMotor=1;//Esto hay que cambiarlo
+ dirBMotor=1;
bot.reset();
estado= estatico;
- } else if (final1 ==1) {
+ } else if (final1 ==1) {//si pisa el final de carrera 1, el motor irá hacia delante dirección final carrera 2
estado = motorpalante;
} else {
- paso(0);
+ paso(0);//Va hacia la otra dirección
}
}
void estadoestatico()
{
- if (boton_emergencia==1) {
+ if (boton_emergencia==1 || temperatura>80) {//es el boton de emergencia y de temperatura, en caso de pulsar la seta de emergencia y que la temperatura supere el valor de 80º, se parará automaticamente.
estado=emergencia;
}
if (boton_inicial ==0 ) {
@@ -165,7 +163,7 @@
pc.printf("La temperatura es de %.4f\n",temperatura);
gOled.clearDisplay();
gOled.printf("La temperatura es de %.4f\n",temperatura);
- gOled.printf("%d\r\n",velocidad);
+ gOled.printf("%f\r\n",velocidad);
gOled.display();
gOled.setTextCursor(0,0);
}
@@ -177,31 +175,32 @@
temperatura = (3950/(log(Rt/100e3)+(3950/298)))-273.1;
}
-void funcionVel()
+void funcionVel(float tiempo)
{
- velocidad=contador*60;//esto es en rpm haciendo *60seg para pasar a min.
- contador=0;
- /*if(target-velocidad>0){
+ velocidad = contador*60/tiempo;//esto es en rpm haciendo *60seg para pasar a min.
+ contador = 0;
+ velocidad_relativa = temperatura*(96000/80);
+ //diferencia_velocidad = velocidad - velocidad_relativa;
+ if(velocidad_relativa-velocidad>0) {
dirBMotor=dirBMotor+0.01;
- }
- else{
+ } else {
dirBMotor=dirBMotor-0.01;
- }*/
+ }
}
void estadoemergencia()
{
+ rele=0;
+ paso(0);
estado = apagado;
}
int main()
{
pc.baud(115200);
- pc.printf("La velocidad es de %d\r rpm\n",velocidad);
gOled.begin();
gOled.clearDisplay();
- gOled.printf("Hola, bienvenido\n");
- gOled.printf("La velocidad en rpm es de %d\r\n",velocidad);
+ gOled.printf("Hola, bienvenid@ a la simulacion de un equipo de perforacion rotatoria\n");
gOled.display();
gOled.setTextCursor(0,0);
//visualTemp.attach(&muestraTemp,1.0);
@@ -216,8 +215,13 @@
// tickerVel.attach(&funcionVel,0.1);
dirAMotor=0;
//dirBMotor=0.5;
+ timerVel.start();
while(1) {
medir();
+ if(timerVel.read()>0.1) {
+ funcionVel(timerVel.read());
+ timerVel.reset();
+ }
//distancia=usensor.get_dist_cm();
switch ( estado ) {