Random Notes 4

Optics_Glue


https://www.optical-cement.com/cements/manual/manual.html

Seperating: https://www.norlandprod.com/techrpts/separating.html

“The simplest method for separating a lens bonded with Norland Optical Adhesive is to immerse the lens in a solvent combination made up of the following: methylene chloride, 100 parts by weight -methanol, 15 parts – concentrated ammonia (26 Baumé or 29% NH ), 2 parts. The methylene chloride is the active solvent and the other solvents increase its activity.The simplest method for separating a lens bonded with Norland Optical Adhesive is to immerse the lens in a solvent combination made up of the following: methylene chloride, 100 parts by weight -methanol, 15 parts – concentrated ammonia (26 Baumé or 29% NH ), 2 parts. The methylene chloride is the active solvent and the other solvents increase its activity.”

http://jimshomeplanet.com/lensglue.html

SMC Valves

PX-045A Printhead

DC Values (prior to printing)

1

2

3 Using as GND reference

4 2.59V DC

5 3.3V DC

6 3.3V DC

7 0V DC

8 0V DC

9 3.3V DC

10 0V

11 NC

12 0V

13 0V

14 0V

15 0V

16 0V

17 0V

18 0V

19

20

21

During print

1

2 0V

3 Using as GND reference

4 Goes to 3.3v sometimes during print for long (100 to 200ms+ periods)

5 3.3V DC

6 3.3V DC

7 0V DC

8 500ns/3.3v ~every 20us

9 3.3V DC

10 500ns/3.3v

11 NC

12 0V (some ripple)

13 ~84ns/3.3v. Looks like data clk.

14 0V

15 84ns/3.3v Looks like data.

16 0V

17 84ns/3.3v Looks like data.

18 0V

19 Looks like 43v (>30v)

20

21 0V

Pin 4 during print:

1,20 Connected

2,3,7,11,12,14,16,18,21 Connected

5,9 Connected (likely 3.3)

Pin 4 seems up be pulled up to 3.3v on controller. (4.7K pullup)

Random Notes 3

Maxon DC Motor 139885

https://uk.rs-online.com/web/p/gearboxes/4450184/

https://www.ebay.co.uk/itm/Maxon-139885-Mini-Coreless-Gear-Servo-Motor-DC-12V-Strong-Magnetic-for-Robot-/282288860535?clk_rvr_id=1509908084864&rmvSB=true

Combination of Maxon DC Motor :118426 & Maxon Planetary Gear : 110315 (67:1)

SIZE : DIAMETER BODY : 13 MM
           DIAMETER SHAFT : 3 MM
           TOTAL LENGTH : 55 MM
1.2 Volt = 18 Rpm , 1.5 Volt = 24 Rpm , 1.8 Volt = 29 Rpm , 2.4 Volt = 40 Rpm, 3.0Volt = 52 Rpm , .3.6 Volt = 64 Rpm,
4.8 Volt = 88Rpm, 6.0 Volt = 113 Rpm, 7.2 Volt = 137 Rpm , 10.0 Volt = 193 Rpm , 12.0 Volt = 233 Rpm

Random Notes 2

Hiseq 2000 TDI

Serial number from one module: C10000-515, 661675.

aslver.exe dump from my cameras:

1: AS-PHX-D48CL-PE1
Grabber HW Version    9.10.00
Grabber SW Version    5.58.24
Library FW Version    9.10.00
Grabber Connection    PCIe x1
Camera Connected    Unknown
Camera Name    C10000-515
Camera S/N    S/N: 661694
Camera Version    INF 2.01-F20-R02

1x PCIe card appears to work. 4x PCIe doesn’t show up on aslver.exe as yet.

Trigger was plugged into SMA port on board, driven by function generator 5V input.

Cameralink cable plugged into top port (furthest from motherboard) on the PCIe cameralink acquisition board.

HP C6602


http://nicholasclewis.com/projects/inkshield/

LinearCCDs


https://oceanoptics.com/wp-content/uploads/SONY-ILX511A.pdf

http://www.advancedmems.com/pdf/AMEMS_LineSensorArraySummary_v1.pdf

S11639 CMOS made by Hamamatsu

ILX511:

LSH6008-CA10A

Same as in Epson printers?

Stuff from, https://twitter.com/steubens7/status/1179848585636126720

nope, this little shoulder is the black level / zero value, iirc there was another 3 volts or so before saturation.

top trace is analog output, second trace is the trigger, bottom trace is the clock that cycles samples out after trigger, the short pulses on the trigger line were sample every 32 elements in the scan head or something:
https://gist.github.com/ohsix/4f518a2080dc913f880273fc80e04f52

