Pages: [1] 2 3   Go Down
Author Topic: 3x Lineare meting tbv frees  (Read 10006 times)
0 Members and 1 Guest are viewing this topic.
Netherlands
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Can't beat the virus anymore....
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
 
Voor mijn freesmachinetje wil ik graag een digitale uitlezing maken.
Ik heb al een mooie set digitale linialen, deze hebben als uitgang een A en B puls.
Nu is mijn bedoeling om drie van deze linialen in te lezen en weer te geven op een klein display,
Ook wil ik elke meting apart kunnen nullen met een drukkertje.
Als er ook nog eens plaats is voor een toerental sensor en weergave dan ben ik helemaal blij.
 
Kan iemand me een display adviseren en vertellen of dat met mijn standaard Arduino uno smd kan of dat ik een ander type nodig heb.
 
Ik dacht zelf aan een 4 lijnen display

lijn 1:  X:  000.000mm
lijn 2:  Y:  000.000mm
lijn 3:  Z:  000.000mm
lijn 4:  n:  000.000rpm

dit zijn de linealen die ik heb:
http://www.mgscale.com/mgs/language/english/product/PL81_PL82.html

Alvast bedankt
Sjuul CNC

Aangezien het mijn eerste post is:
Ik ben Sjuul en hou me in mijn hobby wat bezig met het zelf bouwen van cnc machientjes.
Ik heb een gezonde kennis basis electronika.
op youtube vinden jullie mijn laatste projecten: https://www.youtube.com/user/Sjuuls3Design
« Last Edit: August 16, 2013, 10:28:01 am by Sjuuls » Logged


Forum Moderator
Belgium
Online Online
Edison Member
*****
Karma: 68
Posts: 1904
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dag Sjuul CNC
Ik wil men freesmachientje ook ooit eens ombouwen tot een cnc machiene  smiley-cool
Maar goed nu jouw project ;-)
Ik heb effe naar de specs gekeken van de PL81 en PL82. Als ik het goed begrijp is de pulse waar je het over hebt het output circuit op http://www.mgscale.com/mgs/language/english/product/PL81_PL82.html
Als ik dat juist begrepen heb is het toch wel van belang of je eenn PL81 of 82 hebt.
De 81 geeft 40 volt dat zal via een spanningsdeler naar beneden moeten. De 82 begrijp ik geen snars van  smiley-eek-blue

Denkend aan pinnen is de uno aan de kleine kant. Daarom zou ik je een LCD aanraden die via I2C of SPI. Zelf ben ik geen grote kenner maar ik heb hier een LCD projectje van een UNO naar Mega moeten opgraden wegens veel pinnen weg voor de lcd.

Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Netherlands
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Can't beat the virus anymore....
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ik heb ze zelf ooit in en uitgebouwd.
de puls is meen ik iets van 4,7V, komt ook uit de module zelf. voeding van de module is 5V.
Op het werk werd deze door een tellerkaart ingelezen in de PLC.

Ik zat zelf ook al te denken dat de I/O's wel eens het probleem zouden kunnen worden.
3 metingen zijn er al 6 DI en dan nog 3 nul-knoppjes en nog een rpm sensor zijn 10 DI dan heb je het scherm nog niet mee gerekend.
Logged


Forum Moderator
Belgium
Online Online
Edison Member
*****
Karma: 68
Posts: 1904
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bij arduino stel ik dat je 0, 1 en 13 pinnen pas gebruikt als je echt weet waar je over spreekt. Dat geeft dus 17 pinnen voor "normaal gebruik".
De 3 knopjes kan je aan 1 analoge ingang hangen. Dat geeft dan 8 pinnen in gebruik of 9 pinnen over. Daar kan je ook een gewone LCD mee aanspreken. Maar het wordt krapjes.


Voor het lezen van pulsen kan je best met een interrupted pin werken. De uno geeft je dat hardware matig enkel op pin 2 en 3.
Als je een uno wilt zal je voor software serial moeten gaan.
De mega kan dat op 6 pinnen hardware matig.
Als je rpm sensor ook een pulse DI is moet je naar software serial of avontuurlijk doen en de due nemen.
De due werkt wel op 3.3Volt en heeft bescherming nodig voor 4.7V pulsen.

Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Forum Moderator
Belgium
Online Online
Edison Member
*****
Karma: 68
Posts: 1904
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Krijg ik net deze lnk binnen voor een cnc shield op de uno
http://blog.protoneer.co.nz/arduino-cnc-shield/
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ik kan je adviseren om een arduino mega 2560 te gebruiken deze heeft 6 interrupt en is een stuk sneller en heeft 60 ingangen /UItgangen
Logged

