16mm framviser
- By rasmus
- In Arduino Elektronikk Mekanikk
- With No Comments
- On 1 feb | '2019
Ombygg av 16mm-framviser for digitalisering av film for Kunsthøyskolen i Oslo.
Tok ut motor og all elektronikk. satte inn ny motor, powersupply og styringselektronikk for å kunne regulere hastighet og sende triggersignaler for hver frame til kameraet.
Brukte en Teensy 3.2 til styringen.
Video som viser framviseren i drift etter ombygging.
Kode
// --- Alfredo ---
// Filmframviser - motordriver og trigger
// 2019 - Rasmus Hildonen - Werket.com
// Biblioteker
include <Arduino.h>
include <U8g2lib.h>
include <Wire.h>
// Variabler
int gaffel = 0;
int hastighet = 0;
int justering = 0;
int motorprosent = 0;
int delayMs = 0;
long delayTrigger = 0;
unsigned long naaTrigger = 0;
//Defineringer av porter
define MOTOR 3
define SENSOR 5
define MOTORPOT A0
define DELAYPOT A1
define UTEN 22
define UTTO 23
define LED 13
// Skjerm
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=/ SCL, / data=/ SDA, / reset=/ U8X8_PIN_NONE); uint8_t z = 127; // start value uint32_t lcg_rnd(void) { z = (uint8_t)((uint16_t)65(uint16_t)z + (uint16_t)17);
return (uint32_t)z;
}
void setup() {
analogWriteResolution(10); //sette PWM oppløsnig til 0-1023
pinMode(MOTOR, OUTPUT);
pinMode(SENSOR, INPUT);
pinMode(UTEN, OUTPUT);
pinMode(UTTO, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(MOTORPOT, INPUT);
pinMode(DELAYPOT, INPUT);
attachInterrupt(digitalPinToInterrupt(SENSOR), pulsUt, RISING);
analogWriteFrequency(MOTOR, 100);
u8g2.begin();
bootSkjerm();
}
void loop() {
hastighet = (1024 - analogRead(MOTORPOT));
if(hastighet < 5){hastighet = 0;}
justering = (1024 - analogRead(DELAYPOT));
delayMs = map(justering, 0, 1024, 0, 10);
if(hastighet < 5){pauseSkjerm();}
else{skrivSkjerm();}
analogWrite(MOTOR, hastighet);
}
void pulsUt(){
delay(delayMs);
digitalWrite(UTEN,HIGH);
digitalWrite(UTTO,HIGH);
digitalWrite(LED,HIGH);
delay(2);
digitalWrite(UTEN,LOW);
digitalWrite(UTTO,LOW);
digitalWrite(LED,LOW);
}
void skrivSkjerm() {
motorprosent = map(hastighet, 0, 1024, 0, 100);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.setCursor(0,12);
u8g2.print("16mm - Digitize");
u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.setCursor(0,37);
u8g2.print("Motor: ");
u8g2.print(motorprosent);
u8g2.print("%");
u8g2.setCursor(0,60);
u8g2.print("Delay: ");
u8g2.print(delayMs);
u8g2.print("mS");
u8g2.sendBuffer();
}
void bootSkjerm() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.setCursor(0,12);
u8g2.print("16mm - Digitize");
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.setCursor(0,35);
u8g2.print("Made by:");
u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.setCursor(0,60);
u8g2.print("Werket.com");
u8g2.sendBuffer();
delay(5000);
}
void pauseSkjerm() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.setCursor(25,12);
u8g2.print("Alfredo");
u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.setCursor(50,35);
u8g2.print("is");
u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.setCursor(22,60);
u8g2.print("Sleeping");
u8g2.sendBuffer();
}