Adaptar un volante Simracing para persona con movilidad reducida

Buenos días a todos.
Me presento:
Soy una persona con movilidad reducida, que pasa de los 50 años pero no llega a los 60. Con esto quiero decir que no soy tonto y no se nada de todo este tema pero se leer, se escribir, distinguir colores, soldar cables pero, lo que no tengo ni idea es de programar Arduino ni de saber hacerlo, jajajajajajajajaja.
También soy una persona que investigo mucho cuando me interesa una cosa y que no le da nada de vergüenza cuando tiene que pedir ayuda. Y es lo que pido aquí, ayuda para poder hacer bien mi proyecto.
Como dice el enunciado, mi proyecto es modificar un volante para Simracing para personas como yo; con movilidad reducida.
Existen adaptaciones comerciales ya hechas que son muy caras, o volantes con esta opción que también son carísimas; estamos hablando por encima de los 1.200€, mas o menos.
Mi proyecto es adaptar unas palas magnéticas de embrague, una a cada lado del volante, para así disponer de acelerador y freno.

Mirando por Youtbe vi un esquema donde una persona hacía un croquis de donde se conectan los cables a la Placa y a los potenciómetros; esta persona utiliza una placa LEONARDO, placa que seria un poco grande para mi proyecto.
Este esquema no lo puedo poner por que el foro no me deja subir mas de un archivo pero el cableado es igual que el que se ve en la foto de abajo; comprobado.

Siguiendo con mi investigación, en este foro de ARDUINO encontré un código para, no se como decirlo, mover/activar/que funcionen dos potenciómetros independientemente. Este es el Código:

#include <Joystick.h>

Joystick_ Joystick;
int sensorPin1 = A2;
int sensorPin2 = A3;
int ledPin = 5;
int Pot1 = 0;
int Pot2 = 0;

void setup() {
	pinMode(ledPin, OUTPUT);
	Joystick.begin();
}

void loop() {
	Pot1 = analogRead(sensorPin1);
	Pot2 = analogRead(sensorPin2);
	if (Pot1 > Pot2) {
		int pot = analogRead(A2);
		int mapped = map(pot,0,1023,0,255);
		Joystick.setThrottle(mapped);
	}
	else {
		int pot = analogRead(A3);
		int mapped = map(pot,0,1023,0,255);
		Joystick.etThrottle(mapped);
	}
}

Y yo con toda ésta información, me hice sobre el papel, mi propio proyecto.
El proyecto está hecho sobre una placa ARDUINO NANO, puesto que necesito que sea todo cuanto mas pequeño mejor para poder disimularlo.


No se si el código puesto anteriormente coincide con el croquis expuesto; están sacados de dos sitios diferentes.

Y con toda esta información, estas son mis preguntas:

¿Voy bien encaminado en mi proyecto?
El código descrito, ¿esta bien para el proyecto que quiero hacer? ¿modificaríais algo del código? o ¿haríais un código nuevo? y si fuese así ¿cual sería el código nuevo?
He visto que hay varias placas de ARDUINO NANO, incluso unas que son compatibles con ARDUINO. ¿Que placa de ARDUINO NANO o MICRO, sea original o compatibles me recomendaríais?

Muchas gracias de antemano a todos los que deis vuestra opinión e intenteis ayudarme.
Un saludo.

Por favor, lee las normas del foro y recuerda que los códigos deben ir con etiquetas </>
Ya lo hice por ti.
Lo que no coincide en tu código que usas

int sensorPin1 = A2;
int sensorPin2 = A3;

Pero en el esquemas conectas a A4 y A5.
Entonces deberías cambiar A2 por A4 y A3 por A5.
En el monitor Serie deberias ver valores si agregas en el setup

Serial.begin(9600);

y en el loop

Serial.println("Pot1 : " +String(Pot1));
Serial.println("Pot2 : " +String(Pot2));

Buenas tardes Surbyte y muchísimas gracias por contestarme y por corregirme los errores. Como comento al principio de éste post, no tengo ni idea del tema de códigos de Arduino, y aunque me haya leído los post del foro, no entendía lo de las etiquetas </>; para la siguiente vez me doy por enterado.

Como me indicas he cambiado los valores de A2 por A4 y el de A3 por el de A5.
Pero lo que no entiendo es lo de los valores si agrego en el setup Serial.begin(9600);
y lo del loop