Forum Moderator
Belgium
Online Online
Edison Member
*****
Karma: 68
Posts: 1904
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

De mega sneller? Het zijn allemaal 8 bitters aan 16Mhz.
Kan jij uitleggen waarom de mega dan sneller is?
Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Netherlands
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Can't beat the virus anymore....
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset


Ik heb me een mega en een 20x4 LCD Display met I2C interface gekocht hier moet het zeker mee gaan lukken.
ook een extra RPM meting mag nu geen probleem meer zijn.

Zit nog te denken over de praktische uitvoering, een weergave van de voedingssnelheid is natuurlijk ook handig.

Wel jammer dat ik uiteindelijk de mega moet offeren aan het project, maar dat mag de pret niet drukken

Logged


Forum Moderator
Belgium
Online Online
Edison Member
*****
Karma: 68
Posts: 1904
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Op een 20x4 LCD kan je al heel wat informatie tonen.
Gisteren zag ik deze post http://forum.arduino.cc/index.php?topic=183267.msg1357719#msg1357719
Die heeft een Atemega8 (hij zegt dat ze minder dan 1 $ kosten) gebruikt voor de LCD. Dat scheelt natuurlijk een hoop pinnen.
Dat is ook zeker een alternatief voor een mega.
Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Netherlands
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Can't beat the virus anymore....
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset



Met arduino projectjes ben je zelden de eerste smiley smiley

ik zit nog te bedenken of het ook mogelijk is om met iets diy achtigs een lineare meting te maken, ik heb dan wel een mooie set linialen maar die heeft natuurlijk niet iedereen
ook zijn de linialen die ik heb nog al kostbaar +/- €1500.
Ik ga eens zoeken of ik iets kan vinden
« Last Edit: August 19, 2013, 01:06:15 pm by Sjuuls » Logged


Netherlands
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Can't beat the virus anymore....
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Afgelopen tijd niet stil gezeten.

Inmiddels heb ik al een tijdje een Mega R3 2560 en een I2C 4x20lcd
Om makkelijk te kunnen testen heb ik wat losse encoder-pots gekocht zodat ik de code kan testen zonder de hele installatie op te bouwen.

Op internet (via youtube filmpje) een code gevonden die de pulsen leest, telt en via de serial monitor zichtbaar maakt.
Ook het LCD schermpje heb ik al aan de gang mbv wan een "Hello World" sketch.

Ik kan de code goed lezen en begrijpen maar schrijven is toch nog moeilijk.
Ik heb de Encoder sketch dusdanig aangepast dat deze ook het display opstart met een welkoms tekst en vervolgens een soort van template op het scherm zet.

Het lukt me alleen nog niet om de waarde die op de serial monitor wordt geprint ook op het scherm te krijgen.
Wellicht kan iemand me helpen?

Quote

#include <Wire.h>  
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int pulses, A_SIG=0, B_SIG=1;

void setup()
{
 {
  attachInterrupt(0, A_RISE, RISING);
  attachInterrupt(1, B_RISE, RISING);
  Serial.begin(115200);
  lcd.begin(20,4);
 }
 {    
// ------- 3x knipperen backlight  -------------
  for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    delay(500);
    lcd.noBacklight();
    delay(500);
  }
  lcd.backlight();

//-------- Welkomst boodschap ------------------
 lcd.setCursor(0,0);
  lcd.print("********************");
  lcd.setCursor(0,1);
  lcd.print("*                  *");  
  lcd.setCursor(0,2);
  lcd.print("*                  *");  
  lcd.setCursor(0,3);
  lcd.print("********************");  
  delay(500);
  lcd.setCursor(4,1);
  lcd.print("Sjuul's DRO");
  lcd.setCursor(2,2);
  lcd.print("Mini Mill ZX7016");
  delay(3000);
  
  //-------- Template ------------------
  
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("X:               mm ");
  delay(500);
  lcd.setCursor(0,1);
  lcd.print("Y:               mm ");  
  delay(500);
  lcd.setCursor(0,2);
  lcd.print("Z:               mm ");  
  delay(500);
  lcd.setCursor(0,3);
  lcd.print("n:               RPM");
 
 }
} //einde setup


void loop(){
    
}

void A_RISE(){
 detachInterrupt(0);
 A_SIG=1;
 
 if(B_SIG==0)
 pulses++;//moving forward
 if(B_SIG==1)
 pulses--;//moving reverse
 Serial.println(pulses);
 attachInterrupt(0, A_FALL, FALLING);
}

