Category: Новости

May 1, 2020 siteprovisor No comments exist

Воронки в атмосфере

 

На полученных нами снимках из космоса видны вихри из облаков.
Что заставляет облака закручиваться в вихрь, в каком слое атмосферы это происходит, и вообще, откуда берутся облака?
Может быть появление облаков связано в самими вихрями?

 

Возьмёмся за исследование атмосферы с помощью Arduino, датчиков DHT-11 и bmp280, следим за влажностью воздуха, его температурой и давлением.
Почему-то датчику нужна температура, чтобы выдать значение влажности? Как-же это, ведь он просто должен её измерить?


Ладно, что же такое влажность – это влага в атмосфере, её количество – бойко отвечают ученики. Хорошо, это абсолютная влажность – количество молекул воды в кубике воздуха. (Там, кстати, ещё много других молекул, в  основном
азота). Но иди попробуй сочти все эти молекулы!

 

Поступим так – будем сравнивать температуры двух термометров (спиртовых, например), один из которых обёрнут в марлю, погруженную концом в блюдце с водой. С марли испаряется вода, охлаждая второй термометр.

По разнице температур, по тому сколько молекул испарилось – можно судить о влажности воздуха вокруг.

Чем больше разница температур – меньше влажность.

 

А бывает ли максимальная влажность – да, когда нет разницы температур, вода с
марли уже не испаряется – в окружающем воздухе так много молекул воды, что он не вбирает их больше, напитался как губка.

 

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

Почему относительная и зачем температура?


При разной температуре воздух способен впитать в себя разное воличество влаги. При температуре 0 градусов (по Цельсию) воздух максимально вбирает 5 г воды в один кубометр. То есть, если при этой температуре мы нашли в этом
кубике молекул воды аж на 5 г – то влажность 100%. Если нашли только 2.5 г – то влажность 50%.
Интересно, что при минус 10 воздух может вместить только 2.5 г воды. То есть, если при минус 10 нашли 2.5 г – то влажность 100% при данной температуре.

 

А можно ли найти больше, спрашивают ученики?.
Что же будет, если охладить воздух? Молекулы воды, находящиеся в воздухе начнут летать с меньшими скоростями.
Если раньше они вели себя как теннисные мячики, ударяя друг друга и терпели удары со стороны молекул самого воздуха, то теперь ударов всё меньше и они не такие сильные. А молекулы воды – как маленькие магнитики – начинают
тяготеть, липнуть друг к другу, образуя туман и целые капли.


Воссоздать это атмосферное явление вы можете, вынув из холодильника банку варенья (если, конечно, вы любите варенье). Смотрите, она “запотела”. На банке выпала роса. Откуда взялась влага? Из воздуха, окружающего банку.

 

Посмотрите на воронку в ванне. Вода, уходя вниз, закручивается.
То же и в атмосфере. Воздушный поток, устремленный вниз, сверху (из космоса) виден как воронка (по часовой стрелке), при этом давление у земли растет из-за притока воздуха (показания bmp280), облаков не образуется. Это ещё называют
антициклон.
Зимой при этом бывает похолодание из-за опускающегося сверху холодного воздуха.
Снег же зимой идет при некотором потеплении. Как же так?

Нагретый у земли воздух поднимается потоком вверх, находящаяся в нём влага связывается в капли и даже замерзает.
Образуются облака дождевые или снеговые. Поток при подъёме закручивает и сверху эта “перевернутая” воронка видна как вихрь (против часовой стрелки). Это циклон. Из-за оттока воздуха вверх давление у земли падает.

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

December 10, 2019 siteprovisor No comments exist

Строим самолёт

Раз уж вы решились на такое трудоёмкое и местами кропотливое дело, как постройка самолёта – успеха!

 

Можно использовать

Материалы и инструменты

Обшивки самолета – полипропиленовая подложка под ламинат толщиной около 3 мм. Для крыла подойдет гибкая с продольными полосами. Линейки 50 см для лонжерона крыла и продольного усиления фюзеляжа. Фанерка для моторамы и резинка портновская (не менее 1 см шириной) для крепления съёмного крыла. Плита утеплителя ППЭ для элементов усиления фюзеляжа.

 

 

Понадобятся: металлическая линейка, нож (лучше специальный), клей для потолочной плитки “Титан”, скотч, армирующая лента “серпянка”, малярная лента, термоклеевой пистолет и стержни, мелкая шкурка, зажимы, клей ПВА.

Хвостовое оперение

Сборка хвостового оперения - киль и стабилизатор

Сборка фюзеляжа

Фюзеляж - Борт

Фюзеляж - Установка усилений

Дополнительные элемента усиления фюзеляжа

Сборка фюзеляжа

Фюзеляж - установка верхней и нижней обшивок

Крыло

Установка лонжерона и нервюр

Установка серв и склейка обшивки

Навеска элеронов

Установка оперения и моторамы

Конструкция планера в сборе

Балансировка

Собрав фюзеляж, оснастив его всем оборудованием, установив крыло – необходимо провести балансировку самолёта.

Центр масс полностью собранного и укомплектованного самолёта должен приходиться на линию, отстоящую от передней кромки крыла на 1/3 ширины крыла. Линию прочертить заранее. Поставить большие пальцы на линию, поднять – самолёт должен уверенно лежать и никуда не крениться.

Можно лететь!

November 11, 2019 finereader No comments exist

Камера OV7670. Трудный путь

Это уже серьёзная задача, граничащая местами с профессиональной разработкой. Готовьтесь к трудному пути. 

 

Хотя, конечно, камера то уже есть, и надо только научиться ей пользоваться

Изучаем усилия предшественников, коим хвала – computerNerd, статья и статья и ещё статья.

Изучаем как цифровая камера работает – ПЗС матрица… Для программиста это просто двумерный массив с данными пикселей, который надо как-то с камеры забрать, пользуясь строчной и кадровой синхронизацией.

Нужно посмотреть кодировки цвета пикселя RGB, YUV (мы возьмём именно YUV, где на один пиксель приходится 2 байта).

 

Ну и надо понимать, что такой сложный прибор, в котором есть автоматические функции управления временем экспозиции, балансом белого, гаммой, резкостью и много чего ещё потому и сложный изнутри, чтобы быть простым для внешнего управления. Камера внутри себя содержит DSP (ЦОС) процессор. Для программиста задача сводится к начальной конфигурации камеры – установке определенных битов нужных регистров, а затем просто собираем байты пикселей изображения.

Камера способна выдать VGA картинку 640х480 со скоростью до 30 кадров/с, но для ардуины лучше-меньше, 320х240 еще ничего.

Если делаете плохо, т.е. как на картинке ниже – позаботьтесь о состоянии портов перед началом, чтобы точно ничего на выход не вылилось (и не было пинов, сконфигурированных на выход и подтягивающих резисторов), а то сгорит это чудо полупроводниковой техники.

Лучше подключать вот так (скопировал с одного блога, который пропал куда-то, ну не пропадать же хорошей картинке)

Разъём камеры

Сигнал такта на входе и выходе камеры

Итак, чтобы оживить любое электронное устройство нужен тактирующий импульс или Clock. На ардуине на 11 пине выдадем 8 МГц ШИМ на пин камеры XCLK.

Теперь можно убедиться в работоспособности камеры – на выходе PCLK – те же 8 МГц. Ардуино не сможет обрабатывать байтовые посылки с такой скоростью, поэтому воспользуемся внутренним (для камеры) делителем частоты – максимальное значение 31 – оно хранится в регистре с именем CLKRC.

Расчет внутренней частоты (умножать не будем PLL_Multiplier=1):

Fint = 8 000 000 / (2*31+1) = 125 000 Гц – с такой частотой будут выдаваться байты кадра в ардуину.

Кадр 320х240 = 76800 пикселей. Для RGB и YUV пиксель кодируется двумя байтами. Байт же передаётся за один такт параллельно по D0-D7.

