Добавляем панорамирование к Timelapse.
Хочется веб-камерой и побольше пространства охватить, и в деталях не потерять? Тогда решением может стать панорамирование в автоматическом режиме.
Однако панорамирование в сочетании с Timalpse да еще и с не самым коротким фокусным расстоянием - не такая простая задача как кажется на первый взгляд. Нужно панорамирующее устройство способное поворачиваться очень медленно и очень плавно. В некоторых случаях также желательно иметь возможность программного управления с компьютера. В моем случае требуется панорамировать днем, а в темное время сток лучше, если камера будет стоять неподвижно.
Короче, мне такую панорамирующую головку за разумные деньги найти не удалось. Чтож, мы не из ленивых и безруких - сделаем сами.
Дальше все зависит от наличия подходящих деталей и оборудования/инструмента. Так вышло, что я в результате сделал аж три разнотипных панорамных устройства, которые здесь и опишу.
Конструкция №1 - винт с гайкой.
Самая простая конструкция с точки зрения необходимых компонентов и их доступности. Весь механизм состоит из шпильки М5, гайки и сервомотора с достаточной редукцией. Управление осуществляется парой концевых выключателей, реле и потенциометра для регулировки скорости.Главный недостаток - то, что панорамирование возможно только на угол около 30 град. И еще конструкция получается довольно громоздкой.
Конструкция №2 - шестеренчатый редуктор.
Этот механизм сейчас используется для панорамирования строгинкой камеры.
# Скрипт управления Ардуино с компьютера.
echo Скрипт управления Ардуино.
#активируем порт для связи с arduino
for port in /dev/ttyUSB[0-9]
do
#stty -F $port cs8 9600
stty -F $port cs8 9600 ignbrk igncr -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl
break
done
echo activated port ok $port
echo $(date +"%d-%m-%Y %H %M -- старт - arduino_control.sh -$port") >> ~/script/arduino.log
while :
do
{
#Решаем стоит ли делать панорамирование
t=$(date +%k%M)
echo "текущее время $t"
if [ "$t" -ge 1030 ] && [ "$t" -le 1730 ];
then echo -n 'I' > $port ; echo "$port панорамируем"
else echo -n 'X' > $port ; echo "$port стоим неподвижно"
fi
sleep 110
}
done
Программка для Ардуино:
char val; int i,j,x1;
void setup() {
Serial.begin(9600);
val='X'; // по умолчанию стоим после запуска
pinMode(5, OUTPUT);//dir
pinMode(6, OUTPUT);//step
pinMode(7, OUTPUT);// sleep
pinMode(13, OUTPUT);//red light when running
digitalWrite(5,HIGH);
digitalWrite(7,HIGH);
digitalWrite(13,HIGH);
//ставим в исходную позицию
x1=analogRead(A6);
if (x1<960) {
for(i=0;i<4000;i++) {
digitalWrite(6,HIGH);
digitalWrite(6,LOW);
delay(10);
x1=analogRead(A6);
if(x1>970) break;}
}
}
void loop() {
for(j=0; j<2; j=(j++)%2) { // чередуем движение вправо и влево
//если был сигнал на останов - стоим и ждем сигнала на продолжение работы
if (val == 'X') {
digitalWrite(13, LOW); //гасим лампочку
digitalWrite(7, LOW); // дезактивируем драйвер
while((val != 'I')&&(j==0)){delay(1000); while (Serial.available() > 0) {val = Serial.read(); }}}
//если последний поступил сигнал на продолжение работы - работаем
digitalWrite(13, HIGH);//зажигаем красную лампочку
digitalWrite(7, HIGH);//активируем драйвер
delay(5);//задержка на активацию драйвера
if(j==1) digitalWrite(5, HIGH); else digitalWrite(5,LOW); //задаем направление вращения
// начинаем движение
for(i=0;i<4000;i++) {
digitalWrite(6,HIGH);
digitalWrite(6,LOW);
delay(150); //сделали один шаг и подождали заданный интервал времени.
// читаем команду с компьютера
while (Serial.available() > 0) {val = Serial.read();}
//считываем положение с потенциометра,
//и если вышло за диапазон заданных значений разрываем цикл.
x1=analogRead(A6);
if((x1>970)&&(j==1)||(x1<770)&&(j==0))break;
}
}
}
Конструкция №3 - червячный редуктор.
Очень плавный механизм, состоит из большой шестерни от лзерного принтера и шпиьки М8.