Toepassing Hall sensor bij een Flightsim controller

Arduino specifieke Software
Berichten: 4
Geregistreerd: 03 Mei 2019, 15:07

Toepassing Hall sensor bij een Flightsim controller

Berichtdoor Karabas » 03 Mei 2019, 15:27

Beste Arduino kenners,

Mijn naam is Fer Goosen, ik ben 65 jaar en sinds kort begonnen met Arduino. Een echte beginner dus. Voor een flightsimulator (X-plane) ben ik een helikopter besturing aan het bouwen en wil daarbij de Arduino Leonardo inzetten als usb controller. De hardware voor de Collective en Rudder zijn al vrijwel klaar. Nu de elektronica nog... Ik zou daarbij de verschillende assen aan willen sturen met een linear Hall sensor en heb daarvoor een paar KY-024 boardjes aangeschaft welke dus zowel een lineare als een digitale uitgang hebben.
Inmiddels heb ik al aardig wat geëxperimenteerd met verschillende joystick sketches welke ik op het www heb gevonden. Ik heb daarbij de potmeter 1:1 vervangen door de Hall sensor. E.e.a. werkt wel maar niet zoals ik wil. De uitslag bij een magneet benadering is b.v. redelijk beperkt. Kan ik dat eventueel met een routine beïnvloeden? Ik zou mij zo voor kunnen stellen dat je b.v. een min en max waarde aan de minimale en maximale uitslag toe kan kennen maar ik heb geen idee hoe? Overigens zie ik met de seriële plotter en monitor wel een aardige uitslag dus dat werkt wel goed.

Ook de test sketches welke bij de joystick library (2.0) zitten heb ik geprobeerd. Daar zitten wel complete bezettingen bij t.a.v. de controller (joystick) functies maar die werken jammer genoeg alleen als test-routine door de A0 met Gnd door te verbinden.


Wat ik eigenlijk zoek is een sketch waarin minimaal moet zitten:

-Rudder
-Throttle
-Collective
-X+Y as (joystick)
-+/- 10 switches (liefst meer)

Daarbij worden de eerste 3 aangestuurd door een Hall sensor en daarvan de rudder een (+ en -) uitslag vanuit het midden. Heeft iemand enig idee of en waar ik een dergelijke sketch kan vinden of is dat er niet en moet je altijd e.e.a. programmeren om het werkend te krijgen?

Wie kan en wil mij helpen? Ik zou jullie zeer dankbaar zijn.
Fer

Advertisement

Berichten: 2717
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Toepassing Hall sensor bij een Flightsim controller

Berichtdoor shooter » 03 Mei 2019, 21:29

kun je zelf snel maken hoor. er is een commando uit=span(in,0,1023,-100,+100) bijvoorbeeld.
paul deelen
shooter@home.nl

Berichten: 4
Geregistreerd: 03 Mei 2019, 15:07

Re: Toepassing Hall sensor bij een Flightsim controller

Berichtdoor Karabas » 04 Mei 2019, 09:43

Kijk! zoiets zocht ik. Super!

Die waarde omzetting begrijp ik enigzins maar hoe deze regel implementeren in de code vind ik lastiger. Ik heb even ge-Googled op het commando SPAN maar dat gaf ook geen verheldering. Zou je mij een duuwtje in de richting of een toelichting kunnen geven? Ik heb inmiddels een sketch gevonden welke de assen en knoppen bied die ik zocht. Zie hier onder.


Code: Alles selecteren
#include "Joystick.h"

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
14, 0, // Button Count, Hat Switch Count
false, false, true, // X and Y, but no Z Axis
true, true, true, // Rx, Ry, or Rz
false, true, // rudder or throttle
true, false, false); // accelerator, brake, or steering

// declare variables
int axe1Value;
int axe2Value;
int axe3Value;
int axe4Value;
int axe5Value;
int axe6Value;