void A_FALL(){
  detachInterrupt(0);
 A_SIG=0;
 
 if(B_SIG==1)
 pulses++;//moving forward
 if(B_SIG==0)
 pulses--;//moving reverse
 Serial.println(pulses);
 attachInterrupt(0, A_RISE, RISING);  
}

void B_RISE(){
 detachInterrupt(1);
 B_SIG=1;
 
 if(A_SIG==1)
 pulses++;//moving forward
 if(A_SIG==0)
 pulses--;//moving reverse
 Serial.println(pulses);
 attachInterrupt(1, B_FALL, FALLING);
}

void B_FALL(){
 detachInterrupt(1);
 B_SIG=0;
 
 if(A_SIG==0)
 pulses++;//moving forward
 if(A_SIG==1)
 pulses--;//moving reverse
 Serial.println(pulses);
 
 attachInterrupt(1, B_RISE, RISING);
}




Alvast bedankt,

dit is het filmpje waar ik de code van heb
http://www.youtube.com/watch?feature=player_detailpage&v=HQuLZHsGZdI

Logged


The Netherlands
Offline Offline
Edison Member
*
Karma: 47
Posts: 1537
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi.

Je hebt uitgevogeld hoe je je welkomstscherm kunt maken
Na je welkomstscherm maak je een template zodat de vaste tekst alvast op je scherm komt, zonder de variabelen dus.
Maar vervolgens doe je er niets mee.
Je kunt de plaats waar je de waardes wil zetten op dezelfde manier besturen als het opbouwen van je template, met lcd.setCursor
Vervolgens doe je lcd.print(pulses).
Als je dit vooraf laat gaan door lcd.setcursor naar dezelfde plaats en een lcd.print gevolgd door de juiste hoeveelheid spaties ("   "), wis je netjes de oude waarde voor je de volgende plaatst.
Pulses staat hier niet tussen aanhalingstekens, en is dus geen tekst, maar een variabele die geprint moet worden.
Dat is dus exact hetzelfde als wat je via Serial.println doet.

Eventueel verander je de tekst die je print naar de display alleen als ie ook veranderd is, wat zal leiden tot een stabieler beeld op je schermpje en als je het goed doet ook tot een iets sneller programmaverloop.

Als je even in het distilleer topic (klik!) kijkt, kun je zien hoe ik een menuutje heb uitgewerkt, en dat wellicht als voorbeeld kan dienen.

Succes hiermee.

Overigens zou ik je template in een aparte functie zetten (maar alleen als je meerdere schermen / templates wil gebruiken), die dan naar believen kan worden opgeroepen.
Logged

Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Netherlands
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Can't beat the virus anymore....
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bedankt voor de reactie,

Ik had al zoiets geprobeerd maar omdat het niet werkte heb ik mijn wijzigen en probeersels uit de code gehaald die ik heb gepost.
Ik ben nog erg groen in het arduino programmeren, dus ik volg een beetje de chineese methode van kopiëren,  aanpassen en proberen.

Het schrijven naar de lcd is nu me wel duidelijk maar weet niet goed waar ik de coderegels moet inpassen, zodat ze ook elke cylusperiode (heet dit zo?) worden herschreven.
Mij lijkt dat ik dit ergens in de void loop moet staan omdat dit tot het eigenlijke programma loopt.
In mijn voorbeeld staat pas een encoder maar als die eenmaal werkt is het kwestie kopie-paste.

Volgende stapjes worden herschalen van de pulzen naar echte milimeters en  toerenmeting.
Bedankt voor de info, ik ga er mee aan de slag

Sjuul
Logged


Netherlands
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Can't beat the virus anymore....
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Het volgende stukje code toegevoegd waardoor ik had gehoopt dat hij "pulses" zou schrijven:

Quote
void schrijven(){                                                //Sub programma met de naam schrijven
   lcd.setCursor(3,0);                                           //Plaats cursor op karakter 3 op regel 0
   lcd.print("               ");                                 //ruimte leegmaken (vanaf karakter 0 op regel 3) dmv deze met spaties te overschrijven
   lcd.setCursor(3,0);                                           //Plaats cursor op karakter 3 op regel 0
   lcd.print(pulses);                                            //aantal pulsen schrijven
 }


Helaas geeft dit geen resultaat.
Hij compileert en upload wel geeft geen foutmelding, maar doet er praktisch niks mee.
Ik heb het stukje aan het einde erbij geplakt, misschien niet de juiste plaats?
Ook ben ik begonnen met het bijvoegen van commentaar, het verwerken van de pulzen en of hij nu vooruit of achteruit gaat moet ik nog.
Ik begrijp het wel maar vindt het nogal lastig dit kort te beschrijven, maar dat lukt me nog wel.

