Piece off homing code into its own script.

This commit is contained in:
Matt McWilliams 2023-10-09 19:09:50 -04:00
parent cf1514f53e
commit 0cf147d185
9 changed files with 414 additions and 8 deletions

View File

@ -1,5 +1,5 @@
{
"version": "1.8.50",
"version": "1.8.51",
"ext_port": 1111,
"profiles": {
"mcopy": {

2
app/package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "mcopy-app",
"version": "1.8.50",
"version": "1.8.51",
"lockfileVersion": 2,
"requires": true,
"packages": {

View File

@ -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": {

View File

@ -1,5 +1,5 @@
{
"version": "1.8.50",
"version": "1.8.51",
"ext_port": 1111,
"profiles": {
"mcopy": {

View File

@ -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
1 0 0 0
2 1 1 0
3 2 0 0
4 3 0 0
5 4 0 0
6 5 0 0
7 6 0 2
8 7 0 0
9 8 0 0
10 9 2 0
11 10 0 0
12 11 0 0
13 12 0 0
14 13 13 0
15 14 51 0
16 15 60 0
17 16 198 0
18 17 354 0
19 18 276 0
20 19 300 0
21 20 155 0
22 21 492 0
23 22 497 0
24 23 47 0
25 24 118 0
26 25 9 0
27 26 29 0
28 27 3 0
29 28 2 0
30 29 0 0
31 30 0 0
32 31 0 0
33 32 0 0
34 33 0 0
35 34 0 0
36 35 0 0
37 36 0 0
38 37 0 0
39 38 0 0
40 39 0 1
41 40 0 0
42 41 0 0
43 42 0 0
44 43 0 0
45 44 0 0
46 45 0 0
47 46 0 0
48 47 0 0
49 48 0 0
50 49 0 0
51 50 0 0
52 51 0 0
53 52 0 0
54 53 0 0
55 54 0 0
56 55 0 0
57 56 0 0
58 57 0 0
59 58 0 0
60 59 0 0
61 60 0 0
62 61 0 0
63 62 0 0
64 63 0 0
65 64 0 0
66 65 0 0
67 66 0 0
68 67 0 0
69 68 0 0
70 69 0 0
71 70 0 0
72 71 0 0
73 72 0 0
74 73 0 0
75 74 0 0
76 75 0 0
77 76 0 0
78 77 0 0
79 78 0 0
80 79 0 0
81 80 0 0
82 81 0 0
83 82 2 0
84 83 0 0
85 84 0 0
86 85 1 0
87 86 0 0
88 87 0 0
89 88 0 0
90 89 0 0
91 90 0 0
92 91 0 0
93 92 0 0
94 93 0 2
95 94 0 0
96 95 0 0
97 96 0 0
98 97 0 0
99 98 0 0
100 99 0 0
101 100 0 0
102 101 0 0
103 102 0 0
104 103 0 0
105 104 0 0
106 105 0 0
107 106 0 0
108 107 0 1
109 108 0 0
110 109 0 0
111 110 0 0
112 111 0 0
113 112 0 0
114 113 0 0
115 114 0 0
116 115 0 0
117 116 0 0
118 117 0 0
119 118 0 0
120 119 0 0
121 120 0 0
122 121 0 0
123 122 0 0
124 123 0 1
125 124 0 0
126 125 1 0
127 126 0 0
128 127 0 0
129 128 0 0
130 129 0 0
131 130 0 0
132 131 0 0
133 132 0 0
134 133 0 0
135 134 0 0
136 135 0 1
137 136 0 0
138 137 0 0
139 138 0 0
140 139 0 0
141 140 0 0
142 141 0 0
143 142 0 0
144 143 0 0
145 144 0 0
146 145 0 0
147 146 0 0
148 147 0 0
149 148 0 0
150 149 0 0
151 150 0 0
152 151 0 0
153 152 0 0
154 153 0 0
155 154 0 0
156 155 0 0
157 156 0 0
158 157 1 0
159 158 1 0
160 159 0 0
161 160 0 0
162 161 0 0
163 162 0 0
164 163 0 0
165 164 0 0
166 165 0 1
167 166 0 0
168 167 0 0
169 168 0 0
170 169 0 0
171 170 0 0
172 171 0 2
173 172 0 1
174 173 0 0
175 174 0 0
176 175 0 0
177 176 0 0
178 177 0 0
179 178 0 0
180 179 0 0
181 180 0 0
182 181 0 0
183 182 0 4
184 183 0 87
185 184 0 360
186 185 0 903
187 186 0 262
188 187 0 92
189 188 0 122
190 189 0 180
191 190 0 198
192 191 0 157
193 192 0 72
194 193 0 36
195 194 0 8
196 195 0 1
197 196 0 0
198 197 0 0
199 198 0 0
200 199 0 0

View File

@ -0,0 +1,206 @@
#include <AccelStepper.h>
#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();
}
}
*/
}

4
package-lock.json generated
View File

@ -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",

View File

@ -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": {

View File

@ -1,5 +1,5 @@
{
"version": "1.8.50",
"version": "1.8.51",
"ext_port": 1111,
"profiles": {
"mcopy": {