leuke frees bediening met Arduino

Gewoon even offtopic praten over van alles en nog wat.

Moderator: Moderators

Gebruikersavatar
Portje
Donateur
Berichten: 968
Lid geworden op: 24 apr 2012 10:16
Locatie: Volgens mijn VPN kom ik uit..?

leuke frees bediening met Arduino

Bericht door Portje »

Gaat wel niet over een portaal maar toch een leuke frees bediening met Arduino
https://www.youtube.com/watch?v=YSfgVo2 ... sWerkstatt
https://www.youtube.com/watch?v=OS8giga ... Bastelbude
Ik heb er de ballen verstand van, en nog minder ervaring
En helaas zit mijn hoofd zó barstensvol met informatie dat ik niets meer terug kan vinden
Gigabyte Z490 aorus master - i9-10850K 3.60ghz- Corsair DDR4 32GB - ssd 970 evo 1TB M.2
https://www.youtube.com/channel/UCbUguR ... ljJift2lGw
Gebruikersavatar
audiomanics
Donateur
Berichten: 5273
Lid geworden op: 28 feb 2007 09:31
Locatie: Appelscha
Contacteer:

Re: leuke frees bediening met Arduino

Bericht door audiomanics »

Arduino is altijd leuk.. Zeker voor dit soort projecten.. (al heel wat dingen met een Arduino, of eigenlijk alleen de Atmega 328P gemaakt...)

Kees
<klik>... euh..test... 123.... einde test... uit.<klik>
bartL
Berichten: 1154
Lid geworden op: 15 jan 2008 07:14
Locatie: Zuid hollandsche eilanden

Re: leuke frees bediening met Arduino

Bericht door bartL »

audiomanics schreef: 11 mar 2021 01:40 Arduino is altijd leuk.. Zeker voor dit soort projecten.. (al heel wat dingen met een Arduino, of eigenlijk alleen de Atmega 328P gemaakt...)

Kees
Hoi Kees, heb jij toevallig ook verstand van het debouncen van drukknoppen? Ik gebruik 2 arduino Leonardo's voor de controller van mijn freesbank maar krijg dat nog niet lekker voor elkaar.
Swake
Donateur
Berichten: 1687
Lid geworden op: 23 nov 2009 20:58
Locatie: (B)
Contacteer:

Re: leuke frees bediening met Arduino

Bericht door Swake »

De input moet je permanent aan de hoog (of laag al naargelang hoe het uitgelezen wordt) hangen via een weerstand. De knop uiteraard naar de andere kant. Daarbovenop moet je een vertraging instellen bij het lezen, dit laatste is heel erg belangrijk. En dat moet 99% van de problemen oplossen. Zie hier:

https://www.arduino.cc/en/Tutorial/Buil ... /Debounce/

Als het hiermee niet werkt zit je met een storing ergens (of zeeeeer slechte knoppen) en dan moet je die eerst voldoende wegwerken.
When it fits stop using the hammer.
Gebruikersavatar
WillyH
Donateur
Berichten: 659
Lid geworden op: 22 dec 2018 09:35
Locatie: Zuiderkempen (B)

Re: leuke frees bediening met Arduino

Bericht door WillyH »

Portje schreef: 11 mar 2021 01:14 Gaat wel niet over een portaal maar toch een leuke frees bediening met Arduino
Voor de duidelijkheid, geen Arduino maar ESP32.
bartL
Berichten: 1154
Lid geworden op: 15 jan 2008 07:14
Locatie: Zuid hollandsche eilanden

Re: leuke frees bediening met Arduino

Bericht door bartL »

Swake schreef: 11 mar 2021 08:19 De input moet je permanent aan de hoog (of laag al naargelang hoe het uitgelezen wordt) hangen via een weerstand. De knop uiteraard naar de andere kant. Daarbovenop moet je een vertraging instellen bij het lezen, dit laatste is heel erg belangrijk. En dat moet 99% van de problemen oplossen. Zie hier:
Dat eerste deel is allemaal in orde. In de arduino zijn sowiso alle inputs al PULLUP gezet. Met de knoppen trek ik ze dus naar beneden, werkt allemaal prima.
Die debounce link ken ik, en ik heb het er onder 1 knop al inzitten. Maar er hangen 18knoppen aan 1 arduino en als ik die allemaal van zo'n code moet voorzien dan wordt het een verhaal van 6 kantjes. Volgens mij moet dat dus veel eenvoudiger kunnen alleen heb ik daar niet voldoende kennis over. Als ik daar dus een voorzetje van zou kunnen krijgen/vinden zou het al enorm helpen.
nieles
Berichten: 83
Lid geworden op: 15 mei 2009 13:43
Locatie: Zwolle

Re: leuke frees bediening met Arduino

