Taal:

Omdat een laser natuurlijk niet echt lineair brand, en ik het met de CAM software maar niet goed kon krijgen. Ben ik nog eens na gaan denken. Moet zeggen dat ik ook een tip kreeg van de mensen van J-Tech . Dat is toch altijd aardig, ondanks ik niets gekocht heb bij hun., dat ze toch helpen!!!

Maar ik heb 2 ( 10 slagen) potmeters op 2 analog inputs van de Arduino Due, waarmee ik minimale en maximale laser output in kan geven.

En dat ging gelijk een heel stuk beter!
Exif_JPEG_420
Exif_JPEG_420

Hieronder afgebeeld, is gebrand op een oud stuk MDF. Bij vorige testen ging het op MDF niet echt goed. Toen zag je eigenlijk geen tinten. Nu ging dat veel beter.

Wel is in het voorbeeld hier onder, de foto 4x kleiner als op de vorige pagina. Dit omdat ik anders steeds zo lang moet wachten.
Als ik de workflow beter door heb, zal ik wel iets groters maken.
Exif_JPEG_420
(Click op het plaatje)


Toch nog even een test op een wat harder stuk hout... ging niet verkeerd. Bij de viltstift streepjes heb ik aan de potmeters staan draaien :-)
Exif_JPEG_420
(Click op het plaatje)


int tmpPWM_Out = 64; int PWM_Out; int Direction = 1; int InHigh = 255; int InLow = 0; int OutputHigh; int OutputLow; // in - outputs int StepPin = 7; int DirPin = 8; int Mode = 3; int OnOff = 2; int ScaleOn = 5; int ZeroOff = 6; int AnalogLow = A0;           // potentiometer connected to analog pin 0  laser min int AnalogHigh = A1;          // potentiometer connected to analog pin 1  laser max int Laser = 9; void setup() {  pinMode(DirPin, INPUT_PULLUP);  pinMode(StepPin, INPUT_PULLUP);  pinMode(Mode, INPUT_PULLUP);  pinMode(OnOff, INPUT_PULLUP);  pinMode(ScaleOn, INPUT_PULLUP);  analogWriteResolution(8);  pinMode(Laser, OUTPUT);  // interrupts on de Step an Dir inputs  // try to make it as fast as posible, because we don't want to miss steps  // maybe the Dir input on a normal input is Better?  attachInterrupt(digitalPinToInterrupt(StepPin), Count, RISING);  attachInterrupt(digitalPinToInterrupt(DirPin), ChangeDir, CHANGE);  if (digitalRead(DirPin))  // Dir input  {    Direction = -1;  } } void loop() {  if (digitalRead(Mode) == HIGH)                                                                // on/off mode on    // if the On/Off mode is active, we are not sending step and Dir pulses    // so Count and ChangeDir are never called  {    if (digitalRead(OnOff) == HIGH)                                                             // on off input    {      tmpPWM_Out = 255;    }    else    {      tmpPWM_Out = 0;    }  }  if (digitalRead(ScaleOn) == HIGH)                                                             // Scale fubction on  {    OutputLow = analogRead(AnalogLow) / 4;    OutputHigh = analogRead(AnalogHigh) / 4;    PWM_Out = map(tmpPWM_Out, 0, 255, OutputLow, OutputHigh);                                   // scale wanted value between 2 potmeter setpoints..    if (digitalRead(ZeroOff) == HIGH)    {      if ( tmpPWM_Out == 0)      {        PWM_Out = 0;      }    }  }  else                                                                                          // Scale fubction off  {    PWM_Out = tmpPWM_Out;  }  analogWrite(Laser, PWM_Out);                                                                  // real output to laser } void Count() {  tmpPWM_Out = tmpPWM_Out + Direction;                                                                // step pulse input on the rising edges Interrupt  if (tmpPWM_Out > 255)  {    tmpPWM_Out = 255;  }  if (tmpPWM_Out < 0)  {    tmpPWM_Out = 0;  } } void ChangeDir() {  Direction = 1;                                                                              // Dir input on a change interrupt  if (digitalRead(DirPin))  {    Direction = -1;  } }


Bovenstaand het nieuwe programma, wat ik nu in de Arduino Due heb staan. Het programma is niet zo heel veel anders als versie 1.

Er zijn 2 inputjes bij gekomen, maar dat is meer voor het testen.

En 2 analoge inputs. Met deze 2 analoge inputs kan ik het niveau instellen, hoe hard de laser brand als mach 3 de waarde 0 vraagt,en hoe hard de laser brand als Mach 3 de waarde 255 vraagt. en daar tussen word het door de MAP functie liniair verschaald.

met de input "ScaleOn" kan ik het verschalen aan en uit zetten. En met de input "ZeroOff" gaat de laser uit , als Mach3 de waarde 0 vraagt. Zodat het verschalen eigenlijk pas werkt, als Mach 3 een waarde geeft van 1 tot 255.
  OutputLow = analogRead(AnalogLow) / 4;
    OutputHigh = analogRead(AnalogHigh) / 4;
    PWM_Out = map(tmpPWM_Out, 0, 255, OutputLow, OutputHigh);

Dus eerst worden de 2 analoge inputs gelezen, en door 4 gedeeld. (1024/4=255)

tmpPWM_Out, is de waarde die Mach3 vraagt, en loopt van 0 tot 255.

Resultaten zijn echt veel beter, en ook veel makkelijk te beïnvloeden.

Je kan bijvoorbeeld hier goed zien, dat ik aan de potmeters heb staan draaien.
Het is nog steeds zoeken naar de juiste instellingen, want nog steeds heel erg bepaald word door het soort materiaal. En voor dat je aan je echte werk begin, moet je toch eerst een paar test ontwerpen maken.
(Click op het plaatje)
(Click op het plaatje)
---