// init joystick libary
void setup() {
// Initialize Button Pins
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
pinMode(A4, INPUT_PULLUP);
pinMode(A5, INPUT_PULLUP);

// Initialize Joystick Library
Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 0;

// Last state of the button
int lastButtonState[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void loop() {
// Axe 1
axe1Value = analogRead(A0);
Joystick.setThrottle(axe1Value);
delay(1);

// Axe 2
axe2Value = analogRead(A1);
Joystick.setZAxis(axe2Value);
delay(1);

// Axe 3
axe3Value = analogRead(A2);
Joystick.setRxAxis(axe3Value);
delay(1);

// Axe 4
axe4Value = analogRead(A3);
Joystick.setRyAxis(axe4Value);
delay(1);

// Axe 5
axe5Value = analogRead(A4);
Joystick.setRzAxis(axe5Value);
delay(1);

// Axe 6
axe6Value = analogRead(A5);
Joystick.setAccelerator(axe6Value);
delay(1);


// Read pin values
for (int index = 0; index < 14; index++)
{
int currentButtonState = !digitalRead(index + pinToButtonMap);
if (currentButtonState != lastButtonState[index])
{
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}

delay(50);
}

Berichten: 2717
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Toepassing Hall sensor bij een Flightsim controller

Berichtdoor shooter » 04 Mei 2019, 20:37

Heb even gekeken naar joystick.h ook hier zijn al diverse versies van dus het begin is er, maar bijv het type moet je vaststellen .
Je hoeft verder eigenlijk weinig meer te doen. Je kunt de minimum en maximum van elke pin zelf zetten, het omzetten naar de joystick software op de PC gaat automatisch.
Ik zag dat je de arduino dan als soort joystick moet installeren en aansluiten.
de hallsensor kun je dus wel gebruiken hoor, maar dat vraagt dan wat software aanpassingen. Je kunt namelijk elk kanaal dat gelezen wordt omzetten er staat bijvoorbeeld Joystick.setXAxis(byte value) dan zet je dus een joystickx naar een bepaalde waarde.
een analoge waarde wordt in default al gelijk omgezet naar een byte. maar dat kun je dus met span snel aanpassen naar
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 308
Geregistreerd: 15 Nov 2015, 11:54

Re: Toepassing Hall sensor bij een Flightsim controller

Berichtdoor Gij Kieken » 05 Mei 2019, 14:24

Hey Karabas, mooi projectje .
@ shooter, ik volg het projectje mee op de achtergrond.
Zoals zo vele zaken is ook mij span onbekend ,bij deze vlug even wat opgezocht < https://en.cppreference.com/w/cpp/container/span > ,spijtig genoeg met mijn beperkte kennis wordt ik er niet veel wijzer van.
Hoe moet je dit bekijken is dit een soort array van objecten, wil je een keer kort voorbeeldje geven waar je dit kunt toepassen ter verduidelijking ?

Berichten: 4
Geregistreerd: 03 Mei 2019, 15:07

Re: Toepassing Hall sensor bij een Flightsim controller

Berichtdoor Karabas » 05 Mei 2019, 16:39

Dank voor de bijval Gij Kieken. Wist niet hoe te formuleren maar ik kan er ook nog niets mee. Hopelijk wil/kan iemand een stukje voorbeeld code posten waar ik weer verder mee kan experimenteren. Ik heb vroeger wel wat met BASIC geprogrammeerd maar dat is toch wel wat anders. Ik probeer nu een bestaande sketch (zie boven) uit te rafelen om er achter te komen hoe e.e.a. werkt.

Bij deze sketch in combinatie met een Hall sensor begint de uitslag van een (joystick) as in het midden en wil alleen maar naar rechts. Magneet omdraaien of aan de achterkant van de sensor levert geen uitslag naar links. Als je in de seriële monitor kijkt dan geeft hij wel een hogere of een lagere waarde, afhankelijk van de stand van de magneet. Het is mij dan ook een raadsel waarom de joystick balk geen uitslag naar links geeft....

Berichten: 2717
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Toepassing Hall sensor bij een Flightsim controller

Berichtdoor shooter » 05 Mei 2019, 20:23

oops sorry daar had map moeten staan excuses.
ik gebruik span in een PLC programma. voor hetzelfde trouwens.gij weet wel hoe dit werkt.
Ik heb een aantal voorbeelden gevonden om een joystick an te sluiten op een USB poort.
zowel voor een vliegtuig maar ook voor een raceauto.
throttle bijvoorbeeld loopt van 0 tot 100, maar de analoge ingang loopt van 0 tot 1023 dus map wordt dan uit =map(ingang,0,1023,0,100) bijvoorbeeld
een joystick loopt ook van 0 tot 1023 maar wordt dan bijvoorbeeld 0,1023,-100,100.
of een servo loopt tot 180 graden.
Het ligt echt aan welke library je gebruikt, en waarvoor.
Persoonlijk zou ik zeker bij die library blijven en die ombouwen, want anders heb je nogal veel werk met commandos in de USB.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 308
Geregistreerd: 15 Nov 2015, 11:54

Re: Toepassing Hall sensor bij een Flightsim controller

Berichtdoor Gij Kieken » 05 Mei 2019, 22:50

@shooter, is inderdaad duidelijker zo, verwachte dat je map bedoelde,
des al niet te min zijn er tal van c++ uitdrukkingen die niet zo courant in gebruik zijn.

Gebruikers-avatar
Berichten: 308
Geregistreerd: 15 Nov 2015, 11:54

Re: Toepassing Hall sensor bij een Flightsim controller

Berichtdoor Gij Kieken » 05 Mei 2019, 23:18

Aansluitend op shooter zijn voorbeeld ingeval je het zelf nog gevonden zou hebben,
wat uitleg over map.
https://www.arduino.cc/reference/en/lan ... /math/map/

Berichten: 2717
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Toepassing Hall sensor bij een Flightsim controller

Berichtdoor shooter » 06 Mei 2019, 00:07

ik probeer alleen commandos te gebruiken die in de arduino thuishoren, ofwel die in de refernce staan.
ik beveel iedereen aan om een cheatsheet te printen.
paul deelen
shooter@home.nl

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Google [Bot] en 4 gasten