Bericht door nieles »

je kan de code toch in een functie zetten? dan hoef je code niet 18x te kopiëren.

edit:
wat ze doen overigens is wel een van de simpelste manieren om digitaal de debounce te doen. pin controleren en dan x tijd later nog een keer controleren of echt de status is veranderd.

je zou het ook met een RC filter in de hardware kunnen doen. dan is de code heel simpel.
bartL
Berichten: 1154
Lid geworden op: 15 jan 2008 07:14
Locatie: Zuid hollandsche eilanden

Re: leuke frees bediening met Arduino

Bericht door bartL »

nieles schreef: 11 mar 2021 10:39 je kan de code toch in een functie zetten? dan hoef je code niet 18x te kopiëren.
Verklaar je nader.... hoe zou dit er dan uitzien voor bijv. 2 knoppen? De rest zal me wel lukken denk ik.
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 12054
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: leuke frees bediening met Arduino

Bericht door hugo stoutjesdijk »

Iemand riep tegen me dat dat met een State-Machine moet, daar ben ik toen maar eens in gedoken. Heel leerzaam.
Die knoppen heb ik uiteindelijk dan in een array zitten en die kun je met een loop af vragen.

Code: Selecteer alles

  Toets[0].pin = 2;
  Toets[1].pin = 3;
  Toets[2].pin = 4;
  Toets[3].pin = 7;
  Toets[4].pin = 8;
  enz...
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
nieles
Berichten: 83
Lid geworden op: 15 mei 2009 13:43
Locatie: Zwolle

Re: leuke frees bediening met Arduino

Bericht door nieles »

bartL schreef: 11 mar 2021 12:35
nieles schreef: 11 mar 2021 10:39 je kan de code toch in een functie zetten? dan hoef je code niet 18x te kopiëren.
Verklaar je nader.... hoe zou dit er dan uitzien voor bijv. 2 knoppen? De rest zal me wel lukken denk ik.
je zal zelf moeten uitzoeken hoe functies precies werken. maar qua code zal het zoiets zijn:
(het zal vast niet zo zijn dat het zo simpel is als de code er in plakken overigens)

Code: Selecteer alles

//helemaal boven in maak je het prototype aan:
int pollDebouncePin(pin);

// dan heb je de standaard loop van arduino:
int loop()
{
	//hier kan je functies aanroepen
	pollDebouncePin(2); // in dit geval poll je dus pin 2
	pollDebouncePin(16); // je roept de zelfde functie aan, maar met ander pin nummer
}

// dan nog de implementatie van de functie:

int pollDebouncePin(pin)
{
	int ValueOfPin
	// code om de pin te pollen
	
	return valueOfPin;
}


Kjelt
Donateur
Berichten: 6328
Lid geworden op: 14 jun 2007 21:51
Locatie: Eindhoven

Re: leuke frees bediening met Arduino

Bericht door Kjelt »

Van software key debouncing kun je behoorlijk gestoord worden, en dat komt omdat iedere schakelaar een ander gedrag heeft.
Dus wat voor de een perfect werkt kan voor een andere schakelaar niet voldoen.
Ja het kan puur met software maar je wilt je wel dan afvragen:

- hoe vaak wordt er een knop ingedrukt, als dat heel veel is hou je dan nog genoeg processing power over voor de rest van de software ?
Als je hier meer van wilt weten: Rate Monotonic Analysis.

- hoeveel knoppen mogen er tegelijk ingedrukt worden

Bij 18 knoppen denk ik eerder aan een keyboard matrix , dus rij/kolom scanning met IRQ (interrupt request) software handling evt aangevuld met een lichte vorm van hardware debouncing (weerstand en 100nF condensator ofzo).

Alternatief is om iedere schakelaar een andere weerstandswaarde kort te laten sluiten van een hele grote spanningsdeler en dan via een analoge ingang van de ADC te samplen en via een LUT (lookup table) te vergelijken dan weet je welke schakelaar(s) gesloten zijn. Beetje ouderwetsch maar kost je maar 1 ingang ipv 9 (5x4 matrix).

Hier een leuke presentatie waar ik zojuist tegenaan googlede want iedere schakelaar heeft weer een ander schakel patroon:

https://my.eng.utah.edu/~cs5780/lecture ... 11_2up.pdf

hugo stoutjesdijk schreef: 11 mar 2021 13:01 Iemand riep tegen me dat dat met een State-Machine moet, daar ben ik toen maar eens in gedoken. Heel leerzaam.
Ja dat is wel the way to go alleen kost het best wat kruim bij een 8 bittertje. (zie RMA opmerking hierboven), het kan niet de bedoeling zijn dat de processor de halve tijd aan het knoppen samplen is ;-)
bartL
Berichten: 1154
Lid geworden op: 15 jan 2008 07:14
Locatie: Zuid hollandsche eilanden

