STM32 + Ubuntu + Eclipse

План следующий:

  1. поставить  ide
  2. прикрутить компилятор
  3. прикрутить прошиватор
  4. прошиться, увидеть дебаг
  5. prfit

ставим эклипс

  1. нужно скачать с сайта: http://www.eclipse.org/downloads/packages/release/Luna/SR2  подругому никак, здесь  http://help.ubuntu.ru/wiki/eclipse написано, что Ubuntu в свои паки по умолчанию поддрживает версию 3.8. нужна >4.
  2. после установки распаковываем. в папке запускаем терминал и ./eclipse – должен запуститься эклипс.
  3. если возникают ошибки с Java  то нужно установить эклипс стандартным методом потом снести и будет счастье.
    1. поставить gdb
    2. поставить gnu
  4. скачасть arm-none-eabi-gcc
  5. sudo apt-get install git
    1. git clone git://github.com/texane/stlink.git
    2. sudo apt-get install libusb-1.0-0-dev pkg-config autotools-dev dh-autoreconf
    3. скомпилировать

 

 

 

часть взято отсюда: http://we.easyelectronics.ru/CADSoft/ubuntu-eclipse-code-sourcery-openocd-j-link-arm-ili-bystryy-start-dlya-somnevayuschihsya.html

Small Basic EV3 с чего начать

Прежде всего необходимо поставить все необходимое на свой ПК:

  • Скачать установщик Small Basic https://www.microsoft.com/en-us/download/confirmation.aspx?id=46392 (7 мб)
  • Установить. Никаких сложностей с установкой не будет, просто жмем далее пока не поставится.
  • Скачать расширение EV3 для Small Basic https://github.com/c0pperdragon/EV3Basic/releases. Кроме самого дополнения следует скачать еще и пак примеров.
  • Теперь в папке C:\Program Files (x86)\Microsoft\Small Basic у вас есть программа которую можно запустить и проверить на работоспособность.
  • Проверить что все поставилось довольно таки легко. создайте новый файл и начните писать в нем “Motor“. Программа сама подскажет вам определение этого класса и доступные функции. Это и будет значить что библиотека встала нормально.

  • Среда программирования сама по себе довольно дружелюбная и даже допускает копирование ее на другой ПК без установки.

 

MyRIO Hello world

Первый запуск myRIO.

Вся необходимая инфа есть на следующей тсраничке: http://www.ni.com/product-documentation/14603/en/.

Если подробнее, то на той же самой страничке есть ссылка на установщик всего необходимого для работы с устройством. http://www.ni.com/download/ni-myrio-software–2015/5727/en/

Нужно установить хотя бы базовый комплект. Приготовьтесь – это 5.5 ГБ. Но никаких граблей не выявил.

Get Started

После установки можно подключать устройство к ПК. Он найдет драйвер и попросит зарегистрировать устройство и привязать к учетной записи.

Первое что нужно сделать далее – это обновить прошивку. Он сам предложит это сделать сам. Ждем. И после установки запускаем программу Launch Getting Started Wizzard. Появится следующее окошко:

В нем в активном режиме будут ворочаться показания акселерометра с возможностью помигать светодиодиками.

Теперь сделаем свой первый проект.

Hello World!

Жмем на Go To LabVIEW и создаем простой проект myRIO. Появляется следующее окно:

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

Добавим отображение состояния кнопки button0.  Переходим обратно в фронтовую панель (это где серая панель в клеточку). Находим раздел Silver:

Выносим индикатор в рабочую область.

Переходим обратно в заднюю панель. И находим Кнопку в закладке myRIO.

Нужно создать следующую конструкцию:

Все. мы связали логический выход кнопки с индикатором на панели. можем запускать:

В качестве задания:

Попробовать связать выключатель на панели и светодиод на myRIO.

Raspberry Pi 2 Web Server

Все что нужно чтобы запустить свой веб сервер на малинке описано в этой статье. Джентельменский набор так сказать.

Подразумеваю что на Малине стоит Raspberian и есть доступ к консоли (через удаленный доступ или напрямую)

Автоподключение Raspberry Pi 2 к Wi-Fi