Serial.println("Pot1 : " +String(Pot1));
Serial.println("Pot2 : " +String(Pot2));

por que no se donde colocar estos valores.

Si no te importa voy a abusar un poco de tus conocimientos, puesto que los míos son nulos, como ya habrás visto.
¿Tu me podrías poner, por favor, todos esos valores en el código para saber perfectamente que esta todo correcto, que no he metido la pata y que no voy a tener ninguna complicación?
Y una pregunta mas referente a la placa. El proyecto lo quiero hacen con una placa pequeña tipo NANO.
¿Que placa me recomiendas tu? O a la hora de comprar este tipo de placa ¿que valores o características tengo que tener en cuenta. Te lo comento por que he visto algunas placas de éste tipo en Amazon que dicen ser compatibles con la placa oficial de Arduino.

Muchísimas gracias por todo y un cordial saludo Surbyte.

¿Podrias poner el enlace para ver como funciona eso?. sin eso no tengo muy claro lo de aconsejárte sobre el código.

Cualquier placa con estas caracteristicas
"CH340G-USB: Chipset ATmega328P con frecuencia de reloj de 16MHz "
te es totalmente compatible, incluso las chinas aún mas baratas, por ejemplo NANO.
Saludos.

Acá te dejo el código modificado en varios puntos

#include <Joystick.h>

Joystick_ Joystick;
int sensorPin1  = A4;
int sensorPin2  = A5;
int ledPin      = 5;
int Pot1;
int Pot2;

void setup() {
  Serial.begin(115200);
	pinMode(ledPin, OUTPUT);
	Joystick.begin();
}

void loop() {
  int mapped;
	Pot1 = analogRead(sensorPin1);
  Serial.println("Pot1   : " + String(Pot1));
	Pot2 = analogRead(sensorPin2);
  Serial.println("Pot2   : " + String(Pot2));

	if (Pot1 > Pot2) {
		mapped = map(Pot1,0,1023,0,255);
	}
	else {
		mapped = map(Pot2,0,1023,0,255);
	}
  Serial.println("mapped : " + String(mapped));
  Joystick.setThrottle(mapped);
}

Hay varias cosas redundantes. No hace falta definir la misma variable local (porque esta dentro del loop) dos veces. La defines una vez y listo.
Si tienes definidas Pot1 y Pot2 para que crear otras variables pot1 y convertir con map? no tiene sentido.
Si defines variables o constantes al principio como Sensor1Pin, entonces úsalas luego y no que el código tenga que ir de nuevo a A2 o A3 como tenías al principio. La idea es que modificando al comienzo todo siga el mismo patrón. Son cosas que irás aprendiendo.
He modificado parte del codigo porque haces dos tareas similares que pueden simplificarse en una sola.
Este código es mas simple pero a la vez mas legible.
Haz las preguntas que creas convenientes.

En el setup se ponen las cosas que se hacen una vez por eso AHI uso Serial.begin(BAUDIOS)
El monitor serie empieza en 115200 asi que le puse esa velocidad y no 9600 para simplificarte pasos.
Luego para presentar datos en el loop usas Serial.println() la forma que usé permite mostrar un cartel entre "" mas un dato que debes agregar por eso el + y usar String() con el dato dentro, donde dato puede ser numérico o alfanumérico.
De todos modos busca Arduino String o Arduino Serial.print y encontrarás todo esto.

Moderador:
Recuerda aunque sea 1 línea usa etiquetas por favor.
Edité tu hilo anterior porque primero repites el código que estaba mal y luego pones las dos líneas que te he sugerido sin etiquetas.

Voy a insistir en el pedido que ha hecho @gonpezzi, coloca un enlace de lo que quieres hacer para entender hacia donde vamos.

Muchísimas gracias Surbyte por hacerlo, ya puedo tener la tranquilidad de poner el código dentro de la placa y que los potenciómetros funcionen.
Gracias también por la explicación de lo que has hecho, aunque no entienda mucho el lenguaje utilizado, y el por que; te prometo que iré poco a poco intentando comprender lo que me has escrito.
Un cordial saludo y, por segunda vez, muchísimas gracias por ayudarme.