Re: leuke frees bediening met Arduino

Bericht door bartL »

Op zich werkt het nu al best aardig op mijn machine.
Voor het (te) vaak indrukken van de knoppen waardoor de processing power overschreden wordt ben ik niet bang. Ik gebruik dit simpelweg op een machine controller om te joggen, assen te nullen, homen, etc.
Het kostte best wat meer uitzoekwerk dan ik gedacht had omdat voor sommige functies keyboard.press beter werkte en voor de ander keyboard.write.
Wanneer ik keyboard.press gebruik plaats ik er daarna een actieve release achteraan wanneer de input weer HIGH wordt, dit zou niet nodig moeten zijn maar gaf bij mij de beste resultaten, voornamelijk bij het joggen.
Alleen had ik nu gehoopt er bij iedere knop een regel tussen te kunnen proppen voor het debouncen maar dit is dus niet zo makkelijk.
Ter verduidelijking zo ziet (een deel) van mijn code eruit.

Code: Selecteer alles

#include <Keyboard.h>

int X_min = 0;
int X_plus = 1;
int Y_plus = 2;
int Y_min = 3;
int Z_plus = 4;
int Z_min = 5;
int A_plus = 6;
int A_min = 7;

void setup() {
  Serial.begin(9600);
  pinMode( X_min, INPUT_PULLUP);
  pinMode( X_plus, INPUT_PULLUP);
  pinMode( Y_plus, INPUT_PULLUP);
  pinMode( Y_min, INPUT_PULLUP);
  pinMode( Z_plus, INPUT_PULLUP);
  pinMode( Z_min, INPUT_PULLUP);
  pinMode( A_plus, INPUT_PULLUP);
  pinMode( A_min, INPUT_PULLUP);
  
    Keyboard.begin();
    
 void loop() {
  // next commands are controlled by the JOG joysticks.

  //Arrow Left.
  if (digitalRead(X_min) == LOW) {
    Keyboard.press(0xD8);
  }
  if (digitalRead(X_min) == HIGH) {
    Keyboard.release(0xD8);
  }
  //Arrow Right.
  if (digitalRead(X_plus) == LOW) {
    Keyboard.press(0xD7);
  }
  if (digitalRead(X_plus) == HIGH) {
    Keyboard.release(0xD7);
  }
  //Arrow Up.
  if (digitalRead(Y_plus) == LOW) {
    Keyboard.press(0xDA);
  }
  if (digitalRead(Y_plus) == HIGH) {
    Keyboard.release(0xDA);
  }
  //Arrow Down.
  if (digitalRead(Y_min) == LOW) {
    Keyboard.press(0xD9);
  }
  if (digitalRead(Y_min) == HIGH) {
    Keyboard.release(0xD9);
  }
  // Page Up.
  if (digitalRead(Z_plus) == LOW) {
    Keyboard.press(0xD3);
  }
  if (digitalRead(Z_plus) == HIGH) {
    Keyboard.release(0xD3);
  }
  // Page Down.
  if (digitalRead(Z_min) == LOW) {
    Keyboard.press(0xD6);
  }
  if (digitalRead(Z_min) == HIGH) {
    Keyboard.release(0xD6);
  }
  //Home.
  if (digitalRead(A_plus) == LOW) {
    Keyboard.press(0xD2);
  }
  if (digitalRead(A_plus) == HIGH) {
    Keyboard.release(0xD2);
  }
  //End.
  if (digitalRead(A_min) == LOW) {
    Keyboard.press(0xD5);
  }
  if (digitalRead(A_min) == HIGH) {
    Keyboard.release(0xD5);
  }
  
 
Kjelt
Donateur
Berichten: 6328
Lid geworden op: 14 jun 2007 21:51
Locatie: Eindhoven

Re: leuke frees bediening met Arduino

Bericht door Kjelt »

Je hoeft niet voor iedere knop twee keer te lezen en vergelijken.
De knop is hoog of hij is laag, scheelt weer een paar processor cycles

Dus
If((lees knopA)== LOW)
{
//knop A ingedrukt
}
else
{
//knop A niet ingedrukt
}
sbos
Berichten: 92
Lid geworden op: 14 nov 2010 16:46
Locatie: Alphen aan den Rijn
Contacteer:

Re: leuke frees bediening met Arduino

Bericht door sbos »

Hallo,

Je kan het met software oplossen.
Als je last hebt van bouncing van de schakelaar kan je er ook een schmitt trigger er achter zetten
https://www.circuitbasics.com/switch-debouncing/
Dan wordt het al bij de voordeur goed gedaan.

Sjaak
Plaats reactie