leuke frees bediening met Arduino
Moderator: Moderators
- Portje
- Donateur
- Berichten: 968
- Lid geworden op: 24 apr 2012 10:16
- Locatie: Volgens mijn VPN kom ik uit..?
leuke frees bediening met Arduino
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
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
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
- audiomanics
- Donateur
- Berichten: 5273
- Lid geworden op: 28 feb 2007 09:31
- Locatie: Appelscha
- Contacteer:
Re: leuke frees bediening met Arduino
Arduino is altijd leuk.. Zeker voor dit soort projecten.. (al heel wat dingen met een Arduino, of eigenlijk alleen de Atmega 328P gemaakt...)
Kees
Kees
<klik>... euh..test... 123.... einde test... uit.<klik>
Re: leuke frees bediening met Arduino
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.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
Re: leuke frees bediening met Arduino
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.
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.
Re: leuke frees bediening met Arduino
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.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:
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.
Re: leuke frees bediening met Arduino
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.
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.
- hugo stoutjesdijk
- Donateur
- Berichten: 12055
- Lid geworden op: 02 mar 2011 17:04
- Locatie: elst (u)
- Contacteer:
Re: leuke frees bediening met Arduino
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.
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.
Re: leuke frees bediening met Arduino
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;
}
Re: leuke frees bediening met Arduino
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
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
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 ishugo 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.
Re: leuke frees bediening met Arduino
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.
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);
}
Re: leuke frees bediening met Arduino
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
}
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
}
Re: leuke frees bediening met Arduino
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
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