Фотокубики 2012

Управление двигателями и спуск затвора камеры Casio

В данную часть сериала входит краткое описание автоматизированной системы проектирования электроники Fritzing, модуль управления биполярными шаговыми двигателями на двух микросхемах L298 и программное обеспечение для него, программа управления камерой Casio QV-4000.

Проект Fritzing

Две микросхемы можно соединить проводами на макетной плате, и не вычерчивая предварительно принципиальную и монтажную схемы. Но если на одной макетной плате планируется собрать несколько модулей и особенно если в дальнейшем проект планируется повторять, то наличие читаемой внятной схемы становится крайне желательным. Основная задача технической документации - это дать возможность воспроизвести устройство, руководствуясь ей. Этой задачи служит и стандартизация документации. Документ, составленный строго в соответствии с ГОСТами, позволяет собрать устройство через много лет и даже в том случае, когда этим занимаются люди, не работавшие ранее с данным типом устройств. Однако этот метод не всегда является самым наглядным и удобным в случае, когда информация предназначена для тех, кто в теме. Можно провести аналогию между академическим языком и техническим жаргоном. Устройства на базе конструктора Arduino оперируют более крупными блоками, чем отдельная микросхема, и при сборке часто бывает полезнее знать номер на плате, а не не соответствующий номер ножки микросхемы. Проект Fritzing - это попытка создать автоматизированную систему проектирования электроники, заточенную именно под различные конструкторы на базе микроконтролеров. Программа позволяет расположить элементы на макетных платах нескольких типов, вычертить принципиальную схему и развести дорожки по двухслойной печатной плате. Проект стартовал в 2008 году. Текущая версия программы 0.7.10b(eta) опубликована 16 октября 2012 года под лицензией GNU GPL v3. С сайта проекта можно скачать исходный код и версии для Windows, Mac OS X 10.5, Linux (64-bit), Linux (32-bit).

фото
Некоторые макетные платы, доступные в проекте.

фото
Так выглядит простейшая схема в режиме просмотра Макетная плата.

Для многих элементов можно менять такие параметры, как количество ножек и способ монтажа. Для сопротивлений можно задать номинал, причем в режиме просмотра будет показана правильная маркировка цветными кольцами.

фото
А так выглядит та же схема в режиме просмотра Принципиальная схема.

фото
А так в режиме просмотра Печатная плата.

Есть возможность автоматической и ручной трассировки. В меню доступен ряд специфических элементов, применяемых исключительно при проектировке печатной платы.

В программе есть и простенький редактор для создания собственных элементов или модернизации уже имеющихся. При создании собственных элементов предлагается брать за основу элемент Mystery Part. В этом элементе можно изменять число контактов. Для редактирования изображений нужен внешний редактор для файлов в формате SVG.

фото
В этом окне можно приписать соединения отдельным элементам рисунка, демонстрируемого в режиме Макетная плата.

фото
Аналогичная операция для принципиальной схемы.

фото
И для печатной платы.

фото
В этом окне можно отредактировать свойства элемента.

фото
А это окно позволяет менять число и тип контактов.

Модуль управления двигателями

L298 представляет из себя четыре полумоста, объединённые по-два сигналами разрешения работы. Популярное описание принципов работы этой микросхемы можно найти здесь. Чтобы полностью использовать потенциальные возможности микросхемы, придется задействовать 6 цифровых выходов и два аналоговых входа платы микроконтроллера. Это очень расточительно, и обычно используются дополнительные логические микросхемы и связь через последовательный порт с микроконтроллером. Но выбранная мной для этой установки плата Seeeduino Mega имеет избыточное для этой задачи количество портов, да и все возможности L298 я использовать не планировал, поэтому пошел по пути максимального упрощения схемы и минимизации числа используемых деталей. Поскольку у микросхемы есть запас по току для моих двигателей, то мерить его я не собираюсь и замыкаю ножки SENA и SENB не через сопротивление, а прямо на землю. Естественно, аналоговые входы в этом случае тоже не используются. Используемая мной батарея питания не потянет одновременную работу двух двигателей, поэтому входы IN1-IN4 обеих микросхем подключаются параллельно. Я собираюсь использовать одновременно обе обмотки двигателя, поэтому соединяю входы разрешения работы (ENABLE), обозначенные на схеме как ENA и ENB. Таким образом, для управления двумя двигателями будет задействовано 6 цифровых выходов. Два для выбора двигателя и 4 для управления. Т.е. можно было бы обойтись и Freeduino Nano v5. Но с точки зрения простоты реализации у Seeeduino Mega есть несколько плюсов: три дополнительных аппаратных последовательных порта, что позволяет легко реализовать одновременную работу по связи с компьютером, связи по Bluetooth и управление камерой Casio. Кроме того, есть переключатель напряжения логики в режим 3 В, что позволяет упростить схему подключения модуля Bluetooth.

Ниже приведены фотографии получившейся установки.

фото
Вид установки целиком.

фото
Только электронная часть в собранном состоянии.

фото
Электронная часть в полуразобранном состоянии.

А так выглядит наглядное описание установки, подготовленное программой Fritzing.

фото

А так программа Fritzing позволяет подготовить принципиальную схему в классическом виде.

фото