Ik zal ook nog even de complete code posten, past hier niet meer bij


Wat ik ook niet begrijp is dat als ik de serialmonitor opstart ik eerst iets moet invullen in het invulveldje en moet verzenden voordat ik een waarde krijg te zien.
Is dit normaal?

Groetjes Sjuul


Logged


Netherlands
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Can't beat the virus anymore....
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Past niet in één keer, eerst dus maar de Void setup

Quote

#include <Wire.h>                                                //Toevoegen van I2C bibliotheek
#include <LiquidCrystal_I2C.h>                                   //Toevoegen van LCD bibliotheek
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);   //Instellen LCD adres voor de bus

int pulses, A_SIG=0, B_SIG=1;                                    //Aanmaken van -pulses-  -A_SIG=0- -B_SIG=1- als integer

void setup()                                                     //Begin van initialisatie en opstart (eenmalige doorloop bij opstart)
{
 {
  attachInterrupt(0, A_RISE, RISING);                            //Aangeven dat op pin0 een ineruptpin is en dat deze A_RISE heet en moet schakelen op stijgende flank
  attachInterrupt(1, B_RISE, RISING);                            //Aangeven dat op pin1 een ineruptpin is en dat deze B_RISE heet en moet schakelen op stijgende flank
  Serial.begin(115200);                                          //instellen baudrate 
  lcd.begin(20,4);                                               //aantal karakters en regels declareren van het LCD scherm
 }
 {
// ------- 3x knipperen backlight  -------------
  for(int i = 0; i< 3; i++)                                      //Het volgende stukje code i keer doorlopen, tot i gelijk is aan 3, beginnen bij o en na elke doorloop één bij i optellen
  {
    lcd.backlight();                                                 //lcd backlight aan
    delay(100);                                                      //100ms wachten
    lcd.noBacklight();                                               //lcd backlight uit
    delay(100);                                                      //100ms wachten
  }
  lcd.backlight();                                               //lcd backlight aan

//-------- Welkomst boodschap ------------------

  lcd.setCursor(0,0);                                            //Plaats cursor op karakter 0 op regel 0
  lcd.print("********************");                             //Schrijf (vanaf karakter 0 op regel 0) ********************
  lcd.setCursor(0,1);                                            //Plaats cursor op karakter 0 op regel 1
  lcd.print("*                  *");                             //Schrijf (vanaf karakter 0 op regel 1) *                  *
  lcd.setCursor(0,2);                                            //Plaats cursor op karakter 0 op regel 2
  lcd.print("*                  *");                             //Schrijf (vanaf karakter 0 op regel 2) *                  *
  lcd.setCursor(0,3);                                            //Plaats cursor op karakter 0 op regel 3
  lcd.print("********************");                             //Schrijf (vanaf karakter 0 op regel 3) ******************** 
  delay(500);                                                    //500ms wachten
  lcd.setCursor(4,1);                                            //Plaats cursor op karakter 4 op regel 1
  lcd.print("Sjuul's DRO");                                      //Schrijf (vanaf karakter 4 op regel 1) Sjuul's DRO
  lcd.setCursor(2,2);                                            //Plaats cursor op karakter 2 op regel 2
  lcd.print("Mini Mill ZX7016");                                 //Schrijf (vanaf karakter 2 op regel 2) Mini Mill ZX7016
  delay(1000);                                                   //1000ms wachten
  
  //-------- Template ------------------
 
  lcd.clear();                                                   //Wis scherm
  lcd.setCursor(0,0);                                            //Plaats cursor op karakter 0 op regel 0
  lcd.print("X:               mm ");                             //Schrijf (vanaf karakter 0 op regel 0) X:               mm
  delay(100);                                                    //100ms wachten
  lcd.setCursor(0,1);                                            //Plaats cursor op karakter 0 op regel 1
  lcd.print("Y:               mm ");                             //Schrijf (vanaf karakter 0 op regel 1) Y:               mm
  delay(100);                                                    //100ms wachten
  lcd.setCursor(0,2);                                            //Plaats cursor op karakter 0 op regel 2
  lcd.print("Z:               mm ");                             //Schrijf (vanaf karakter 0 op regel 2) Z:               mm
  delay(100);                                                    //100ms wachten
  lcd.setCursor(0,3);                                            //Plaats cursor op karakter 0 op regel 3
  lcd.print("n:               RPM");                             //Schrijf (vanaf karakter 0 op regel 3) n:               RPM
   
 }
}                                                                //einde setup

Logged


Pages: [1] 2 3   Go Up
Jump to: