Фотокубики-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 цифровых выходов: 2 для выбора двигателя и 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); }

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




30 ноября 2012 Г.

-2012. Casio

-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 : 2 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);
   }

.