И, наконец, печатная плата. Схема приведена исключительно для демонстрации возможностей программы Fritzing. Я ее не проверял и не использовал.

фото

Целиком проект, подготовленный в Fritzing, можно скачать здесь.

Программа управления двигателями

Програмирование осуществлялось в среде Arduino IDE 1.0.1. Новая версия отличается наличием русского интерфейса и заменой расширения файлов проекта с «pde» на «ino». Изменения также коснулись библиотек и синтаксиса некоторых команд, поэтому старые проекты, возможно, придется править. С Java Runtime Environment или Java Development Kit версии 1.7 Arduino IDE 1.0.1 у меня работала крайне криво. Некоторые важные пункты меню типа «Сервис/Плата» были недоступны. С версией 1.6 все работает прекрасно.

Для поворота двигателя на один шаг используется следующая простая подпрограмма:

void Faza() {
   byte fazaA[] = {HIGH, HIGH, LOW, LOW};
   byte fazaB[] = {LOW, LOW, HIGH, HIGH};
   byte fazaC[] = {LOW, HIGH, HIGH, LOW};
   byte fazaD[] = {HIGH, LOW, LOW, HIGH};
   int faz;
   if (enable == enable1)
   {
 faz1 = faz1 + napr;
 if (faz1 > 3)
 {faz1 = 0;}
 else if (faz1 < 0)
 {faz1 = 3;}
 faz = faz1; 
 }
 else
 {
 faz2 = faz2 + napr;
 if (faz2 > 3)
 {faz2 = 0;}
 else if (faz2 < 0)
 {faz2 = 3;}
 faz = faz2; 
 }
 digitalWrite(enable, HIGH);
 digitalWrite(inp1, fazaA[faz]);
 digitalWrite(inp2, fazaB[faz]);
 digitalWrite(inp3, fazaC[faz]);
 digitalWrite(inp4, fazaD[faz]); 
 delay(dt1);
 digitalWrite(enable, LOW);
 }

Подпрограмма поворота по часовой стрелке на заданный угол будет выглядеть так:

void fq(byte flag, byte numOfValues)//Поворот по часовой стрелке в 
   {
 int fq = meetAndroid.getInt();
 mstepxd =  35*fq/9;
 napr = 1;
 enable = enable1;
 for (int i=0; i <= mstepxd; i++)
 { 
 mstepx = mstepx + napr;
 Faza();
 }
 SendUgolG();//Передаем данные об горизонтальном угле телефону
   }

где переменная fq - полученный от телефона угол поворота, а переменная enable определяет, какой двигатель используется.

фото

Как видно из приведенного снимка экрана, на всю программу было задействовано около 10% доступной памяти. Всю программу можно скачать здесь. Управление через Bluetooth полностью аналогично описанному в статье Управление съемкой с помощью телефона. Для работы программы необходима библиотека MeetAndroid версии от 8 декабря 2011 года, причем в файле MeetAndroid.cpp надо заменить Serial на Serial1. В программе сохранен модуль управления камерой Sony NEX по ИК каналу. Сигнал о спуске затвора подается одновременно на все подключенные камеры.

Программа управления камерой Casio

Управляющие команды взяты с сайта www.dicasoft.de. Собственно программный код предельно прост. Отправляем два однобайтных кода: один для начала операции, другой для завершения. Без кода завершения камера будет не готова к приему следующей команды. В случае управления изменением фокусного расстояния интервал между командами определяет величину изменения фокусного расстояния.

Подпрограмма спуска затвора:

void Zatvor() 
   {
 digitalWrite(13, HIGH);//Индикация паузы светодиодом на плате
 delay(wp);// Пауза перед спуском затвора 
 digitalWrite(13, LOW); 
 byte inByte = 66;
 Serial2.write(inByte);
 delay(15);
 inByte = 98;
 Serial2.write(inByte);
 digitalWrite(13, HIGH);
 delay(wzat); // Время нажатия кнопки затвора
 digitalWrite(13, LOW); 
 } 

Подпрограмма увеличения фокусного расстояния:

void fz(byte flag, byte numOfValues)//Зум T
 {
 int fw = meetAndroid.getInt();
   digitalWrite(13, HIGH);
   byte inByte = 68;
   Serial2.write(inByte);
   delay(fw);
   inByte = 100;
   Serial2.write(inByte);
   digitalWrite(13, LOW);
   }

Подпрограмма уменьшения фокусного расстояния:

void fw(byte flag, byte numOfValues)//Зум W
 {
 int fw = meetAndroid.getInt();
   digitalWrite(13, HIGH);
   byte inByte = 67;
   Serial2.write(inByte);
   delay(fw);
   inByte = 99;
   Serial2.write(inByte);
   digitalWrite(13, LOW);
   }

В следующих сериях будут рассмотрены управляющие программы для телефона.

14.11.2012
Установите проигрыватель Flash

Облако тегов:
3D печать
Arduino
Raspberry Pi
Аэрофотосъемка
Байдарки
Геомеханика
История
Камеры
Макросъемка
Объективы
Освещение
Панорамы
Принадлежности
Принтеры
Программы
Сканеры
Стереосъемка
Фильтры
Фокусировка
Фотокубики
...
rss