#include <Arduino.h>
#include <ports.h>
#include <base.h>
#include <DirectIO.h>
#include <Adafruit_NeoPixel.h>
#include <TimerOne.h>
#define CLKPIN TIMER1_A_PIN
#define TRGPIN 4
#define DEBUGPIN 6
#define FIRSTFIELD 7
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
Output<TRGPIN> trg;
Output<CLKPIN> clk;
Output<6> dbg;
Output<FIRSTFIELD> ff;
#define NUMPIXELS 8
#define NEO_PIN 8
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, NEO_PIN, NEO_RGB + NEO_KHZ800);
const uint8_t PROGMEM gamma8[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5,
5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10,
10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 };
void setup() {
analogReference(EXTERNAL);
pinMode(CLKPIN, OUTPUT);
//pinMode(DEBUGPIN, OUTPUT);
Timer1.initialize(1); // ~1mhz
Timer1.pwm(CLKPIN, 512); // 50% duty cycle
Timer1.stop();
pinMode(TRGPIN, OUTPUT);
pinMode(A0, INPUT);
pinMode(ledToPin(0), OUTPUT);
pinMode(ledToPin(1), OUTPUT);
pinMode(ledToPin(2), OUTPUT);
Serial.begin(115200);
cbi(ADCSRA, ADPS0);
cbi(ADCSRA, ADPS1);
cbi(ADCSRA, ADPS2);
sbi(ADCSRA, ADPS1);
// Serial.print("prescaler = ");
// Serial.println(ADCSRA & 0xE0);
pixels.begin();
}
int avgRead(int port, int samples)
{
int i;
long reading = 0;
for(i = 0; i < samples; i++)
{
reading += analogRead(port);
}
reading /= samples;
return reading;
}
void clockCycle(int pin, int count)
{
while(count–)
{
digitalWrite(pin, HIGH);
digitalWrite(pin, LOW);
}
}
int ledToPin(int color)
{
switch(color)
{
case 0: // red
return 2;
break;
case 1: // green
return 3;
break;
case 2: // blue
return 5;
break;
}
}
void ledOn(int color)
{
digitalWrite(ledToPin(color), LOW);
}
void ledOff(int color)
{
digitalWrite(ledToPin(color), HIGH);
}
void ledsOn()
{
for(int i = 0; i <= 2; i++)
ledOn(i);
}
void ledsOff()
{
for(int i = 0; i <= 2; i++)
ledOff(i);
}
// returns n samples from start of readback to end of readback
void readLine(byte* output, int samples)
{
int zeroLevel;
int blackLevel;
int clocks;
int i;
int samplePos = 2593 / samples;
int currSample = 0;
shiftOut(TRGPIN, CLKPIN, MSBFIRST, 0xF0); // trigger pulse and slow clock
// lock step through front porch with slow clock in order to capture reference levels without unpredictable jitter
clockCycle(CLKPIN, 4);
// sample black level
for(i=0; i < 3; i++)
{
clocks=5; while(clocks–)
{
clk=1;
clk=0;
}
blackLevel += avgRead(A0, 3);
}
blackLevel /= 3;
// Serial.print("blackLevel = ");
// Serial.println(blackLevel);
// 65 more clock cycles until analog goodies
clocks = 65; while(clocks–)
{
clk=1;
clk=0;
}
#define ANALOG_CLOCKS (12 * 216 + 1)
int stepSpacing = ANALOG_CLOCKS / samples;
int nextSample = 0;
// go through analog bins
for(i = 0; i < 12 * 216 + 1; i++)
{
clk = 1;
if(nextSample– == 0)
{
dbg=1;
nextSample = stepSpacing;
// output[currSample++] = map(avgRead(A0, 5), blackLevel, 1024, 0, 255);
output[currSample++] = map(analogRead(A0), blackLevel, 1024, 0, 255);
dbg=0;
}
clk = 0;
}
#if 0
for(i = 0; i < 2593; i++)
{
clk =1;
clk =0;
}
#endif
}
void loop() {
int led = 0;
byte samples[64];
byte redSamples[NUMPIXELS];
byte greenSamples[NUMPIXELS];
byte blueSamples[NUMPIXELS];
int i;
ff=1;
ff=0;
#if 1
ledOn(0);
readLine(redSamples, NUMPIXELS);
ledsOff();
ledOn(1);
readLine(greenSamples, NUMPIXELS);
ledsOff();
ledOn(2);
readLine(blueSamples, NUMPIXELS);
ledsOff();
#endif
#if 0
for(led = 0; led < 0; led++){
ledOn(led);
readLine(samples, 4);
ledOff(led);
}
ledsOff();
#endif
for(i = 0; i < NUMPIXELS; i++)
{
#if 0
Serial.print("sample[");
Serial.print(i);
Serial.println("] = ");
Serial.print("red ");
Serial.println(redSamples[i]);
Serial.print("green ");
Serial.println(greenSamples[i]);
Serial.print("blue ");
Serial.println(blueSamples[i]);
#endif
pixels.setPixelColor(i, pixels.Color(pgm_read_byte(&gamma8[greenSamples[i]]), pgm_read_byte(&gamma8[redSamples[i]]), pgm_read_byte(&gamma8[blueSamples[i]])));
// pixels.setPixelColor(i, pixels.Color(0, 0, 0));
// pixels.setPixelColor(i, pixels.Color(redSamples[i], greenSamples[i], blueSamples[i]));
// pixels.setPixelColor(i, pixels.Color(pgm_read_byte(&gamma8[redSamples[i]]), pgm_read_byte(&gamma8[greenSamples[i]]), pgm_read_byte(&gamma8[blueSamples[i]])));
// pixels.setPixelColor(i, pixels.Color(pgm_read_byte(&gamma8[redSamples[i]]), pgm_read_byte(&gamma8[redSamples[i]]), pgm_read_byte(&gamma8[redSamples[i]])));
pixels.show(); // This sends the updated pixel color to the hardware.
}
// delay(100);
//delayMicroseconds(100);
}
void old_loop() {
int bin;
int i;
int samples[12];
int clocks;
int zeroLevel;
int blackLevel;
static int led=0;
//shiftOut(TRGPIN, CLKPIN, MSBFIRST, 0);
dbg=1;
zeroLevel = avgRead(A0, 5);
// zeroLevel = analogRead(A0);
dbg=0;
dbg=1;
shiftOut(TRGPIN, CLKPIN, MSBFIRST, 0xF0); // trigger pulse and slow clock
dbg=0;
// lock step through front porch with slow clock in order to capture reference levels without unpredictable jitter
dbg=1;
clockCycle(CLKPIN, 4);
dbg=0;
dbg=1;
for(i=0; i < 3; i++)
{
clocks=5; while(clocks–)
{
clk=1;
clk=0;
}
blackLevel += avgRead(A0, 3);
}
blackLevel /= 4;
// Serial.print("blackLevel = ");
// Serial.println(blackLevel);
dbg=0;
if(led == 0){
ff = 1;
ff = 0;
}
ledOn(led);
//ledsOn();
dbg=1;
clocks = 40; while(clocks–)
{
clk=1;
clk=0;
}
dbg=0;
for(i = 0; i < 350*8; i++)
{
clk =1;
clk =0;
}
dbg =1;
dbg=0;
// Timer1.pwm(CLKPIN, 512); // fast clock
/* dbg=1;
for(i = 0; i < 300; i++)
{
samples[i] = analogRead(A0);
//delayMicroseconds(2000);
}
dbg=0;
*/
// sample front porch reference level 2 clocks later, for 80 hs clocks
// sample bins 83 clocks after fast start
// bins seem to be 215 clocks wide, 12 bins, 1 clock per pixel
//delayMicroseconds(1);
#if 0
dbg=1;
noInterrupts();
while(analogRead(A0) -5 < zeroLevel)
;
interrupts();
// wait for voltage to increase to follow clock jitter
dbg=0;
#endif
dbg = 1;
blackLevel = avgRead(A0, 5);
// blackLevel = analogRead(A0);
dbg = 0;
#if 0
noInterrupts();
while(analogRead(A0) -10< blackLevel)
{
dbg=1;
delayMicroseconds(0);
dbg=0;
}
;
interrupts();
#endif
dbg = 1;
delayMicroseconds(1);
dbg = 0;
/*
delayMicroseconds(100);
dbg=1;
bin= analogRead(A0);
dbg=0;
*/
// delayMicroseconds(2670);
Timer1.stop();
digitalWrite(CLKPIN, LOW);
/*
Serial.print("zeroLevel = ");
Serial.println(zeroLevel);
Serial.print("blackLevel = ");
Serial.println(blackLevel);
/* Serial.print("bin = ");
Serial.println(bin);
*/
//delay(50);
#if 1
ledOff(led);
// switch LED
if(++led > 2)
led = 0;
#endif
//ledsOff();
// Serial.println(led);
// Serial.print("normalized = ");
// Serial.println(map(bin – blackLevel, zeroLevel, 1024, 0, 255));
//delay(10); // inter line delay
delayMicroseconds(100);
}
view raw sketch hosted with ❤ by GitHub
the scan head expects a trigger, then a clock, analog values come out on one of the pins during the clocking
the first few elements are from dark elements so you can use them as a reference
sketch reads the 3 full color fields and renders them on a ws2812b strip
these are supposed to be in close contact with paper or something, but it works ok to about 4 inches (can resolve space between fingers)
view raw what hosted with ❤ by GitHub


Magnetic Tape

DLT IV Fujifilm: ~10um.
3490E: 18um.