Buenas tardes gonpezzi y muchas gracias por interesarte y por ayudarme con las características de la placa Arduino NANO.
El enlace de la conexión de los cables a la placa es éste. How to Build a Button Box - YouTube
Es el proyecto de una persona que se fabricó una botonera para un avión de combate.
Y el enlace al código Arduino para los potenciómetros lo encontré aquí: Dos potenciometros, ni en serie ni en paralelo, que dan la señal en el mismo pin
El tema de lo que necesito es muy simple; bueno simple para los que saben y complejo para mí:
Dos potenciómetros independientes, uno para que haga de acelerador en una paleta magnética y otro para que haga de freno en la otra pala magnética; todo ello anclado por detrás, entre la base y el volante Simracing, mediante una plancha de aluminio donde atornillar las dos paletas. (De momento la idea de la fijación de las paletas al volante está en proceso de muchas pruebas)
Estas son las paletas magnéticas


Y la forma de conexión de dichas paletas magnéticas a la placa Arduino NANO se puede ver en la foto de arriba.
Creo que con esta exposición de mi proyecto, ya se puede hacer idea la gente de lo que quiero.
Gracias gonpezzi y un cordial saludo.

Te corrijo algo que creo no has leído en los enlaces que haces referencia ni en la documentación de la librería.

Joystick no trabaja con Uno/Nano/Mini (ATmega328), tienes que usar Leonardo o Micro que utilizan el ATmega32u4.

En resumen, no puedes usar Nano, tienes que usar Arduino Pro Micro (o algún clon).

Saludos

Efectivamente @anon90500195 tiene toda la razon , no hemos leido bien los enlaces,. Hay que usar el Pro Micro, (opcion mas barata y pequeña que he encontrado con el 32u4)
Y en cuanto al codigo ¿no debería ser mas parecido a este:

#include <Joystick.h>

Joystick_ Joystick;
int sensorPin1  = A4;
int sensorPin2  = A5;
int ledPin      = 5;
int Pot1;
int Pot2;

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  Joystick.begin();
}

void loop() {
  Pot1 = map(analogRead(sensorPin1), 0, 1023, 0, 255);
  Serial.println("Pot1   : " + String(Pot1));
  Pot2 = map(analogRead(sensorPin2), 0, 1023, 0, 255);
  Serial.println("Pot2   : " + String(Pot2));
  Joystick.setThrottle(Pot1);
  Joystick.setBrake(Pot2);
}

Pues no lo se si fucionaria ese codigo . lo unico que he encontrado parecido a lo que quieres hacer lo puedes ver en este LINK.
Salvo el esquema de conexion no dice mucho, lo importante es el enlace que contiene al repositotio de la libreria Joystick.h Viene muy bien documentado y con buenos ejemplos. te recomiendo la estudies bien, (yo solo le he echado un vistazo por encima), antes de seguir con el codigo.
Saludos.

Buenas tardes a todos.
Quiero dar las gracias, personalmente y por orden de de comentarios, a @Surbyte, @gonpezzi y @anon90500195. La verdad es que me estáis ayudando bastante y mi proyecto cada vez va mas encaminado.
Sigo comentando que muchas cosas que me comentáis, me suena a chino pero cuando veo los ejemplos puedo llegar a entenderlo; sería como explicarle algo a un niño de cinco años, entiende lo que ve pero no entiende todo lo que le dices.

Volviendo al proyecto, que es lo que nos ocupa, me recomendasteis una placa Arduino Micro Pro.
La busque pero me di cuenta que algunos valores, o puntos de conexión, de la Arduino NANO no estaban impresos: por ejemplo el punto de conexión 5V en la placa NANO, en la placa Micro Pro pone VCC.
Vi el enlace que puso @gonpezzi y vi como estaban puestas las conexiones, y con todo ello me hice mi propio croquis de cableado:

La primera placa es la que encontré y me di cuenta que las conexiones no coincidían y la segunda placa llevaba impreso en los laterales las conexiones que yo conocía.

Supongo que el código que subió @gonpezzi habrá que modificarlo, por que no coinciden con las conexiones A4 y A5 que hay puesto ahora; creo que las nuevas conexiones serían A1 y A2, que ya he modificado yo, y no se si habrá que modificar algo mas.

Este sería el nuevo código modificado en esos dos puntos:

#include <Joystick.h>
Joystick_ Joystick;
int sensorPin1 = A1;
int sensorPin2 = A2;
int ledPin = 5;
int Pot1;
int Pot2;

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  Joystick.begin();
}

void loop() {
   Pot1 = map(analogRead(sensorPin1), 0, 1023, 0, 255);
   Serial.println("Pot1 : " + String(Pot1));
   Pot2 = map(analogRead(sensorPin2), 0, 1023, 0, 255);
   Serial.println("Pot2 : " + String(Pot2));
   Joystick.setThrottle(Pot1);
   Joystick.setBrake(Pot2);
}

Al cambiar los dos parámetros del código, lo que me llama la atención es la lectura de la 4ª fila:

int ledPin = 5;
lo digo por ese número 5 y no haber nada conectado a ningún número 5; hablo sin saber y desde mi ignorancia en este tema.

Me gustaría que miraseis el código que yo he puesto, y si no está bien o falta añadir o quitar algo, que por favor me lo comentaseis.

Como siempre, un cordial saludo y gracias por ayudarme.

Por favor edita tu post y pon el código de acuerdo a las Normas del foro español punto 7, ya te lo advirtió el moderador anteriormente.

Por otro lado, la razón por la que dice Vcc en lugar de 5V en el pin que mencionaste es porque el Pro Micro viene en versiones de 3.3V y 5V, entonces los fabricantes han simplificado la serigrafía poniendo Vcc y usan la misma para las dos versiones.
Otra diferencia de nomenclatura es la del pin Vin en el Nano que en el Pro Micro se llama RAW, pero cumple la misma función, alimentar la placa con una tensión de 7 a 12V.

Saludos

Si parece estar bien, y todo lo referente al led se lo puedes quiar, sin duda eso viene arrastrado por el que hizo el codigo y viene de que en los ejemplos de a libreria usan el pin 13, (led de la placa), para que encienda cuando aprietas los pedales, pienso yo.
Saludos.

La placa PRO MINI no tiene ADC por encima del 5. Asi que ADC 6, 7 a 14 no existen.
Es similar en ese aspecto al UNO

Bueno en tu esquema del post#10 veo que hay leyendas como ADC 6 pero el board dice A2 y lo mismo con ADC7 y el board A1. Seguramente de donde tomaste la imágen, alguien quiso poner otra cosa o tenia varios ADC. Dejémoslo ahi.
Tu código coincide con esta configuración de A1 y A2.

Buenas noches.

En primer lugar pido perdón por no poner las etiquetas, no lo entendía, aunque me decíais que estaba en "Normas del Foro" y yo estaba mirando "Antes de crear tu hilo lee esto"; no es excusable, yo he cometido un error y se me ha llamado la atención en tres ocasiones con razón y causa justificada. Por fin he visto las Normas del Foro, que estaba debajo de lo que yo estaba leyendo y he leído todas las normas parándome a leer a conciencia el punto 7.
He corregido el código del post#10 como me habeis comentado poniendo las etiquetas; espero que esté bien y si no está bien me lo haceis saber.

Y lo vuelvo a comentar, tengo que agradecer, y mucho a @Surbyte, @gonpezzi y @anon90500195 por toda la ayuda obtenida, a pesar de haber cometido los fallos hasta en tres ocasiones; para la siguiente vez estaré mas aplicado.

Un cordial saludo

Moderador:

Agradecido por la edición pero te voy a pedir que tengas cuidado con esto que sin querer se te ha pegado a tu código.
int que se ve como ** int ** es como ponerlo en negrita y eso no tiene sentido en la programación.
Ten cuidado al momento de copiar los códigos, debenser como los tienes en el IDE o te darán error.

Buenas tardes Surbyte.
Leyendo tu comentario no se muy bien que tengo que hacer:
¿Todo la palabra int que está en negrita ponerlo en normal quitándole la negrita?
O ¿tengo que quitar la negrita de todo lo que se queda marcado en color salmón, a parte de la palabra int, los asteriscos y la palabra void que está en negrita
y a la hora de subir el código ¿tengo que quitar las etiquetas?
Muchas gracias

Te expiqué que ya lo hice.
Siempre que pegues un código acá que venga de tu IDE, para cersiorarse que no tenga cosas "raras".
Y no te hagas lio, por favor (tu post 16 me huele a que no entienedes que hacer) solo debes hacer lo que las normas se explica bien.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.