diff --git a/app/data/cfg.json b/app/data/cfg.json index dae810a..4d6d4c5 100644 --- a/app/data/cfg.json +++ b/app/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.50", + "version": "1.8.51", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/app/package-lock.json b/app/package-lock.json index b7368ac..7cdd750 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.50", + "version": "1.8.51", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/app/package.json b/app/package.json index fa44d72..f2c1038 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.50", + "version": "1.8.51", "description": "GUI for the mcopy small gauge film optical printer platform", "main": "main.js", "scripts": { diff --git a/data/cfg.json b/data/cfg.json index dae810a..4d6d4c5 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.50", + "version": "1.8.51", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/notes/mcopy_projector_homing_debug.csv b/notes/mcopy_projector_homing_debug.csv new file mode 100644 index 0000000..f5bdcd5 --- /dev/null +++ b/notes/mcopy_projector_homing_debug.csv @@ -0,0 +1,200 @@ +0, 0, 0 +1, 1, 0 +2, 0, 0 +3, 0, 0 +4, 0, 0 +5, 0, 0 +6, 0, 2 +7, 0, 0 +8, 0, 0 +9, 2, 0 +10, 0, 0 +11, 0, 0 +12, 0, 0 +13, 13, 0 +14, 51, 0 +15, 60, 0 +16, 198, 0 +17, 354, 0 +18, 276, 0 +19, 300, 0 +20, 155, 0 +21, 492, 0 +22, 497, 0 +23, 47, 0 +24, 118, 0 +25, 9, 0 +26, 29, 0 +27, 3, 0 +28, 2, 0 +29, 0, 0 +30, 0, 0 +31, 0, 0 +32, 0, 0 +33, 0, 0 +34, 0, 0 +35, 0, 0 +36, 0, 0 +37, 0, 0 +38, 0, 0 +39, 0, 1 +40, 0, 0 +41, 0, 0 +42, 0, 0 +43, 0, 0 +44, 0, 0 +45, 0, 0 +46, 0, 0 +47, 0, 0 +48, 0, 0 +49, 0, 0 +50, 0, 0 +51, 0, 0 +52, 0, 0 +53, 0, 0 +54, 0, 0 +55, 0, 0 +56, 0, 0 +57, 0, 0 +58, 0, 0 +59, 0, 0 +60, 0, 0 +61, 0, 0 +62, 0, 0 +63, 0, 0 +64, 0, 0 +65, 0, 0 +66, 0, 0 +67, 0, 0 +68, 0, 0 +69, 0, 0 +70, 0, 0 +71, 0, 0 +72, 0, 0 +73, 0, 0 +74, 0, 0 +75, 0, 0 +76, 0, 0 +77, 0, 0 +78, 0, 0 +79, 0, 0 +80, 0, 0 +81, 0, 0 +82, 2, 0 +83, 0, 0 +84, 0, 0 +85, 1, 0 +86, 0, 0 +87, 0, 0 +88, 0, 0 +89, 0, 0 +90, 0, 0 +91, 0, 0 +92, 0, 0 +93, 0, 2 +94, 0, 0 +95, 0, 0 +96, 0, 0 +97, 0, 0 +98, 0, 0 +99, 0, 0 +100, 0, 0 +101, 0, 0 +102, 0, 0 +103, 0, 0 +104, 0, 0 +105, 0, 0 +106, 0, 0 +107, 0, 1 +108, 0, 0 +109, 0, 0 +110, 0, 0 +111, 0, 0 +112, 0, 0 +113, 0, 0 +114, 0, 0 +115, 0, 0 +116, 0, 0 +117, 0, 0 +118, 0, 0 +119, 0, 0 +120, 0, 0 +121, 0, 0 +122, 0, 0 +123, 0, 1 +124, 0, 0 +125, 1, 0 +126, 0, 0 +127, 0, 0 +128, 0, 0 +129, 0, 0 +130, 0, 0 +131, 0, 0 +132, 0, 0 +133, 0, 0 +134, 0, 0 +135, 0, 1 +136, 0, 0 +137, 0, 0 +138, 0, 0 +139, 0, 0 +140, 0, 0 +141, 0, 0 +142, 0, 0 +143, 0, 0 +144, 0, 0 +145, 0, 0 +146, 0, 0 +147, 0, 0 +148, 0, 0 +149, 0, 0 +150, 0, 0 +151, 0, 0 +152, 0, 0 +153, 0, 0 +154, 0, 0 +155, 0, 0 +156, 0, 0 +157, 1, 0 +158, 1, 0 +159, 0, 0 +160, 0, 0 +161, 0, 0 +162, 0, 0 +163, 0, 0 +164, 0, 0 +165, 0, 1 +166, 0, 0 +167, 0, 0 +168, 0, 0 +169, 0, 0 +170, 0, 0 +171, 0, 2 +172, 0, 1 +173, 0, 0 +174, 0, 0 +175, 0, 0 +176, 0, 0 +177, 0, 0 +178, 0, 0 +179, 0, 0 +180, 0, 0 +181, 0, 0 +182, 0, 4 +183, 0, 87 +184, 0, 360 +185, 0, 903 +186, 0, 262 +187, 0, 92 +188, 0, 122 +189, 0, 180 +190, 0, 198 +191, 0, 157 +192, 0, 72 +193, 0, 36 +194, 0, 8 +195, 0, 1 +196, 0, 0 +197, 0, 0 +198, 0, 0 +199, 0, 0 diff --git a/notes/mcopy_projector_homing_debug/mcopy_projector_homing_debug.ino b/notes/mcopy_projector_homing_debug/mcopy_projector_homing_debug.ino new file mode 100644 index 0000000..e1902a3 --- /dev/null +++ b/notes/mcopy_projector_homing_debug/mcopy_projector_homing_debug.ino @@ -0,0 +1,206 @@ +#include + +#define TAKEUP_DIR_PIN 3 +#define TAKEUP_STEP_PIN 2 + +#define FEED_DIR_PIN 7 +#define FEED_STEP_PIN 6 + +#define TAKEUP_SETTINGS_A 4 +#define TAKEUP_SETTINGS_B 5 + +#define FEED_SETTINGS_A 8 +#define FEED_SETTINGS_B 9 + +#define TAKEUP_EMITTER 17 +#define TAKEUP_RECEIVER A8 +#define FEED_EMITTER 18 +#define FEED_RECEIVER A9 + +AccelStepper _takeup(AccelStepper::DRIVER, TAKEUP_STEP_PIN, TAKEUP_DIR_PIN); +AccelStepper _feed(AccelStepper::DRIVER, FEED_STEP_PIN, FEED_DIR_PIN); + +uint32_t _motorSteps = 200; +uint8_t _mode = 1; + +long _feedSamples[200]; +long _takeupSamples[200]; + +const float _speed = 2000.0; + +void setup () { + Serial.begin(57600); + + _takeup.setMaxSpeed(_speed); + _takeup.setSpeed(_speed); + _takeup.setAcceleration(1000.0); + + _feed.setMaxSpeed(_speed); + _feed.setSpeed(_speed); + _feed.setAcceleration(1000.0); + + pinMode(TAKEUP_SETTINGS_A, OUTPUT); + pinMode(TAKEUP_SETTINGS_B, OUTPUT); + pinMode(FEED_SETTINGS_A, OUTPUT); + pinMode(FEED_SETTINGS_B, OUTPUT); + + pinMode(TAKEUP_RECEIVER, INPUT); + pinMode(FEED_RECEIVER, INPUT); + + digitalWrite(TAKEUP_SETTINGS_A, LOW); + digitalWrite(TAKEUP_SETTINGS_B, LOW); + digitalWrite(FEED_SETTINGS_A, LOW); + digitalWrite(FEED_SETTINGS_B, LOW); + + delay(2000); + home(); +} + +void loop () { + +} + +long readVcc() { + long result; + // Read 1.1V reference against AVcc + ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); + delay(2); // Wait for Vref to settle + ADCSRA |= _BV(ADSC); // Convert + while (bit_is_set(ADCSRA,ADSC)); + result = ADCL; + result |= ADCH<<8; + result = 1125300L / result; // Back-calculate AVcc in mV + return result; +} + +long analogReadAccurate (uint8_t pin) { + double Vcc = readVcc() / 1000.0; + double ADCValue = analogRead(pin); + return (ADCValue / 1024.0) * Vcc; +} + +long analogReadAccurateAverage (uint8_t pin) { + uint8_t count = 3; + double sum = 0.0; + for (uint8_t i = 0; i < count; i++) { + sum += analogReadAccurate(pin); + delay(1); + } + return sum / (double) count; +} + +uint16_t findPeak(long (&arr)[200], uint16_t &steps) { + uint16_t maxI = 0; + long max = 0; + for (uint16_t i = 0; i < steps; i++) { + if (arr[i] > max) { + maxI = i; + max = arr[i]; + } + } + return maxI; +} + +void home () { + uint16_t steps = _motorSteps * _mode; + uint16_t quarter = steps / 4; + uint16_t eighth = quarter / 2; + uint16_t takeupPeak = 0; + uint16_t feedPeak = 0; + uint16_t takeupOffset = 0; + uint16_t feedOffset = 0; + long takeupReading = 0.0; + long feedReading = 0.0; + + Serial.println("home()"); + + delay(10); + + for (uint16_t i = 0; i < steps; i++) { + takeupReading = analogReadAccurateAverage(TAKEUP_RECEIVER); + feedReading = analogReadAccurateAverage(FEED_RECEIVER); + _takeupSamples[i] = takeupReading; + _feedSamples[i] = feedReading; + if (i < steps - 1) { + _takeup.move(1); + _feed.move(1); + _takeup.runToPosition(); + _feed.runToPosition(); + } + } + + for (uint16_t i = 0; i < steps; i++) { + Serial.print(i); + Serial.print(", "); + Serial.print(_takeupSamples[i]); + Serial.print(", "); + Serial.println(_feedSamples[i]); + } + + takeupPeak = findPeak(_takeupSamples, steps); + feedPeak = findPeak(_feedSamples, steps); + Serial.print(" takeup peak: "); + Serial.println(takeupPeak); + Serial.print(" feed peak: "); + Serial.println(feedPeak); + + takeupOffset = abs(steps - takeupPeak); + feedOffset = abs(steps - feedPeak); + + Serial.print("takeup offset: "); + Serial.println(takeupOffset); + Serial.print(" feed offset: "); + Serial.println(feedOffset); + + if (takeupOffset > 0) { + for (uint16_t i = 0; i < takeupOffset; i++) { + _takeup.move(-1); + _takeup.runToPosition(); + } + } + if (feedOffset > 0) { + for (uint16_t i = 0; i < feedOffset; i++) { + _feed.move(-1); + _feed.runToPosition(); + } + } + /* + for (uint16_t i = 0; i < eighth; i++) { + _takeup.move(-1); + _feed.move(-1); + _takeup.runToPosition(); + _feed.runToPosition(); + } + + for (uint16_t i = 0; i < quarter; i++) { + takeupReading = analogReadAccurateAverage(TAKEUP_RECEIVER); + feedReading = analogReadAccurateAverage(FEED_RECEIVER); + _takeupSamples[i] = takeupReading; + _feedSamples[i] = feedReading; + if (i < steps - 1) { + _takeup.move(1); + _feed.move(1); + _takeup.runToPosition(); + _feed.runToPosition(); + } + } + + takeupPeak = findPeak(_takeupSamples, quarter); + feedPeak = findPeak(_feedSamples, quarter); + takeupOffset = abs(quarter - takeupPeak); + feedOffset = abs(quarter - feedPeak); + + if (takeupOffset > 0) { + for (uint16_t i = 0; i < takeupOffset; i++) { + _takeup.move(-1); + _takeup.runToPosition(); + } + } + if (feedOffset > 0) { + for (uint16_t i = 0; i < feedOffset; i++) { + _feed.move(-1); + _feed.runToPosition(); + } + } + */ +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0596191..baf18dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mcopy", - "version": "1.8.50", + "version": "1.8.51", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mcopy", - "version": "1.8.50", + "version": "1.8.51", "license": "MIT", "dependencies": { "arduino": "file:app/lib/arduino", diff --git a/package.json b/package.json index 9804e7d..b0f54ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcopy", - "version": "1.8.50", + "version": "1.8.51", "description": "Small gauge film optical printer platform", "main": "build.js", "directories": { diff --git a/processing/mcopy/cfg.json b/processing/mcopy/cfg.json index dae810a..4d6d4c5 100644 --- a/processing/mcopy/cfg.json +++ b/processing/mcopy/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.50", + "version": "1.8.51", "ext_port": 1111, "profiles": { "mcopy": {