125 000 / (76800 * 2) = 0.8 кадров/сек.

 

Настройка камеры

Далее необходимо сконфигурировать регистры камеры – установить формат изображения 320х240, задать цветовую кодировку, установить делитель частоты и пр. Для этого используется интерфейс SCCB  – аналог I2C (в даташите МК AVR он ещё называется TWI).

Собственно, производитель привел регистры (адрес-значение), которые надо изменить для перехода в режим QVGA (320×240)

Ёще разберемся в них отдельно, а CLKRC тут для 30 кадров/с.

Обработка видео потока

Осталось только забрать видео поток.

Начинается новый кадр – ждём переключения VSYNC с 1 на 0.

Строчную синхронизацию можно брать по HREF, а можно просто по счетчику длины строки.

По байтовому такту PCLK (переход в 0 – начало нового байта) забираем байт с параллельного порта D0-D7 (наверное, совсем правильно будет забирать байт в момент перехода PCLK из 0 в 1). Для YUV первый байт содержит информацию о пикселе в градациях серого, второй – о цвете. Для простоты пока второй байт не берем и просто ждем PCLK 1-0-1.

 

Самая захватывающая (дух и само изображение) часть программы выглядит так:

Большое отступление. Загадочные регистры

Регистры процессора (микроконтроллера) — блок ячеек памяти, образующий сверхбыструю оперативную память внутри процессора. Есть регистры, используемые самим процессором для вычислений, например, при выборке из памяти очередной команды она помещается в регистр команд, а при выборке переменных они помещаются в регистры операндов.

Но в микроконтроллере есть ещё и другие регистры – хранящие настройки разных периферийных устройств. С ними в основном и имеет дело программист. Например регистр PORTB, хранящий состояние выводов (пинов), или регистр DDR, хранящий настройки, находятся ли выводы (пины) в состояние входа или выхода.

В случае с камерой, регистр – это служебная очень быстрая память, например ячейки по 8, 16 бит, к которой можно обратиться по адресу. На стороне камеры работает программа, которая управляет камерой в соответствии с настройками, хранящимися в этих регистрах. Эта программа, в том числе, принимает посылки по I2C – первые 8 бит – адрес, следующие 16 бит – значение регистра. Вот и все. Такой вот протокол обмена.

 

Конфигурировать регистры будем булевыми операциями – AND (&) и OR(|).

Ну, говорить о том, что представлять содержание регистра удобнее всего в шестнадцатеричной или двоичной системе не будем

Также умолчим о возможности калькулятора (вид->инженерный) переводить числа между разными системами

Вот таблица истинности – правила двоичной арифметики, ну это уж почти всем известно.

Вот тут незадачливые программисты найдут наконец применение булевой логике, так ненавистной им в школе

Ну раз регистр это просто ячейка, например, из 8 бит, то выставим в регистре с именем PORTB восемь единичек:

Или все нули:

А теперь, как выставить 1 в первом бите, не изменив состояние других – при помощи OR (операция выполняется побитово):

Как же выставить 0 в любом бите – при помощи AND

Выставляем 0 в первом бите, не изменив состояние других – при помощи AND (операция выполняется побитово):

Если не понятно, прочитайте статью на customelectronics.ru

Начнём с настройки ардуино

Заглянув в datasheet на микроконтроллер ATmega8 семейства AVR (да, да, именно такой и в вашей ардуине), в ужасе ничего не понимаешь понимаешь, что выходы соответствуют трем портам B, C, D – PB0-5, PC0-5, PD0-7. В Arduino эти названия переименованы в цифровые выводы D0-D13 и аналоговые входы A0-A5.

Выводы управляются регистрами PORTх и DDRх.

Например, вывод PB5 управляется пятым битом в регистрах PORTB (состояние вывода – 0 или 1, 0В или 5В) и DDRB (настройка вывода – на вход(0) и выход(1));

Итак, чтобы подать 1 (5В) на 13 пин ардуино (PB5):

Надо настроить пин на работу в режиме выхода

Выставить 1 в 5 бите регистра PORTB

Вот настройки портов ардуино (тут не всё, но многое)

Подробнее о настройке камеры

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

Все адреса и рекомендуемые значения регистров – уже подготовлены и хранятся в .h файлике в виде #define RegName RegAddress.

Перед началом работы производитель рекомендует все регистры сбросить в состояние «default values» выставив 7-й бит в регистре СОМ7 в 1 (СОМ7[7] = 0x80) используя функцию wrReg(reg_addr, reg_val).

Механизм изменения размера картинки (разрешения) выглядит так:

Чтобы получить, например, 256х128 размера картинку, надо сначала передискретизировать (down sampling)VGA – взять каждый второй пиксель и получить 320х240, а затем использовать масштабирование (zoom) с коэффициентами 0.8 по горизонтали и 0,53 по вертикали сделает 256х128.

 

Чтобы изменить разрешение на 320х240 нужен только down sampling

Для этого надо разрешить масштабирование (в нашем случае только down sampling), выставив в 1 второй бит регистра СОМ3

Устанавливаем коэффициент 2 передискретизации по вертикали и горизонтали – 1 в битах [4] и [0] регистра SCALING_DCWCTR

Устанавливаем делитель такта PCLK на 2 на выходе из DSP в регистре SCALING_PCLK_DIV (1 в нулевой бит) – видимо, из-за пониженной скорости выдачи пикселей с матрицы (берем каждый второй) и частота работы DSP должна быть понижена

Разрешая масштабирование в регистре СОМ3, не забыть про СОМ14[3]

Далее вертикальные и горизонтальные размеры окна в регистрах VSTART, VSTOP, HSTART, HSTOP – ничего менять не надо.

Все требуемые для изменения регистры объединены в структуры, которые посылаются по IIC функцией wrSensorRegs(QVGA_OV7670).

October 12, 2019 siteprovisor No comments exist

Программируем по настоящему. Загадочные регистры

Немного о том, что знают настоящие не “ардуино-зависимые” программисты о микроконтроллерах

И еще о том, зачем в школе мучают булевой алгеброй

Регистры процессора (микроконтроллера) — блок ячеек памяти, образующий сверхбыструю оперативную память внутри процессора. Есть регистры, используемые самим процессором для вычислений, например, при выборке из памяти очередной команды она помещается в регистр команд, а при выборке переменных они помещаются в регистры операндов.

Но в микроконтроллере есть ещё и другие регистры – хранящие настройки разных периферийных устройств (портов ввода/вывода, например). С ними в основном и имеет дело программист. Например регистр PORTB, хранящий состояние выводов (пинов), или регистр DDR, хранящий настройки, находятся ли выводы (пины) в состояние входа или выхода.

 

Конфигурировать регистры будем булевыми операциями – AND (&) и OR(|).

Ну, говорить о том, что представлять содержание регистра удобнее всего в шестнадцатеричной или двоичной системе не будем.

Также умолчим о возможности калькулятора (вид->инженерный) переводить числа между разными системами

.

Вот таблица истинности – правила двоичной арифметики, ну это уж почти всем известно

Ну раз регистр это просто ячейка, например, из 8 бит, то выставим в регистре с именем PORTB восемь единичек:

Или все нули:

А теперь, как выставить 1 в первом бите (обратите внимание на нумерацию битов в регистре – начинается 0), не изменив состояние других – при помощи OR (операция выполняется побитово):

Как же выставить 0 в любом бите – при помощи AND

Выставляем 0 в первом бите, не изменив состояние других – при помощи AND (операция выполняется побитово):

Вот целый курс по программированию МК AVR “правильно” таким hard core способом, который в общем то и используют настоящие разработчики (customelectronics.ru)

Зажжем диод на ардуино, заодно попрактикуемся с регистрами.

Заглянув в datasheet на микроконтроллер ATmega8 семейства AVR (да, да, именно такой и в вашей ардуине), в ужасе ничего не понимаешь понимаешь, что выходы соответствуют трем портам B, C, D – PB0-5, PC0-5, PD0-7. В Arduino эти названия переименованы в цифровые выводы D0-D13 и аналоговые входы A0-A5.

Выводы управляются регистрами PORTх и DDRх.

Например, вывод PB5 управляется пятым битом в регистрах PORTB (состояние вывода – 0 или 1, 0В или 5В) и DDRB (настройка вывода – на вход(0) и выход(1));

Итак, чтобы подать 1 (5В) на 13 пин ардуино (PB5):

Вот так просто

August 10, 2019 finereader No comments exist

Проектируем и травим плату

Делаем с учениками небольшое электронное устройство – плату-коммутатор с управлением от Arduino.


Плата должна включать/выключать (коммутировать) большие нагрузки во внешней цепи (например, управлять лампочкой в сети 220В или электродвигателем в 12В сети автомобиля).

 

В качестве коммутирующего элемента (ключа) будем использовать электро-механическое реле. В нем контакты замыкаются под действием магнитной силы, только магнит там не обычный (постоянный), а электромагнит, работающий вот так:

 

Итак, пропуская ток по катушке нашего реле можно притягивать металлические контакты друг к другу, тем самым замыкая/размыкая внешнюю цепь.

 

Только вот кто будет пропускать или не пропускать ток по катушке – для этого нужна ещё одна цепь (внутренняя). 

 

 

Поскольку ножка Arduino не способна самостоятельно запитать катушку реле, запитаем катушку (обмотку) от отдельного источника. Обмотка и этот источник образуют отдельную цепь (мы назвали её внутренней), которую необходимо замыкать/размыкать каким-то ключом. Этим ключом будет служить транзистор (биполярный), управляемый ножкой Ардуино.

 

 

 

Транзистор – это такой электронный прибор с изменяемым сопротивлением (как потенциометр, например).

Ну вот, скажите вы, нужен ключ, а тут какое-то сопротивление, еще зачем-то и переменное.


Ну так замкнутый ключ – это почти нулевое сопротивление, разомкнутый – почти бесконечное.

Транзистор умеет менять свое сопротивление в этих (почти) пределах.

 

Для взятого транзистора (bc337) ток в 5 мА, текущий через Базу (можно сравнить Базу с управляющим движком потенциометра или рукояткой ключа), делает сопротивление транзистора на участке Э-К (Эмиттер-Коллектор) практически нулевым.

 

Электрическую схему разработаем в EagleCAD (бесплатная версия для плат, меньших 120х80мм). Там есть привязка электрической схемы к проектируемой плате.
Электрическую схему можно смоделировать в Multisim (есть бесплатная версия для студентов).

Толщины дорожек 0,5мм, диаметр отверстий 0,8-1мм.


Кстати, хорошие уроки по Eagle – easyelectronics.ru (уроки по Eagle)

 

Печатаем рисунок на глянцевой фотобумаге 85г/см и дальше при помощи технологии джедайского утюга или ЛУТ (описание ЛУТ на easyelectronics.ru) переносим тонер на предварительно зашкуренную и обезжиренную ацетоном медь и травим в хлорном железе.

На видео видно, что красный защитный диод загорается только в момент отключения цепи, когда ток через обмотку реле перестает течь. Почему же он горит?
Дело в том, что обмотка-катушка обладает свойством индуктивности, то есть сопротивляется изменению тока через себя. При попытке разомкнуть цепь и уменьшить ток до нуля, катушка некоторое время будет пытаться сохранить течение тока за счет запасенной в ней энергии магнитного поля. Катушку можно сравнить с маховиком, которого и разогнать и остановть мгновенно не получается.
Такая попытка сохранить ток в начальный момент в уже разомкнутой цепи приведет к возникновению очень большого напряжения на катушке (как на источнике ЭДС), что может вызвать разряд в воздушном зазоре ключа, пробой транзистора. Поэтому на этот случай надо предусматривать разрядную цепь с диодом.

IMG_20190422_234559