Ich hab schon gelesen das damit die Stromstärke justiert wird und dann die Fernsteuerung der Stromstärke nicht mehr geht.
Dann hab ich gelesen das das Ding keine Funktion hat.
Ich glaube probieren macht schlau.
Ich hab schon gelesen das damit die Stromstärke justiert wird und dann die Fernsteuerung der Stromstärke nicht mehr geht.
Dann hab ich gelesen das das Ding keine Funktion hat.
Ich glaube probieren macht schlau.
Hast du das selbe Display wie ich?
Dieses Drehpoti ist das überhaupt in Funktion?
Ah du hast auch das Display dran?
Nee ein Nano arduino mit Flow Sensor alles klar muss ich umklemmen dachte ich mir schon... die Idee kam mir als ich das Display. Angehängt habe.
Kann das sein das an P (Water Protection) ein Low also 0V liegen muss damit das Funktioniert?
Jetzt hab ich der Spielerei wegen das Gerät im Bild angehängt aber auch da kein wank an der mA Anzeige...
Bitte auch vorherigen Beitrag lesen.
Ok irgendwie macht der Kollege keinen muchs
Wenn ich am Netzteil messe
- g gegen p hab ich 5 v
- g gegen L hab ich 5 v
- g gegen in hab ich 0v
5v Pin ist nicht belegt genauso wie der h pin.
Wenn ich einen Schuss auslöse blinkt kurz eine grüne led am Netzteil auf.
Woran kann das liegen?
Wo stell ich denn die Leistung ein so wie ich die ms eingestellt hab im Display? Oder geht das nur am pc?
Ja ich denke ich werde schon auf das Tape schießen dahinter ist ja die Spiegelrückwand aus Alu außerdem ist dann noch der Röhrendeckel aus Dibond Alu Verbund.
und hat es geklappt?
Noch nicht hab Gersten nichts mehr gemacht mal sehen heute Abend muss mir noch Mut zureden
nein hat Gersten einfach keine zeit mehr.
Für einen Laserschneider denke ich, dass 150 mm für die Z-Achse zu klein sind. Warum versuchen Sie es nicht mit 200 mm oder 220 mm? Dann ist es eine falsche Idee, es nach hinten zu legen. Es ist am besten, es entweder neben oder nach unten zu stellen.
Vor allem passt das voll zum Thema
Ok wenn ich 10% abgebe sollte das doch reichen um das grep tape zu durchschießen.
Also ich wollte erst mal ein paar Schüsse ab zu geben sagen wir mit 10% um die Spiegel Einstellungen zu überprüfen.
Wenn ich jetzt beim Ruida auf die Shot Taste drücke wie lange ist dann der Laser an?
Das scheint bei letzten Post unter gegangen zu sein:
So nun bin ich an einem Punkt angelangt, an dem ich mich überwinden muss die Sicherung des Hochspannungsteiles das erste mal um zu legen und zu scharf zu Schießen.
Da hab ich noch etwas Bammel davor und benötige vielleicht noch guten Zuspruch und hinweise auf was besonders geachtet werden muss .
Dann nich ein paar Impressionen:
51D56783-28BF-435D-A608-BB111EF315E1.jpeg
BAAD541D-FB9A-409A-9089-B23322669003.jpegF308E3AD-26FF-48E2-A135-E14A0A33A5EE.jpeg32D57B13-F620-4BDA-B0BE-0F10CACF87A0.jpeg1A12E1C4-B4B7-49A6-AF5D-2ECF69EE40A3.jpeg
Hier werde ich wahrscheinlich die nanos noch näher an die Displays bringen müssen mal sehen wie ich das mache... Auf jedenfall wird das eng...
Die Einstellung der Abluft Regelung ( Ventilator) war etwas schwieriger, da normale Servos nur einen Weg von 180° machen und ich aber 300° für die Potis benötigte.
Diese Servos habe ich dann gefunden mit dem PID-6225MG-300 welche eine etwas andere Ansteuerung verlangen.
Hier kam dieses Sketch zum Zuge:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeMonoBoldOblique12pt7b.h>
byte sensorInterrupt = 0; // 0 = digital pin 2
byte sensorPin = 2;
byte ok_pin =3;
byte alarm_pin = 4;
long millis_new;
long millis_old;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
int pot1pin = A7; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
int Sollwert; // Variable für den Servo im Bereich 800 bis 2000µs
int val1;
int oldval; // Schwellwert variable
int pot2pin2 = A6; // analog pin used to connect the potentiometer
int val2; // variable to read the value from the analog pin
int Sollwert2; // Variable für den Servo im Bereich 800 bis 2000µs
int val12;
int oldval2; // Schwellwert2 variable
// Intiieren des Timer 1 für Servo-Impulse an Pin 9 und 10
void initServo() { TIMSK1 = 0; // keine Interrupts TCCR1A = _BV(WGM11); /* Fast PWM, ICR1 is top */ TCCR1B = _BV(WGM13) | _BV(WGM12) /* Fast PWM, ICR1 is top */ | _BV(CS11) ; // div 8 clock prescaler ( 0,5µs per tic ) OCR1A = 3000; // initiale Pulsbreite 1,5ms OCR1B = 3000; // initiale Pulsbreite 1,5ms ICR1 = 40000; // 20ms period TCCR1A = TCCR1A & ~_BV(COM1A0) | _BV(COM1A1); // Output to pin 9 ( OCRA ) TCCR1A = TCCR1A & ~_BV(COM1B0) | _BV(COM1B1); // Output to pin 10 ( OCRB )
}
// Pulsbreite einstellen ( pos in µs )
void servo1Write(int pos) { OCR1A = pos*2;
}
void servo2Write(int pos) { OCR1B = pos*2;
}
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
millis_old=0; millis_new=0;
pinMode(ok_pin,OUTPUT); pinMode(alarm_pin,OUTPUT); // digitalWrite(ok_pin,HIGH); digitalWrite(alarm_pin,LOW);
pinMode(sensorPin, INPUT); digitalWrite(sensorPin, HIGH);
pinMode( 9, OUTPUT ); pinMode( 10, OUTPUT ); initServo(); //SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 //Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever }
// Show initial display buffer contents on the screen -- // the library initializes this with an Adafruit splash screen. display.display(); delay(2000); // Pause for 2 seconds
// Clear the buffer display.clearDisplay();
display.setFont(&FreeMonoBoldOblique12pt7b); display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(SSD1306_WHITE); // Draw white text display.cp437(true); // Use full 256 char 'Code Page 437' font
}
void loop() {
// Enable the interrupt attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
// put your main code here, to run repeatedly: analogReference(EXTERNAL); val = analogRead(pot1pin); // reads the value of the potentiometer (value between 0 and 1023) Sollwert = map(val>>3, 0, 127, 500, 2500); // scale it to use it with the servo (value between 0 and 180) if ( abs( Sollwert - oldval) > 45 ) { // <<-- 10 ist hier der Schwellwert servo1Write(Sollwert); // sets the servo position according to the scaled value oldval = Sollwert; } display.setCursor(10, 20); // Start at top-left corner
// Not all the characters will fit on the display. This is normal. // Library will draw what it can and the rest will be clipped. display.clearDisplay(); display.print("MIN ");
// display.setCursor(0, 36); // Start at top-left corner val1 = map(val, 0, 1023, 0, 100); display.print(val1); display.print("%");
// put your main code here, to run repeatedly: analogReference(EXTERNAL); val2 = analogRead(pot2pin2); // reads the value of the potentiometer (value between 0 and 1023) Sollwert2 = map(val2>>3, 0, 127, 500, 2500); // scale it to use it with the servo (value between 0 and 180) if ( abs( Sollwert2 - oldval2) > 45 ) { // <<-- 10 ist hier der Schwellwert servo2Write(Sollwert2); // sets the servo position according to the scaled value oldval2 = Sollwert2; } display.setCursor(10, 50); // Start at top-left corner
// Not all the characters will fit on the display. This is normal. // Library will draw what it can and the rest will be clipped. display.print("MAX ");
// display.setCursor(0, 36); // Start at top-left corner val12 = map(val2, 0, 1023, 0, 100); display.print(val12); display.print("%");
display.display(); delay(15); }
/*
Insterrupt Service Routine */
void pulseCounter()
{ millis_new=millis(); if(millis_new-millis_old>50) { digitalWrite(ok_pin,LOW); digitalWrite(alarm_pin,HIGH); } else { digitalWrite(ok_pin,HIGH); digitalWrite(alarm_pin,LOW); } millis_old=millis();
}
Alles anzeigen
Ich will jetzt gar nicht auf die Sketche großartig eingehen da ich auch nicht zu viel davon verstehe, nur soweit ein paar Tipps für den Aufbau.
Der I2C Bus der die Displays betreibt ist sehr sensibel, den habe ich an den Daten Ausgängen mit 4,7k pull up Wiederständen versehen. Der Bus kann ganz schnell den Nano aufhängen und dann geht gar nichts mehr bis zum Resett. Weiter ist dieser Bus für ganz kurze längen gedacht <10cm. Ich hatte zu beginn ca. 90cm und das ging gar nicht... Im Moment habe ich etwa 40cm und das geht einigermaßen. Ich werde da versuchen das ganz nochmals zu kürzen.
Wie auch bei den Poti Eingängen sollte auf die Kabellänge geachtet werden, diese bestehen aus der Kombination 10k lineares Poti und einem 10yF Kondensator. Zuerst hatte ich ein 500k Poti drin da ich solche da hatte aber die haben sehr viele Störungen verursacht.
Die Servo Ausgänge lassen sich definitiv von den Kabel längen nicht kürzen, denn der Laser hat einfach eine bestimmte Größe und die Bedienelemente sitzen halt auch an einer Stelle. Da wurde zu einem kniff gegriffen der die Eingänge der Potis überwacht und erst wenn eine bestimmter Schwellwert überschritten ist dieser weiter gegeben wird.
So nun an dieser stelle vielen Dank an Christian der den Haupt Input am Programm gegeben hat.
Der Richtigkeit halber muss ich noch erwähnen das ein Modellbau Forum mir den ausschlaggebenden Tipp gegeben hat, die 300° Servos korrekt an zu sprechen und ein Arduino Forum, dass mir wertvolle Tipps zur Entstörung gegeben hat.
Und dann noch ein Lob in die Runde, für ein Forum in dem immer gerne und Freundlich geholfen wird. Auch wenn alles 10 mal and 10 verschiedene Leute erklärt wird, ohne das jemand unfreundlich und genervt reagiert. Das gibt es sehr selten!!! Top weiter so!
ich hoffe mein ganzer Text ist einigermaßen Verständlich....
Also rein damit... Was ist passiert?
Die Servos Zappelten wie die seuche es war nicht tragbar, die Displays stiegen aus und die Nanon hingen sich auf...
Alles im allen ne Katastrophe...
Dan ging es los mit den ganzen Optimierung.
Dabei kam da heraus, dies ist für die Absaugung oben und unten jeweils einmal eingebaut:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeMonoBoldOblique12pt7b.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
int potpin = A7; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
int val1; // variable to scale Servo rotation to %
int oldval; // Schwellwert variable
// Intiieren des Timer 1 für Servo-Impulse an Pin 9
void initServo() { TCCR1A = _BV(WGM11); /* Fast PWM, ICR1 is top */ TCCR1B = _BV(WGM13) | _BV(WGM12) /* Fast PWM, ICR1 is top */ | _BV(CS11) ; // div 8 clock prescaler ( 0,5µs per tic ) OCR1A = 3000; // initiale Pulsbreite 1,5ms ICR1 = 40000; // 20ms period TCCR1A = TCCR1A & ~_BV(COM1A0) | _BV(COM1A1); // Output to pin 9 ( OCRA )
}
// Pulsbreite einstellen ( pos in µs )
void servoWrite(int pos) { OCR1A = pos*2;
}
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() { pinMode( 9, OUTPUT ); initServo(); //SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 for (;;); // Don't proceed, loop forever }
// Show initial display buffer contents on the screen -- // the library initializes this with an Adafruit splash screen. display.display(); delay(2000); // Pause for 2 seconds
// Clear the buffer display.clearDisplay();
display.setFont(&FreeMonoBoldOblique12pt7b); display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(SSD1306_WHITE); // Draw white text display.cp437(true); // Use full 256 char 'Code Page 437' font
}
void loop() { // analogReference(EXTERNAL); // <<<---- nicht in loop val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 550, 1500); // scale it to use it with the servo (value between 500 and 1500) if ( abs( val - oldval) > 20 ) { // <<-- 10 ist hier der Schwellwert servoWrite(val); // sets the servo position according to the scaled value oldval = val; } display.setCursor(0, 25); // Start at top-left corner
// Not all the characters will fit on the display. This is normal. // Library will draw what it can and the rest will be clipped. display.clearDisplay(); display.print("Absaugung oben "); val1 = map(val, 550, 1500, 0, 100); display.print(val1); display.print("%");
display.display(); delay(15);
}
Alles anzeigen
So nun bin ich an einem Punkt angelangt, an dem ich mich überwinden muss die Sicherung des Hochspannungsteiles das erste mal um zu legen und zu scharf zu Schießen.
Da hab ich noch etwas Bammel davor und benötige vielleicht noch guten Zuspruch und hinweise auf was besonders geachtet werden muss .
Aber unabhängig davon muss ich noch eine andere Geschichte los werden und einen dicken Dank dazu.
Eus4 hat mich auf die Idee gebracht die Abluft mit Servos zu kanalisieren, zwischen der Absaugung von oben und von unten.
Je mehr ich darüber nach dachte wollte ich die Abluft stärke auch vom Bedienpult aus steuern können.
Die Regelung der Abluft ist erst mal mit einem Poti für die Minimal Drehzahl und die Maximal Drehzahl ausgestattet. Da ich in dem Bedienpult als Maximale Spannung 24VDC einsetzen wollte musste auch da eine Fernsteuerung her, was lag näher als auch hier die Servos ein zu setzen.
Also die Idee war geboren, aber die Lösung in ganz ganz weiter ferne.
So da kam ichbinsnur Christian ins spiel, er bot mir an da was zu programmieren für einen Arduino Nano.
Was sollte er können?
Er sollte das Servos % genau steuern und den Wert auf einem Display ausgeben.
Zusätzlich noch eine Wasser Flow Auswertung mit einem YF-S201 Sensor. Die Auswertung geht auf zwei Ausgänge einer geht auf high wenn alles ok ist und einer geht auf Low in diesem falle.
Also was ist verbaut 3 Arduinos Nano mit dem Oled Displays, 5 Servos und der YF-S201 Flow Sensor.
1. für die Absaugung oben
2. für Absaugung unten
3. für Abluft Steuerung Min und Max sowie die Flow Überwachung.
Die Hardware war schnell gezeichnet und im 3D Druck hergestellt.
Die Regelung der Abluft:
Die Servo Klappe für die Absaugung oben:
Die Absaugung unten besteht aus zwei solchen klappen:
Das Basis Programm hat Christian ganz schnell gemacht gehabt.
Dann liefen die ersten versuche auf dem Steckbrett ganz gut.
Morgen zusammen,
sagt mal wieviel höhenunterscheid in der Z Achse kann man zu lassen? sind 0,6mm ok oder muss ich noch genauer werden?
Also habe es rausgefummelt das Rückschlag Ventil muss in den Zulauf, im Rücklauf funktioniert das nicht da die dann über die Pumpe Luft angezogen wird.
Habe eines Bestellt. Mal sehen wie es dann geht.
Ja wohne an der grenze und arbeite auch drüben