Guardar movimientos de Motor a Pasos y reproducirlos, con Arduino

#1
Hola amigos,

Estoy haciendo girar un motor a pasos NEMA 17/UNIPOLAR, activo el giro con pulsadores.
Solo que tengo un problema: Quiero que con un pulsador mas guarde el movimiento en la memoria EEPROM de Arduino MEGA, para luego ser activado con otro pulsador para reproducir los movimientos guardados.
Les agradecería mucho su ayuda para poder realizar esta práctica.

Código:
#include <Stepper.h>

#define motpin1 8

#define motpin2 9

#define motsteps 100

int bot1=2;

int bot2=3;

int led1=4;

int led2=5;

Stepper motor (motsteps,motpin1,motpin2);

void setup() {

  motor.setSpeed(100);

  pinMode(motpin1,OUTPUT);

  pinMode(motpin2,OUTPUT);

  pinMode(bot1,INPUT);

  pinMode(bot1,INPUT);

  pinMode(led1,OUTPUT);

  pinMode(led2,OUTPUT);

}



void loop(){

  if (digitalRead(bot1)==HIGH) {

    motor.step(1);

    digitalWrite(led2,HIGH);

  }

  else {

    motor.step(0);

    digitalWrite(led2,LOW);

  }

 

  if (digitalRead(bot2)==HIGH) {

    motor.step(-1);

    digitalWrite(led1,HIGH);

  }

  else

  {

    motor.step(0);

    digitalWrite(led1,LOW);

  }

}
 

pandacba

Rocker Bear
#2
Por empezar, para no estropear tu arduino utiliza una memoria externa
 

pandacba

Rocker Bear
#4
La memoria flash(supongo que allí quieres guardar los datos) tienen límite de grabado borrado, si bien es bastante elevado, haciendo pruebas se desperdician una buena cantidad, y como tu arduino es reutilizable, utilizando una memoria externa, no le pasara nada en la interna y lo tendras para un mejor uso
Lo haces utilizando el bus I2C
Aqui podes leer algo para saber como hacerloMemoria Externa
 
#6
El número de ciclos de una memoria EEPROM es muy grande así que llevando cuidado de no meter la grabación en un bucle sin parar no debe de haber mucho problema.
Además es bastante lento el proceso de escritura así que lo normal sería ir guardando valores en la RAM y solo grabar de tanto en tanto.
 

pandacba

Rocker Bear
#7
Habría que ver que velocidad necesita, por ejemplo la autosintonía de canales de un TV es muy rápido teniendo en cuenta como es proceso
Cuando estas programando, haciendo pruebas se graban un montón de veces y son ciclos perdidos. para que arruinar la memoria del microprocesador? si una externa es recontra barata
El ciclo de una memoria EEprom es relativamente grande, a muchos TV que fallan y se resuelven cambiando la memoria es porque los usuarios acostumbrados a hacer zapping se exceden tanto darle a los botones
Asi que cual es lo malo de utilizar una externa? si tu no vas a gastar nada de tu bolsillo?
 
#8
Mira hacer lo que quieres es muy fácil
Primero que nada debes tener un algoritmo de mover el motor a pasos que gire a la izquierda y. L derecha

Una ves que puedas hacer girar el motor solo debes contar el número de pasos para hacerlo girar

Es decir 125pasos para hacerlo girar una determinada cantidad.
Solo guardas el número de pasos en la memoria

Puedes guardar en la memoria no volátil ejemplo en la Ram algo tan simple como:

Int pasos;

pasos = 125;
 

pandacba

Rocker Bear
#9
Primero que de echo cada vez que utilizas una variable estas guardando en RAM, quiere guardar los movimientos que le haga hacer con los pulsadores para luego reproducirlos cuando quiera, y eso si no lo guardas en EEPROM, como ases?
apagas y que paso con lo que guardaste en la RAM......
 
#10
También habría que definir "después", porque a lo mejor no quiere que mañana repita lo de hoy, pero si que quiere que dentro de un minuto repita lo de ahora.
Si es algo así como un robot o máquina cnc que de "programa" a mano, me parece mas lógico "grabar" en ram varias veces, prueba y error hasta que se consigue la trayectoria correcta y entonces se pulsa un botón y se guarda, en la flash, en la eeprom, en una tarjeta sd, de envía por el puerto serie o lo que sea.
Respecto a comprar una eeprom teniendo una sin usar por si se rompe. Pues yo que se, es como comprar una bici y dejar el coche en el garaje para que no se gaste. Yo no lo entiendo, si compro algo lo uso, se está dando por hecho que va a haber un mal uso y no tiene por qué ser así.
 
#11
Pero es fácil digamos así como uno guarda una veriable en RAM esa variable puede ser enviada en Eeprom
Cómo lo que hacen los velocímetros de los coches guardan el kilómetraje en RAM cuando uno saca la llave lo que está en RAM se guarda en la Eeprom.

Algo tan fácil como :

Int pasos;

pasos = 36;

Eeprom(pasos);

Bueno antes de que me critiquen hay que construir la función Eeprom( );
 
#12
En arduino ya está construida la función EEPROM, ya no me acuerdo si va de serie o hay que poner un include. Hay que leer la documentación.
 
#13
Apenas soy un principiante en el Arduino, pero me ha servido mucho este programa
de construccion de menús y submenús. El programa principal no tiene mucho ..solo
muestra en un LCD (yo uso el LCD-Keypad shield v1) el tiempo transcurrido desde el encendido del Arduino y la temperatura que sensa el Arduino usando su sensor interno con las unidades de tiempo y temperatura seleccionada a traves de los submenú correspondiente, y guardadas en la EEPROM del Arduino.

Aporte - Construcción de menus con submenus

Lo interesante es como todos los parametros son almacenados en la EEPROM interna del Arduino, El Arduino no se programa por objetos, así que el autor implemento una forma muy inteligente de hacer un cuasi-objeto usando las estructuras STRUCT para definir las variables del objeto "memory" el cual crea usando una UNION

Los comentarios traen algunos errores y estoy trabajando en mejorarlos de acuerdo voy aprendiendo el Arduino-C++
Espero que te sirva este comentario
 
Arriba