Если вы хотите чтобы малинка автоматически конектилась к вашему файфаю то нужно сделать следующее. Перевод с (http://weworkweplay.com/play/automatically-connect-a-raspberry-pi-to-a-wifi-network/)

Насраиваем файл с соединениями:

$ sudo nano /etc/network/interfaces

нужно поменять строчку:

auto wlan0

и добавить строчки в конце:

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Далее нажимаем Ctrl+X затем Y.

Теперь надо отредактировать файл на который мы ссылаемся.

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Там нужно записать параметры сети к которой подключаемся:

network={
ssid="НАЗВАНИЕ_СЕТИ"
psk="ПАРОЛЬ"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}

Все готово.

Проверить просто:

$ sudo reboot

После перезагрузки

ping google.com

Статический IP

Если вам надо статический IP то нужно заменить dhcp на static и дописать в интерфейс:

iface wlan0 inet static
address 192.168.1.155 #Адрес который хочешь получить
netmask 255.255.255.0 
gateway 192.168.1.1 #Адрес роутера

Установка Apache и PHP на Raspberry Pi 2

Установка Apache2 и PHP позволит этому устройству отображать веб странички. Перевод с  https://www.raspberrypi.org/documentation/remote-access/web-server/apache.md.

Установить Apache:

sudo apt-get install apache2 -y

Чтобы протестить можете в браузере на самой малине написать localhost или если вы подключены к сетке то с другого устройства зайти по IP. Чтобы узнать IP Raspberry Pi нужно написать

hostname -I

Если какая-то страничка загрузится, то все ок. Едем дальше.

Ставим PHP:

sudo apt-get install php5 libapache2-mod-php5 -y

После установки в папке /var/www/html/index.html можно заменить на index.php с содержимым:

<?php echo date('Y-m-d H:i:s'); ?>

При обновлении браузера будет отображаться время.

Установка MySQL на Raspberry Pi 2

Ставим MySQL. Оригинал: http://raspipress.com/2014/06/tutorial-install-mysql-server-on-raspbian/

Пробиваем прошивку:

sudo uname -a

Если ниже 3.12.20 то нужно обновить:

sudo rpi-update f6eef32dd6388c3b04dbf462bd324d93281bf397

И перезагрузиться:

sudo reboot

Ставим:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mysql-server --fix-missing

Во время установки он будет просить пароль для рута.

Чтобы из PHP можно было работать с БД нужно поставить следующий пакет:

sudo apt-get install mysql-client php5-mysql

Заполнять БД из командной строки я считаю кощунством так что поставим PHPMyAdmin.

Установка PHPMyAdmin на Raspberry Pi 2

Ставим PHPMyAdmin

http://raspipress.com/2012/09/tutorial-install-phpmyadmin-on-your-raspberry-pi/

Все просто:

apt-get install phpmyadmin

Добавляем в конфиг апача:

$ sudo nano /etc/apache2/apache2.conf

В последней строке дописываем:

Include /etc/phpmyadmin/apache.conf

Перезагружаем Apache:

/etc/init.d/apache2 restart

Все. теперь можно работать с базой данных:

http://localhost/phpmyadmin/

 

 Танцы с бубном вокруг /etc/network/interfaces

 

Сервомашинка: исследование

Для построения следящей системы необходимо знать точные характеристики элементов входящих в систему. Как правило двигатель это элемент который больше всего вносит погрешности в систему. Так что рассмотрим характеристики сервомашинки.

Куплена она была здесь: http://ru.aliexpress.com/item/F02433-Corona-Digital-Tail-Servo-Metal-Gear-DS-919MG-DS-919MG-for-Trex-250-450-V2/1651459058.html

Заявленные характеристики:

Цифровая микро-серво DS919MG
 Рабочее напряжение: 4.8 В/6.0 В
 Рабочий ток: 200mA/240mA
 Рабочая скорость: 0.07sec.60o/0.06sec.60o
 крутящий момент: 1.5kg.cm/1.7kg.cm
 Мертвая зона: 3 USEC
 Рабочая скорость: 40o/одной стороны Пульс  400US
 Рабочая температура Диапазон:-20 до + 60
 -Шариковый подшипник
 -Программируемый цифровой усилитель MOSFET езды
 -Шестерни металла
 -Вес: 12.5 г-0.44 унц.
 -Размер: 22.5x11.5x24.6 мм (0.88 "x 0.45" x 0.96 ")
 -Крутящий момент на 4.8 В: 20.8 унц. (1.5Kg.cm)
 -Скорость 4.8 В: 0.07 сек на 60 °

Ни слова про люфт.

Измерение люфта

Для измерения люфта понадобится лазер и экран (любая картонка). Чем больше плечо тем точнее измерение люфта.

Сервомашинка жестко устанавливается на неподвижное основание. На ротор машинки прикрепляется лазер. Направление лазера задается в сторону экрана. На машинку подается постоянный сигнал. Ротор машинки может свободно вращаться  в пределах небольшого угла. Это и есть люфт. Измерить его можно отводя в крайнее свободное левое и правое положение робота, замечая где находится луч лазера.

На рисунке видна точка на экране и сама сервомашинка с лазером. На экране отмечены черным маркером оба крайних положения.

Расстояние до экрана 9 метров и расстояние 28 см.

Получается arctg(28/900)=1,782 градуса = 7 делений.

Постоянная времени

В общем эксперимент позволяет определить частотную характеристику устройства. Эта характеристика говорит о том как хорошо устройство передает ту или иную частоту.

Суть эксперимента заключается в измерении амплитуды колебаний которая  получается после прохождения через систему по отношению к тем что подаются на вход системы.

Входное воздействие будет гармоническим: ServoPWM=A0+A*sin( w*t ). В нашем случае сервомашинка управляется ШИМ который генерируется с первого таймера у Arduino. Благодаря использованию первого таймера разрядность ШИМ не 8 бит а 10. Соответственно диапазон положений сервомашинки от -90 до +90 градусов. Экспериментально было проверено, что минимальный угол соответствует значению 220, а максимальный 950. Можно вычислить коэффициент связи входа с выходом сервомашинки:

Kc=(950-220)/180=4 [ед/градус]

Теперь используя такую же установку как и в первом эксперименте измеряем амплитуду колебаний.

На фото выделено красным квадратом и зелеными рисками результаты измерения амплитуды колебаний на разных частотах.

Код программы выглядит следующим образом:

#include <TimerOne.h>
void setup()
{
 Timer1.initialize(2500);
 //Timer1.pwm(9,560);
 Timer1.pwm(10,600);
 delay(1000);
}
float a=0;
void loop()
{
 a=600+25*sin( ((float)micros())/100000*30 );
 Timer1.pwm(10,(int)round(a)); 
}

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

заданное число X рад/с полученная амплитуда Y в см отн. амплитуда 20 log A
1 10 151 1 0
2 20 150 0,9933774834 -0,05771376475
3 30 150 0,9933774834 -0,05771376475
4 40 150 0,9933774834 -0,05771376475
5 50 110 0,7284768212 -2,751685243
6 60 97 0,642384106 -3,844104261
7 70 76 0,5033112583 -5,9632671
8 80 66 0,4370860927 -7,188660235
9 90 57 0,3774834437 -8,462041832
10 100 47 0,3112582781 -10,13758179
11 110 43 0,2847682119 -10,91016983
12 120 34 0,2251655629 -12,94996061
15 150 13 0,08609271523 -21,3006719

Построим график зависимости затухания колебаний от частоты. Это и есть Амплитудно Частотная Характеристика.

По сути эта характеристика почти полностью описывает поведение устроства. Зная ее мы можем построить модель такого устройства.

По АЧХ видно, что данное устройство повторяет частотную характерситику апериодического звена с частотой среза в 30 рад/сек = 4.77 Гц.

Модель сервопривода состоит из 2х апериодических звеньев насыщения (-90/+90) и люфта в 2 градуса. частотный анализ модели показывает:

Что в большей степени соответствует характеристике снятой экспериментально.

 Чувствительность

Определение чувствительности сервомашинки заключается в измерении минимального угла на который может повернуться выходной вал.

На фото видно способ измерения чувствительности. Изначально был задано значение  600. Далее 601, 603, 605, 610. И измерены положения луча с люфтом. То есть крайнее левое и правое положение.

  • Для разницы для значения (600 – 610)=10 получается 39 см (8.6).
  • Для разницы для значения (600 – 605)=5 получается 21 см ( 5/10=0.5 | 21/39=0.538 ).
  • Для разницы для значения (600 – 601)=1 получается 4.5 см ( 1/10=0.1 | 4.5/39=0.115 ).

Можно заметить некоторую нелинейность при уменьшении смещаемого значения, но она явно меньше чем значение люфта. Так что ей можно пренебречь.

 

Список публикаций

  1. Андронова А.И., Бурдинов К.А. «Высокочастотная фильтрация как способ повышения контраста изображения» //  Материалы IX международной молодежной научной конференции  по естественнонаучным и техническим дисциплинам. [Текст],: материалы конференции / Йошкар-Ола: Поволжский государственный технический университет, 2014 – Ч.2. – С. 131-132 – ISBN 978-5-8158-1409-7
  2. Бурдинов К.А. «Высокочастотная фильтрация как способ повышения контраста изображения» //  XL Международная молодежная научная конференция Гагаринские Чтения. [Текст],  материалы конференции / Москва: Москва, 2014 – T.4. – С. 62-63 – ISBN 978-5-93271-665-6
  3. Андронова А.И., Бурдинов К.А. «Исследование возможностей спектроанализатора СИРИУС для определения тяжелых металлов в пищевых продуктах» //  “Прикладная электродинамика, фотоника и живые системы – 2013” (ПРЭЖС – 2013). [Текст],  материалы конференции / Казань: «Новое знание», 2013 – С. 50 – ISBN 978-5-89347-719-1
  4. Бурдинов К.А. «Динамика систем виброзащиты оптико-электронных приборов» //  Предпринимательство в современной России и за рубежом: проблемы, опыт, перспективы развития. [Текст],  материалы конференции / Казань: Печать-Сервис XXIвек, 2013 – С. 212 – ISBN 978-5-91838-093-2
  5. Бурдинов К.А. «Исследование возможностей спектроанализатора СИРИУС для определения тяжелых металлов в пищевых продуктах» //  XXIТуполевские чтения (школа молодых ученых). [Текст],  материалы конференции / Казань: Изд-во Казан. гос. тех. ун-та., 2013 – T.1. – С. 240 – ISBN 978-5-7579-1930-0
  6. Молин Д.А., Смирнов А.Е., Бурдинов К.А. «К задаче моделирования формирования поверхности составного параболического зеркала и оценке качества изображения» //  Труды Xмеждународной Четаевской конференции. [Текст],  материалы конференции / Казань: Изд-во Казан. гос. тех. ун-та., 2012 – T.3. – С. 182-188 – ISBN 987-5-7579-1730-6
  7. Бурдинов К.А. «К задаче моделирования динамики формирования поверхности составного параболического зеркала» //  XXXVIII Международная молодежная научная конференция Гагаринские Чтения. [Текст],  материалы конференции / Москва: Москва, 2012 – T.3. – С. 43-44 – ISBN 978-5-93-271-641-0
  8. Бурдинов К.А. «Разработка и исследование алгоритмов управления бортовой ОЭС, реализованных на микроконтроллерах» //  XXТуполевские чтения: Международная молодежная научная конференция. [Текст],  материалы конференции / Казань: Изд-во Казан. гос. тех. ун-та., 2013 – T.4. – С. 10-13 – ISBN987-5-7579-1876-1
  9. Бурдинов К.А. «Исследование динамики управления аэрофотоаппаратом и оценка влияния динамических погрешностей систем, обеспечивающих его работу, на качество изображения» //  XIXТуполевские чтения: Международная молодежная научная конференция. [Текст],  материалы конференции / Казань: Изд-во Казан. гос. тех. ун-та., 2011 – T.4. – С. 30-31 – ISBN 978-5-7579-1655-2

Добавляем Google AdMob баннер в Android приложение и зарабатываем на нем

Шаг 1

Прежде всего нам необходимо зарегистрироваться в AdMob. После, добавить ваше приложение в систему, как показано на скрине.

Без имени-1

Добавляем приложение в AdMob

Само собой выбираем Android App, там вываливается

Без имени-2

 

Добавляем приложение

Название чисто для вас. Если ваше приложение не размещено в маркете, не беда можно фигачить битую ссылку. Добавляем приложение.

Без имени-3

Далее нам пригодится только Publisher ID.

Шаг 2

Скачиваем библиотеку Android AdMob ane. Там же есть пример кода. Но я представлю свой вариант и немного разберу.

Прежде всего подключаем библиотеку. (Для Flash CS6: Properties -> Edit ActionScript Settings -> Library Path -> Add ANE)

var admob:Admob=Admob.getInstance();
if (admob.isSupported){  
admob.createADView(AdSize.SMART_BANNER, "a151bede7ca7312");
admob.load(false); // send a ad request.
}

Создаем экземпляр класса, далее если доступно создаем место под баннер. В нем надо указать размер баннера и Publisher ID. Далее загружаем баннер.

                /**320*50**/
                public static const BANNER:AdSize=new AdSize(320, 50);
                /**300*250**/
                public static const IAB_MRECT:AdSize=new AdSize(300, 250);
                /**468*60**/
                public static const IAB_BANNER:AdSize=new AdSize(468, 60);
                /**728*90**/
                public static const IAB_LEADERBOARD:AdSize=new AdSize(728, 90);
                /**Smart Banners are new ad units (as of v6.0.0) 
                 * that will render screen-wide banner ads 
                 * on any screen size across different devices in either orientation.
                 *  Smart Banners help deal with increasing screen fragmentation 
                 * across different devices by "smartly" detecting the width of the phone 
                 * in its current orientation, and making the ad view that size. **/
                public static const SMART_BANNER:AdSize=new AdSize(-1, -2);
                /**160*600**/
                public static const IAB_WIDE_SKYSCRAPER:AdSize=new AdSize(160, 600);

Выше приведены возможные варианты размеров баннера

admob.addToStage(0, admob.getScreenSize().height-75);

А вот на сцену добавляем после подгрузки своих данных. Чтобы добавить баннер внизу приложения сначала узнаем высоту сцены по мнению этого класса (она может отличаться от stage.stageHeight, из-за stage.scaleMode)

Так же можно место моих 75 вставить  admob.getAdSize(), который содержит размеры баннера, но он появляется после загрузки баннера, соответственно надо будет добавить Event.COMPLETE или AdEvent.onReceiveAd и добавлять на сцену в нем.

И так вот как это выглядит в приложении

Заключение

Хочу предупредить любителей лайфхаков. Не стоит кликать на свою же рекламу в своем приложении. AdMob банит людей по RPM рейтингу, если значение будет больше 4$, то стоит отключить приложение пока не забанили.