| Bienvenido, Invitado |
Tienes que registrarte para poder participar en nuestro foro.
|
| Estadísticas del foro |
» Miembros: 18,507
» Último miembro: techroid
» Temas del foro: 12,498
» Mensajes del foro: 119,168
Estadísticas totales
|
|
|
| Saludos - Problema con código |
|
Enviado por: Alexeim56 - 26-03-2021, 03:24 AM - Foro: Arduino
- Respuestas (2)
|
 |
Hola muchas gracias por permitirme estar en el foro.
Me gustaría compartir con ustedes el proyecto en el que estoy trabajando y una duda que surgió con el código de Arduino.
Tratare de ser muy breve en la descripción de mi duda.
Estoy construyendo un telescopio el cual será movido por medio de una montura motorizada con 2 motores Nema 23.
Aclaro que mis conocimientos en Arduino son básicos y después de muchas horas leyendo y buscando en la web me encontré con el código de Andrea Lombardo el cual se ajusta a las necesidades de mi proyecto.
![[Imagen: Screenshot-20210325-220529-com-huawei-hi...erseas.jpg]](https://i.ibb.co/zVYGR4k/Screenshot-20210325-220529-com-huawei-himovie-overseas.jpg)
https://paypal.me/AndreaLombardo84
https://www.lombardoandrea.com
realice algunas modificaciones con el fin de poder adaptar una pantalla LCD 2004 y poder escribir en ella un mensaje constante en las 3 primeras filas y la dirección de movimiento en la 4 fila.
El problema surge cuando al mover el joystick GIRO A LA DERECHA, GIRO A LA IZQUIERDA, SUBIENDO, BAJANDO, se sobre escriben unas con otras. Ya intente con lcd.clear(); el cual hace que el mensaje se desvanezca rápido y al poner un delay(); este afecta la velocidad de los motores.
Dejo el código modificado, agradezco sus sugerencias.
Código: //Control de dos motores paso a paso con Arduino, Joystick y LCD
//GX IZQUIERDA DERECHA- GY ARRIBA Y ABAJO
//Inclusión de bibliotecas
#include <AccelStepper.h>
#include <Bounce2.h>
#include <Wire.h> // libreria de comunicacion por I2C
#include <LCD.h> // libreria para funciones de LCD
#include <LiquidCrystal_I2C.h> // libreria para LCD por I2C
LiquidCrystal_I2C lcd(0x27,20,4); // DIR, E, RW, RS, D4, D5, D6, D7
//Definicion de la constante del pin de Arduino
const int ledEnable = 13; //el led a bordo nos mostrará el estado de activación de los motores
const int pinSwEnable = 7; //el botón presente en el módulo del joystick que habilita o deshabilita el control
const int pinEnable = 8; //los pines que controlan el estado ENABLE de los controladores A4988 están conectados en serie por esta razón solo se necesita un pin para administrar ambos
unsigned long debounceDelay = 10; //milisegundos para el botón debonuce
const int jX = A0; //pin analógico que lee los valores de las X
const int stepX = 3; //pin digital que envía señales STEP al controlador X
const int dirX = 4; //pin digital que envía la señal de DIRECCIÓN al controlador X
long speedX, valX, mapX; //Variables de gestión del movimiento del motor X
const int jY = A1; //pin analógico que lee los valores de la Y
const int stepY = 5; //pin digital que envía las señales STEP al controlador Y
const int dirY = 6; //pin digital que envía la señal de DIRECCIÓN al controlador Y
long speedY, valY, mapY; //Variables de gestión del movimiento del motor Y
//variables utilizadas por la biblioteca AccelStepper
const int maxSpeed = 1000; //de acuerdo con la documentación de la biblioteca, este valor se puede configurar hasta 4000 para un Arduino UNO
const int minSpeed = 0; //velocidad mínima del motor
const float accelerazione = 50.0; //número de pasos por segundo en aceleración
const int treshold = 30; //la lectura de los potenciómetros nunca es 100% confiable, este valor ayuda a determinar el punto a considerar como "Stay still" en los movimientos
long tresholdUp, tresholdDown; //variables de servicio para realizar la tarea descrita anteriormente
boolean abilitato, muoviX, muoviY, enable; //variables de gestión de movimiento
Bounce btnEnable = Bounce(); //crea una instancia de un botón de la biblioteca Bounce
//instancia los motores
AccelStepper motoreX(AccelStepper::DRIVER, stepX, dirX);
AccelStepper motoreY(AccelStepper::DRIVER, stepY, dirY);
void setup() {
//inicializar valores
speedX = speedY = 0;
enable = false;
//definición de los modos pin
pinMode(ledEnable, OUTPUT);
pinMode(pinEnable, OUTPUT);
pinMode(pinSwEnable, INPUT_PULLUP); //la entrada del interruptor debe establecerse como INPUT_PULLUP
digitalWrite(ledEnable, enable);
digitalWrite(pinEnable, !enable); //Los controladores A4988 deshabilitan los comandos al motor si reciben una señal ALTA en el pin ENABLE por esta razón el valor es opuesto al del LED
//configurar el botón del joystick usando la biblioteca Bounce
btnEnable.attach(pinSwEnable);
btnEnable.interval(debounceDelay);
//calcula el rango de valores dentro del cual considerar la posición del joystick como "Quédate quieto"
tresholdDown = (maxSpeed / 2) - treshold;
tresholdUp = (maxSpeed / 2) + treshold;
//configurar los parámetros del motor
motoreX.setMaxSpeed(maxSpeed);
motoreX.setSpeed(minSpeed);
motoreX.setAcceleration(accelerazione);
motoreY.setMaxSpeed(maxSpeed);
motoreY.setSpeed(minSpeed);
motoreY.setAcceleration(accelerazione);
//Inicializar la pantalla LCD
// Imprimir mensaje en LCD
lcd.backlight();
lcd.init();
lcd.setCursor(2,0);
lcd.print("TELESCOPIO 2021");
lcd.setCursor(0,1);
lcd.print("Modulo de Direccion");
lcd.setCursor(0,2);
lcd.print("Arduino Funcionando");
}
void loop()
{
//realizar la función de control y lectura del botón que determina el estado de habilitación
checkEnable();
digitalWrite(ledEnable, enable); //muestra el estado de habilitación a través del led en el pin 13
digitalWrite(pinEnable, !enable); //establecer el valor opuesto en los pines ENABLE de los controladores
//realizar lectura analógica de los valores provenientes de los potenciómetros del joystick
valX = analogRead(jX);
valY = analogRead(jY);
//mapea los valores leídos en función de la velocidad mínima y máxima
mapX = map(valX, 0, 1023, minSpeed, maxSpeed);
mapY = map(valY, 0, 1023, minSpeed, maxSpeed);
//realizar la función de control del motor
pilotaMotori(mapX, mapY);
}
void pilotaMotori(long mapX, long mapY) {
if (mapX <= tresholdDown) {
//x vuelve
speedX = -map(mapX, tresholdDown, minSpeed, minSpeed, maxSpeed);
muoviX = true;
lcd.setCursor(1,3);
lcd.print("GIRO A LA DERECHA");
} else if (mapX >= tresholdUp) {
//x continúa
speedX = map(mapX, maxSpeed, tresholdUp, maxSpeed, minSpeed);
muoviX = true;
lcd.setCursor(1,3);
lcd.print("GIRO A LA IZQUIERDA");
} else {
//x se queda quieto
speedX = 0;
muoviX = false;
}
if (mapY <= tresholdDown) {
//y va giù
speedY = -map(mapY, tresholdDown, minSpeed, minSpeed, maxSpeed);
muoviY = true;
lcd.setCursor(5,3);
lcd.print("SUBIENDO");
} else if (mapY >= tresholdUp) {
//y va su
speedY = map(mapY, maxSpeed, tresholdUp, maxSpeed, minSpeed);
muoviY = true;
lcd.setCursor(5,3);
lcd.print("BAJANDO");
} else {
//y sta fermo
speedY = 0;
muoviY = false;
}
if (muoviX) {
motoreX.setSpeed(speedX);
motoreX.run();
} else {
motoreX.stop();
}
if (muoviY) {
motoreY.setSpeed(speedY);
motoreY.run();
} else {
motoreY.stop();
}
}
void checkEnable() {
btnEnable.update();
if (btnEnable.fell()) {
enable = !enable;
}
}
Muchas gracias por su ayuda y un abrazo gigante.
|
|
|
|
| Error compilando para la tarjeta Arduino Mega or Mega 2560. |
|
Enviado por: minaki24fc - 26-03-2021, 02:38 AM - Foro: Arduino
- Respuestas (2)
|
 |
Hola muy buenas tardes, tengo un problema al copilar un programa (se muestra a continuación), esto me sucede cuando junto el programa de un beeper y un ultrasónico, ambos por separado me funcionan bien, pero cuando junto o intento copilar ambos programas juntos me aparece el error, espero que me puedan ayudar por favor y de antemano muchas gracias.
#include <NewPing.h>
#define TRIGGER_PIN 14
#define ECHO_PIN 15
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
const int Beeper=52;
void setup() {
Serial.begin(9600);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(52, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
// Esperar 1 segundo entre mediciones
delay(1000);
// Obtener medicion de tiempo de viaje del sonido y guardar en variable uS
int uS = sonar.ping_median();
// Imprimir la distancia medida a la consola serial
Serial.print("Distancia: ");
// Calcular la distancia con base en una constante
Serial.print(uS / US_ROUNDTRIP_CM);
Serial.println("cm");
if ((uS / US_ROUNDTRIP_CM) >= 24) {
analogWrite(7, 0);
analogWrite(6, 255);
analogWrite(5, 0);
delay(200);
} else {
if ((uS / US_ROUNDTRIP_CM) >= 10) {
analogWrite(7, 255);
analogWrite(6, 48);
analogWrite(5, 0);
delay(200);
} else {
tone(Beeper, 440);
delay(500);
noTone(Beeper);
delay(1000);
tone(Beeper, 523, 300);
delay(500);
analogWrite(7, 255);
analogWrite(6, 0);
analogWrite(5, 0);
}
}
}
|
|
|
|
| Problema Prusa i3 Pro B |
|
Enviado por: SantiTeo - 25-03-2021, 11:40 PM - Foro: General
- Respuestas (2)
|
 |
Hola! que tal, soy nuevo y nose como va la cosa asique disculpen si publico en donde no va!.
Tengo un problema con mi impresora desde hace tiempo, y es que el EJE Y va para donde quiere! a veces imprime una capa 1mm mas adelante y la proxima 2mm mas atras, y no he podido solucionarlo ni con el Cura ni con la configuracion de la impresora, ademas de los problemas con la temperatura Ayuda!
Adjunto una imagen de como se ve:
|
|
|
|
| geeetech A 10 |
|
Enviado por: flipes - 25-03-2021, 08:43 AM - Foro: Impresoras
- Respuestas (4)
|
 |
Hola, saludos a todos, me pregunto porqué no hay una sección para esta impresora, como para las otras ? Mi interés por este tema es porque acabo de adquirir esa impresora y ando buscando y recopilando información sobre ella.
Por otra parte he intentado ponerme en contacto por mensaje privado con simemat (sin menospreciar a nadie) pues creo que tiene esta impresora y bastante experiencia con ella, para ver si me saca de algunas dudas que tengo.
Un saludo y felices impresiones: Felipe
|
|
|
|
|