112

Вторая жизнь старому стрелочному мультиметру

Бывает, что у радиолюбителей есть старый стрелочный мультиметр советских времен, лежит где-то далеко на полке. По прямому назначению его уже использовать не хочется, а выкинуть жалко. Так и лежит. В этой статье мы сделаем его модернизацию, а именно – добавим USB, для возможности анализа данных и построения графиков.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

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

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

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

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Выбираем провод с более резким наклоном прямой. В моем случае получилось что при максимальном отклонении стрелки напряжение равно 96,4 мВ. Для оцифровки микроконтроллером мало, но ничего страшного, это напряжение можно усилить операционным усилителем. Подойдет любой ОУ, я взял LM2904, просто потому что у меня такой был. Смотрим документ на микросхему – два ОУ в одном корпусе, максимальное выходное напряжение Vcc-1.5v. Запитывать будем от 3.3 вольт, значит надо подобрать коэффициенты усиления так, чтобы при зашкаливающей стрелке ОУ выдавал максимально возможное напряжение.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

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

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Проверяем напряжение на выходе усилителя при разных положениях стрелки. Нужно настроить так, чтобы когда стрелка зашкаливает, напряжение продолжало увеличиваться пока она не упрется в ограничитель хода. Теперь это напряжение надо оцифровать. Я взял китайскую платку с STM, купленную на Али.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

На борту у нее микроконтроллер STM32F103C8T6. Есть АЦП и USB. Подходит. Для первоначальной настройки предлагаю воспользоваться STM32CubeMX. Включаем тактирование, настраиваем кварцевые резонаторы.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Включаем и настраиваем АЦП, не забываем про прерывание по готовности.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

АЦП будет запускаться по событию таймера, настраиваем таймер.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Таймер тактируется частотой 48 МГц, с предделителем 24 и периодом 2000 получится, что он будет запускать АЦП каждую 1 мс. В принципе так часто нет смысла, но мы будем использовать усреднение значений, поэтому пусть будет. Включаем USB, выбираем Custom HID.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Генерируем проект и переходим к написанию кода. Я использовал System Workbench for STM32. Добавляем в «main.c» запуск таймера и АЦП, и несколько глобальных переменных.


/* USER CODE BEGIN PV */

//uint16_t adc_arr[ADC_MAX_CONVERSATIONS];

uint16_t adc_to_send;

uint32_t adc_sum;

uint8_t adc_counter;

uint8_t send_flag;

volatile uint16_t x;

/* USER CODE END PV */

/* USER CODE BEGIN 2 */

HAL_ADC_Start(&hadc1);

HAL_ADC_Start_IT(&hadc1);

HAL_TIM_Base_Start(&htim3);

/* USER CODE END 2 */


В прерывании прибавляем к переменной значение с АЦП и увеличиваем счетчик. Когда счетчик достигнет 200, усредняем значение и перекладываем в буфер для отправки по USB. Поднимем флаг, что пора отправлять.


/* USER CODE BEGIN 4 */

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){

adc_sum+=HAL_ADC_GetValue(hadc);

adc_counter++;

if(adc_counter==ADC_MAX_CONVERSATIONS){

HAL_GPIO_TogglePin(LD_1_GPIO_Port,LD_1_Pin);

adc_to_send=adc_sum/ADC_MAX_CONVERSATIONS;

adc_counter=0;

adc_sum=0;

send_flag=1;

}

}

/* USER CODE END 4 */


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


/* USER CODE BEGIN WHILE */

while (1)

{

// HAL_GPIO_TogglePin(LD_1_GPIO_Port,LD_1_Pin);

if(send_flag){

send_flag=0;

..USB_Send_report(adc_to_send);

}

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}


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


/* 34 */

0x07, /* bLength: Endpoint Descriptor size */

USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: */

CUSTOM_HID_EPOUT_ADDR, /*bEndpointAddress: Endpoint Address (OUT)*/

0x03, /* bmAttributes: Interrupt endpoint */

CUSTOM_HID_EPOUT_SIZE, /* wMaxPacketSize: 2 Bytes max */

0x00,

0x20, /* bInterval: Polling Interval (20 ms) */

/* 41 */


Далее составим «HID Report» дескриптор в программке HID Descriptor Tool.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Тут мы говорим, что наше устройство сообщает температуру в комнате (Usage). Report Size=8 и Report Count=4 означают, что 32 бита посылается от устройства к компьютеру (Input) и столько же от компьютера к устройству (Output). Нам из этого всего понадобится только 2 байта, остальное на будущее. Сохраняем как заголовочный файл, и копируем в наш код (куб там оставил место в файле usbd_custom_hid_if.c). Так же надо проверить соответствие размеров репорт дескриптора 35 байт и размер буфера под отправку (тут должно быть 5 байт, потому что мы еще указали Report ID – это еще 1 байт в самом начале). Прошьем и проверим, что устройство правильно определилось в системе.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Раскомментируем функцию отправки в файле «usbd_custom_hid_if.c» и заполняем, указав первым байтом Report ID, дальше наше значение АЦП.


/* USER CODE BEGIN 7 */

/**

* @brief Send the report to the Host

* @Param report: The report to be sent

* @Param len: The report length

* @retval USBD_OK if all operations are OK else USBD_FAIL

*/

static uint8_t USBD_CUSTOM_HID_SendReport_FS(uint8_t *report, uint16_t len)

{

return USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, report, len);

}

uint8_t USB_Send_report(uint16_t data){

Rep_buffer[0]=0x01;//report id

Rep_buffer[1]=data>>8;

Rep_buffer[2]=data;

Rep_buffer[3]=0xFF;

Rep_buffer[4]=0xFF;

return USBD_CUSTOM_HID_SendReport_FS(Rep_buffer,5);

}

/* USER CODE END 7 */


Проверяем в какой-нибудь утилитке что пакеты действительно идут.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Осталось написать программку под Windows, которая бы все это обрабатывала. Берем любимую среду программирования и библиотеку для работы с HID устройствами. Я взял старенькую Delphi 7 и библиотеку компонентов JEDI VCL. Из нее нужны «TJvHidDeviceController» и «TJvHidDevice». Добавляем обработчик «OnEnumerate» у девайс контроллера, в него по очереди прилетают все HID устройства при вызове энумерации. Остается отфильтровать наше устройство по VID и PID, затем связать с компонентом «TJvHidDevice».


function TUSBMeter.HidControllerEnumerate(HidDev: TJvHidDevice; const Idx: Integer): Boolean;

begin

if (IntToHex(HidDev.Attributes.VendorID,4)=VID)and

(IntToHex(HidDev.Attributes.ProductID,4)=PID) then

begin

if (HidDev.Caps.OutputReportByteLength=OUT_REPORT_COUNT_AMPERAGE) then

HidController.CheckOutByIndex(HidAmperage,Idx);

usb_ready:=true;

end;

Result := True;

end;


Данные будут приходить в обработчик «OnDeviceData». В нем вычисляем из посылки значение АЦП и выводим куда-нибудь для проверки.


procedure TUSBMeter.HidControllerDeviceData(HidDev: TJvHidDevice; ReportID: Byte; const Data: Pointer; Size: Word);


var

buf:^byte;

begin

if (IntToHex(HidDev.Attributes.VendorID,4)<>VID)or((IntToHex(HidDev.Attributes.ProductID,4)<>PID)) then exit;

buf:=Data; // rep

adc_abs:=buf^;

adc_abs:= adc_abs shl 8;

inc(buf);

adc_abs:=adc_abs+(buf^);

inc(buf);

callback;

end;


Теперь надо сделать пересчет, добавим на форму RadioGroup и настроим как на переключателе мультиметра. Я не стал добавлять шкалу сопротивлений, не нужна.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Заведем так же масштабирующий массив для пересчета и массив с единицами измерений.


const

scale_arr: array[1..18] of real = (600,300,150,60,30,15,6,3,0.75,1500,300,60,15,3,0.6,0.12,0.000012,1);

scale_arr_symb: array[1..18] of string[2] = ('V','V','V','V','V','V','V','V','V','mA','mA','mA','mA','mA','mA','mA','uA','');


Для пересчета еще понадобятся два граничных значения acd_min и adc_max. Подключаем потенциометр к мультиметру, выставляем стрелку на 0 и смотрим, что присылается в программу. Если тоже 0 – хорошо, если нет – не беда, подкорректируем. Потом выставляем стрелку на максимум и так же смотрим. Важно чтобы когда стрелка «зашкаливала» значение продолжало увеличиваться, так будет запас. Если этого нет, надо подкрутить потенциометр ОУ. У меня получилось 0 и 2365. Пересчитываем и выводим уже на основное табло.


procedure TMainForm.HID_Callback;

var

s:string;

buf:string;

rec_s:string;

begin

s:=floattostr(((meter.ADC-adc_min)/(adc_max-adc_min))*scale_arr[RadioGroup1.ItemIndex+1]);

buf:=copy(s,1,5);

buf[pos(',',buf)]:='.';

Label2.Caption:=buf;

end;

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Большая часть готова, теперь надо прикрутить запись в файл, страницу настроек с сохранением и красивый GUI. Формат файла я взял CSV, так как из него будет легко строить графики в Экселе.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Все, готово. Осталось собрать все в корпус мультиметра, свободного места там полно. Прорезать отверстие под USB шнурок и убрать обратно на самую дальнюю полку до тех пор, пока не понадобится снять долгий график разряда аккумулятора или график потребления тока каким-нибудь устройством.


Надеюсь, кому-нибудь будет полезно.

Найдены дубликаты

+6
Это круто
раскрыть ветку 1
+4

Спасибо

+4

и опять USB без гальваноразвязки.... комп не жалко?

раскрыть ветку 6
-1

Для чего развязка? Объясните, пожалуйста.

раскрыть ветку 5
+6

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

раскрыть ветку 4
+1

Тег arduino в топку. Тот кто познал stm32 уже не будет до этого детского сада спускаться. А так годно. Плюс.

раскрыть ветку 12
0

А кто познал Raspbery Pi 4 тому STM32 не нужны. А кто познал ПЛИС тот смотрит на всех этих как на говно ))

раскрыть ветку 11
0
Вообще не так. Там уже свои ниши для всего.
раскрыть ветку 10
+1

По умному все, с цифрами, плюсану, вдруг кому-нить пригодится)

+1

Нахуя?

раскрыть ветку 2
0

Вернее зачем?

0
Иллюстрация к комментарию
0

Погромирование сам изучал?

раскрыть ветку 1
0

Да

0

Советую использовать .tsv (Tab separated), а не .csv - тем более с экселем, который в зависимости от настройки локали может по-разному распарсить файл, так как в разных странах разный разделитель целой и дробной частей ;)

0

Спасибо моему Деду за такой "мультик", благодаря ему перебрал всю проводку в vw golf mk2. А в самой машине смотрится очень аутентично.

0
Прочитал весь пост. От начала и до конца он для меня выглядел как неизвестные мне иероглифы. Ну оно и понятно, ведь все мои познания это "в одном байте 8 бит".
0

Вторая жизнь прекрасной цешки, здорово!)

0
У меня лежит 15 шт. таких мультиметров (тестиров) без дела... Вот это круто на второй картинке подумал я. Нужно обязательно повторить! На 35 картинке энтузиазм поубавился....
раскрыть ветку 1
+1

Самая фигня в том, что сам мультиметр здесь как бы и не нужен. Каша из топора.

0

Отличный проект!

0

Супер, познавательно

0

Я нихуя не понял, но очень интересно!

раскрыть ветку 1
0
Я понял, но делать это, конечно же, не буду.
Иллюстрация к комментарию
0

Блин, такой же стоит, не совсем исправный (

раскрыть ветку 1
0

И у меня есть, только в отличие от вашего - совсем неисправный((

0

Ха, как два пальца об асфальт! )))

0

Точно такой как новый дома лежит без дела

раскрыть ветку 1
0

А я перебирал шкафчик полгода назад. Подарил. (

Похожие посты
672

Ардуина советского человека

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

Ардуина советского человека Arduino, Сделано в СССР, Микропроцессор, Учебное оборудование, Ретротехника, Программирование, Старое железо, Длиннопост

Учебный микропроцессорный комплект (УМК) производства завода VEF, поставлялись в стильном корпусе-чемодане

Ардуина советского человека Arduino, Сделано в СССР, Микропроцессор, Учебное оборудование, Ретротехника, Программирование, Старое железо, Длиннопост

Построен на КР580ВМ80А и взаимодействие с процессором осуществляется через клавиатуру:

Ардуина советского человека Arduino, Сделано в СССР, Микропроцессор, Учебное оборудование, Ретротехника, Программирование, Старое железо, Длиннопост

Как тут не вспомнить легендарный altair 8080 1975 года (УМК поставлялись в конце 80х). Тоже коробочка которая имеет какие-то переключатели и множество светодиодов. Кто бы из вас в 1975 видя такую коробочку с светодиодами мигающую определенным образом под бурные восхищения гиков-очкариков, догадался, что компьютеры будут в каждом доме и будут уметь воспроизводить мультимедиа?

Ардуина советского человека Arduino, Сделано в СССР, Микропроцессор, Учебное оборудование, Ретротехника, Программирование, Старое железо, Длиннопост

Светодиоды не яркие:

Ардуина советского человека Arduino, Сделано в СССР, Микропроцессор, Учебное оборудование, Ретротехника, Программирование, Старое железо, Длиннопост

Но самое главное - на передней панели есть разъем для подключения платы расширения! Можно из виртуального мира выйти в реальный, управляя чем-либо, как на ардуине. Правда программу писать придется на бумажке и вводить вручную с клавиатуры и далеко не на языке высокого уровня *вот в этом месте мем с Карлом*

Ардуина советского человека Arduino, Сделано в СССР, Микропроцессор, Учебное оборудование, Ретротехника, Программирование, Старое железо, Длиннопост

Макетное поле:

Ардуина советского человека Arduino, Сделано в СССР, Микропроцессор, Учебное оборудование, Ретротехника, Программирование, Старое железо, Длиннопост
Ардуина советского человека Arduino, Сделано в СССР, Микропроцессор, Учебное оборудование, Ретротехника, Программирование, Старое железо, Длиннопост

Мой сайт http://serkov.me

Мой инстаграм: https://www.instagram.com/pavel.serkov/

Показать полностью 6
210

Half - life кулер с кожаным ублюдком

Пятничного рукожопства пост)

Замутил озвучку для кулера со звуками из Half - life, фанатам понравится.

Комментарии в стиле кожаного ублюдка присутствуют)

92

Робот для сбора чаевых на Arduino

Привет, Пикабу! Хочу поделиться своим результатом сборки робота-вымогателя, исходники автора проекта также приложу. 


Наткнулся на проект на просторах YouTube, есть вариант сборки при наличии 3D-принтера и без. Решил собрать такого в подарок для бара.


Исходники (они есть и под видео, дублирую сюда для удобства):


Видео с оригинальным проектом

Файлы для печати (можно поддержать автора и купить коммерческую лицензию, но файлы одинаковые)

Прошивка

Вариант без печати

О моем опыте:


Я столкнулся с тем, что при печати на поверхности были сильные дефекты, недоэкструзия в частности. При том что ранее печатал куда более сложную модель и там все было отлично. Возможно мой пластик либо отсырел, либо уже старый, а может проблема и в модели, так как мои собственные и тестовые модели печатаются отлично при тех же настройках и тем же пластиком. Но базовая версия корпуса (есть изначальная и обновленная) отпечаталась уже нормально.



Было:

Робот для сбора чаевых на Arduino Arduino, Своими руками, Робот, Технологии, Программирование, Видео, Длиннопост

Стало: Не без дефектов, но поправить уже можно.

Робот для сбора чаевых на Arduino Arduino, Своими руками, Робот, Технологии, Программирование, Видео, Длиннопост

Также хочу отметить, что если вы используете китайскую версию сервопривода MG90S - внутренний вкладыш-накопитель (файл - inner_body) может не поместиться и при установке деформирует корпус. В разработке моделей для печати я пока не очень силен, для себя решил проблему уменьшив масштаб модели вкладыша на 3%. Установилось корректно, щель есть, но монеты в нее не проваливаются.

Показать полностью 2
81

Погодная станция Dozor meteo

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Станция  «Дозор метео» предназначен для замера параметров окружающей среды (температура, давление, влажность) отображения результатов на ЖК-дисплее, передачи показаний в сеть интернет на облачный сервис Интернета вещей IoT «Народный мониторинг», управления устройсвами. 

Особенности прибора:


-  измерение температуры, влажности, давления;

- наружный блок влажности/температуры;

- 2 удаленно управляемых выхода 12/220B;

- 1 логический/счетный вход;

- до 5 точек контроля температуры;

- автономная работа (без сети WiFi);

- WiFi-подключение к интернету;

- управление через приложение или бот Telegram


Ниже описана версия прибора для сборки из готовых модулей датчиков и МК на основе Arduino Nano. Есть версия конструкции на «рассыпухе», позволяющая получить небольшой размер и эстетичный внешний вид.


Назначение полей дисплея и кнопок

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

1. Канал управления (вкл./выкл.)

2. Счетно-контрольный вход.

3. Поле «Влажность» (наруж. блок)

4. Давление

5. Температура Tout (наружный блок)

6. Температура Tk (комнатная), датчик расположен внутри модуля.

7. Дополнительный датчик T1(DS18B20)

8. Дополнительный датчик T2(DS18B20)

9. Дополнительный датчик T3(DS18B20)

10. Обратный отсчет до сеанса связи с сервером.

11. Индикатор НЕ-успешности последнего сеанса связи с сервером.

12. Кнопка управления.

Схема межмодульных соединений:
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Для сборки прибора Дозор meteo на основе Arduino Nano понадобятся:


- Arduino nano – «рулит» всем в конструкции;


- модуль ESP-01. Это WiFi модуль на основе ESP8266, используется для связи прибора с интернетом и отправки данных на сервер народного мониторинга. Можно заменить практически любым модулем на основе ESP8266;


- модуль GY-68 (BMP180 со встроенным стабилизатором 3,3V и конвертером уровня I2C). Измеряет давление и температуру в помещении;


- модуль HTU21D. Используется в составе внешнего модуля и «отвечает» за наружную температуру и влажность;


- МК Attiny13a. Используется в наружном модуле;


- дисплей 128Х64 COG с контроллером UC1701

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

На нем можно лицезреть актуальные показания датчиком. Очень удобная, но не обязательная часть прибора. Без него работает, но показания можно посмотреть либо на сайте народного мониторинга или в приложении смартфона;


-м/с стабилизатора 3,3V.Нужна для питания ESP-01  и дисплея. Можно использовать соответствующий выход Power board (модуль питания для Arduino);

- DS18B20, цифровой датчик


Если необходимо коммутировать (управлять) нагрузками, то необходим узел на оптосимисторах AHQ2223 (IC1, IC3)  в корпусе DIP-7, и транзисторные ключи для управления ими. Если коммутация не нужна- часть схемы, выделенная как switching module можно не использовать. Если же такая необходимость есть, необходимо помнить, что указанные оптосимисторы рассчитаны на максимальный ток 0,8A, что вполне достаточно коммутации нагрузки до 150Вт (220Вольт). Также следует учитывать, что симисторы- полупроводниковые приборы, используемые в цепях переменного тока. Поэтому если надо управлять нагрузкой, рассчитанной для работы в цепи постоянного тока, вместо симистора надо поставить либо реле, либо транзистор с малым сопротивлением силового перехода.


Счетно-контрольный вход устройства (X2) можно использовать, например, для контроля уровня жидкости в баке.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Также можно подключить магнитный дверной датчик или контакты ИК датчика движения. В этом случае получиться простейшая охранная система.
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Датчику IN (это имя имеет ВХОД прибора в сообщении на сервер) в личном кабинете можно присвоить имя «ДВЕРЬ». При изменении состояния датчика (замыкание или размыкание ) пользователю поступит сообщение «ДВЕРЬ». На дисплее прибора отобразится изменение- иконка “IN” изменит вид. При этом датчик INC (значение тоже отсылается на сервер) покажет количество срабатываний. Можно использовать, например, для текущего расхода воды, если подключить к специальному водомеру. Максимальное значение между посылками на сервер -255. После отправки на сервер счетчик обнуляется.


Т.к. напряжение питания Arduino составляет 5V, а все модули датчиков, в том числе и дисплей, линии управления (UART, SPI) приходится подключать к модулям через резистивные делители (R2, R3; R5-R13). Исключение составляют модуль GY-68 и HTU21D. GY-68 имеет на «борту» собственный стабилизатор 3,3V, а HTU21D питается как и весь наружный модуль напряжением 3,3V. Дисплей- попадаются варианты исполнения как со встроенным стабилизатором, так и без него.


Если будет встроенный стабилизатор, то дисплей можно запитать от 5V, но резистивные делители всё равно желательны. Были случаи, когда на дисплей на управляющие контакты поступало напряжение 5V, и дисплей оставался жив. Но скорее всего это не полезно для дисплея. Документация на контроллер UC1701, установленный в данном дисплее по вопросу толерантности цифровых входов к напряжению 5V теряет нить разговора молчит.

Несколько неудобно конечно, когда элементы имеют разные значения питающих напряжений, но Arduino требует жертв…


Часть схемы, выделенная как OUTDOOR MODULE (внешний модуль) используется для измерений наружных (на улице) температуры и влажности.

Наружный и внутренний модуля соединены трёхпроводной линией – «земля», «+» и сигнальный провод. Микроконтроллеры модулей общаются по протоколу 1-wire, где внутренний модуль- ведущий. Это конечно несколько усложнило конструкцию внешнего модуля, но результат налицо. В результате такого решения удалось отнести внешний модуль на десятки метров от внутреннего. С «чистой» шиной I2C такой результат недостижим- буквально на 5 метрах начинались «глюки». В результате дополнительных экспериментов по применению 2-х транзисторного «драйвера» шины 1-Wire удалось получить расстояние в 80м! Кабель, как ни странно, желательно использовать не экранированный-меньше погонная емкость.


Ведущий посылает в линию 1-wire запрос «запустить преобразование всех датчиков», который совпадает со стандартным запросом для датчиков DS18B20 ($CC+$44), что удобно с точки зрения программной реализации- одним запросом «запускаются» все 1-wire устройства. Ведомый МК принимает этот запрос, и инициирует преобразование влажности и температуры(МС HTU21D)по «своей» шине I2C. После окончания преобразования полученный результат считывается внутренним модулем. При этом наружный модуль не мешает работе датчиков DS18B20(которые можно подключить в линию в любом месте), независимо от режима работы- будь то замер температуры или считывание ROM. Если наружный модуль не подключать, устройство сохраняет работоспособность, но данные будут искажены.


После сборки устройства (или до)необходимо запрограммировать микроконтроллеры устройства- саму Arduino и МК ATtiny13a наружного модуля. ПО написано в среде Algorithm Builder ( почти ассемблер ), поэтому прошивки публикуются «как есть», полнофункциональные, в виде готовых «хексов».

В архиве есть 2 файла – DM_indoor_V1_nano.hex (для Arduino Nano 16 MHz) и DM_outdoor_V1_tiny13a.hex (для наружного модуля). Для «заливки» в Arduino готового «хекса» есть несколько программ, например X-loader и GC-uploader.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
На странице автора программы GC-uploader хорошо описана процедура загрузки при использовании этих программ. После «заливки» «хекса» Arduino останется Arduino-й, т.е. при необходимости в неё можно при помощи Arduino IDE «пролить» какой-нить скэтч.


С программированием Arduino проблем быть не должно(если прочитать указанную выше ссылку на help)- выбрал «хекс», выбрал порт, нажал «программ» и вуаля.


«Тиньку» же придется «прошивать» при помощи программатора и одной из множества программ, например, ProgISp. Последняя кстати, замечательно работает с дешевым программатором USB ISP с родины Мао.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Известный сайт с тех же краёв на запрос «AVR USB ISP» предложит несметное количество этих программаторов по цене 2-3х «Эскимо».

Конечно, "заливка" чего-либо не из Arduino IDE- это несомненно «два», но кто сказал, что будет легко? иначе никак… Можно конечно было использовать ещё одну Arduino, но она великовата для конструкции наружного модуля, описанного далее. Хотя, возможно…


В общем, для ATtiny13a надо запрограммировать fuse-биты и "залить" прошивку.

Состояние Fuse-bit для ATtiny13a  в данной конструкции должно быть такое

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Написал небольшой ликбез процесса программирования МК ATtiny13a  c картинками.

Если возникнут проблеммы при программировании  - пишите.


После правильной сборки и программирования  настроек "железа" не требуется. Перед включением необходимо пройтись по соединениям, включить устройство. Причем  во время работы желательно не подключать кабель USB ПК-Arduino, т.к. в схеме используется интерфейс UART- могут быть конфликты. Используйте плату Power board.


После подключения проверить наличие напряжения 3,3V на выходе стабилизатора (C2). На дисплее должна появиться заставка. Если всё ок- входим в режим настроек. Для этого выключаем питание, нажимаем кнопку S1 и её удерживая включаем питание (кнопку продолжаем удерживать). Примерно через 2-3 сек. На дисплее появится надпись «SETUP MODE». Так же будет выведена информация о SSID и пароле WiFi, периоде отправке данных, которая хранится в памяти прибора.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Кнопку отпустиь.

Для изменения настроек (П.2) необходимо нажать кнопку еще раз. Появится надпись WEB SETUP.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Кнопку отпустить.

В WI-FI сети появится точка доступа Dozor_meteo. Необходимо подключится к ней и зайти (набрать в окне любого браузера) на адрес 192.168.4.1.

Откроется окно

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Тут необходимо ввести название и пароль домашней точки доступа( первые 2 поля), и 3-е поле –период отправки данных на сервер.. Тут рекомендуется установить значение Т>300 сек. Доступный диапазон – 60- 999 сек. Но для установки периода Т< 300сек. необходимо ознакомится с условиями на сайте narodmon.com . Кратко- если у пользователя нет бонусов, период отправки не может быть меньше 300 сек. Иначе при рецидивном нарушении данного требования устройство может быть заблокировано.

Нижнее поле- MAC устройства. Это значение MAC необходимо указать при регистрации своего устройства на сайте narodmon.com .

SEND- сохранить введённые значения. Если поле «AND EXIT» отметить, то после нажатия на SEND устройство будет перезагружено и войдет в основной режим работы.


Регистрация дополнительных датчиков температуры.


В устройстве прибора по схеме, приведенной выше, есть датчик давления BMP180. В нем есть встроенный датчик температуры, он используется для измерения температуры внутри помещения. Температура на улице измеряется при помощи датчика температуры, входящего в состав датчика влажности HTU21D. Дополнительно, при необходимости, можно подключить до 3х датчиков температуры DS18B20. Датчики подключаются к разъему SV1, можно параллельно линии, идущей к наружному модулю. Можно в любом месте линии.


Процесс регистрации.


При выключенном устройстве нажать кнопку S1. Удерживая кнопку нажатой включить устройство. Через 2 секунды на экране появится надпись SETUP MODE.

Кнопку отпустить.

Нажать кнопку. Появиться надпись WEB SETUP. Кнопку не отпускать. Через 3 сек появится надпись DS SETUP.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Кнопку отпустить.

Далее необходимо (правильно!) подключить датчик DS18B20 к разъему SV1 и коротко нажать на кнопку. Если процедура выполнена верно - на экране будет отображен серийный номер датчика . Датчик Т1 зарегистрирован в приборе.

Далее необходимо отключить датчик Т1 и подключить датчик Т2 (если он необходим), и коротко нажать на кнопку. Очередной датчик (Т2) занесен в память устройства. Далее регистрируется датчик Т3. Т.е. получается такой алгоритм:


- войти в режим регистрации DS SETUP, отпустить кнопку;

- подключить датчик Т1, коротко нажать на кнопку;

- отключить датчик Т1, подключить Т2, короткое нажатие;

- отключить датчик Т2, подключить Т3, короткое нажатие;

Следующее нажатие инициирует выход из режима настойки.


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


Подробно о эксплуатации, подключении назрузок,  регистрации устройства на сайте narodmon.com,  управлении со смартфона можно прочитать в полном руководстве.


1. Файлы проекта (схема, прошивки, ликбез по прошивке МК ATtiny)

2. Прошивка любого HEX-файла в ARDUINO


Конструкция наружного модуля станции  ДОЗОР meteo


Если есть желающие повторить конструкцию, опишу один из вариантов устройства наружного модуля.

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

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Для изготовления необходимы

1. Пластиковая труба D25mm 25-30 см. Можно использовать водопроводную «под пайку» либо трубу для кабелей.

2. Заглушка сантехническая под систему D32mm. 1 шт

3. Хомут крепления для трубы D25mm -2шт.

4. Клеевой состав ( герметик, «эпоксидка», клей «Титан»)


На одном конце трубы необходимо с отступом от края 5-8мм (до края отверстия) просверлить отверстия D4-6мм 4-8 шт.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Обработать край крупным наждаком либо поцарапать, например ножом. Также желательно обработать внутреннюю поверхность заглушки.
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Необходимо изготовить центрирующую гильзу, например из картона. Лучше взять картон не толстый, отформовать его «гармошкой».
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Затем его надо зафиксировать примерно так. Так как внутренний диаметр заглушку больше наружного диаметра трубы, щель между ними с отверстиями в трубе образуют канал естественной вентиляции (тяги).
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

На внутреннюю грань заглушки нанести валик клея или герметика. С клеем усерствовать не надо- до отверсий в трубке клей не должен "добраться".

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Одеть на трубку и оставить сохнуть, в зависимости от клея- до 24 часов.
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
После полимеризации клея узел должен выглядень примерно  так
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Затем в трубку вставляется плата внешнего модуля, так чтобы плата оказалась дальше (выше) середины трубки. И фиксируется. Самый простой вариант- стяжкой. Можно двумя .
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

При вертикальной установке такая конструкция обеспечивает хорошую дождезащиту, но при этом за счет естественной вентиляции внутри плата датчика постоянно обдувается восходящим потоком, обеспечивая верность показаний температуры и влажности. Был проведен эксперимент- на корпусе модуля с наружной стороны примерно посередине расположил доп. датчик температуры DS18B20 (тоже в тени), который фиксировал температуру на улице вместе с наружным модулем. При этом показания доп. датчика в светлое время суток были всегда на 0,5 – 0,8 град. больше, чем внутри модуля. Ночью же показания практически сравнивались. Объяснением (один из вариантов) этого может быть тот факт, что доп. датчик дополнительно нагревался ИК-излучением от посторонних объектов.


Модуль необходимо закрепить к стене при помощи кронштейнов в месте, защищенном от прямых солнечных лучей. Крепить надо заглушкой вверх!!! (мало ли...).

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Будтобы все...


Материалы:


1. Файлы проекта (схема, прошивки, ликбез по прошивке МК ATtiny)

2. Прошивка любого HEX-файла в ARDUINO

Показать полностью 22
31

STM32F429I Discovery + SDRAM + LTDC под Arduino IDE

Сижу на карантине и придумываю себе сложности. Дома валяется STM32F429I Discovery, вот и решил проверить возможности Arduino IDE для программирования STM32 и данной платки в частности.


Для начала нужно поставить STM32 Cores под Arduino IDE. Детально этот процесс расписан тут https://github.com/stm32duino/wiki/wiki/Getting-Started так что не буду повторяться, тут ничего сложного.


Мне немного не повезло, так как именно этой платки нет в этой сборке, но это не проблема. Можно добавить практически любую стандартную отладочную STM32 вручную, так как драйвера есть в комплекте под большое количество чипов. Вот тут лежит инструкция по добавлению новой платы https://github.com/stm32duino/wiki/wiki/Add-a-new-variant-(board) Но я напишу вкратце со своими конфигами:


1) добавить плату в файл boards.txt (у меня он находится тут ...\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.8.0\boards.txt) - тут нужные строки  - https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/bl...

2) добавить настройки пинов для платы - в папку ...\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.8.0\variants добавить папку https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/tr...


Теперь в меню выбора плат в Arduino IDE в разделе Discovery появится наша платка.


После добавления платы я проверил все стандартные возможности:

цифровые входы/выходы, аналог, шим, уарт, SPI, I2C, прерывания, freertos и т.д.

В большинстве случаев все отлично работает, но некоторые вещи с дополнительными костылями под stm32


Также отлично завелся гироскоп, который есть на плате через библиотеку Adafruit_L3GD20 (только старую, в которой есть SPI, а не I2C)


После этого всего я дошел до экрана и тут началось веселье. Контроллер экрана здесь стоит ILI9341, поэтому для начала я попробовал завести его через SPI и библиотеку Adafruit_ILI9341. С небольшими допилами это получилось - нужно было добавить вручную инициализацию пинов под SPI:


__GPIOC_CLK_ENABLE();

__GPIOD_CLK_ENABLE();

__GPIOF_CLK_ENABLE();

GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.Pin = GPIO_PIN_2;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_LOW;

HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_13;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_LOW;

HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF5_SPI5;

HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);


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


Сначала прикрутил SDRAM  https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/bl...

командами SDRAM_Read8 и SDRAM_Write8 можно записывать/считывать значение в памяти по адресу.


После этого прикрутил LTDC - для работы экрана через память - https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/bl...

команда PutPixel меняет цвет пикселя по координатам x, y


Осталось только перевести экран в соответствующий режим работы, для этого нужно задать набор команда по SPI конроллеру ILI9341 - для этого я использовал все ту же библиотеку Adafruit_ILI9341, в которую дописал функцию begin_ltdc() - доработанные файлы библиотеки также лежат в репозитории.


Ну и видео на котором можно оценить разницу в скорости работы двумя методами: заливка экрана черным > синим > красным с задержкой в одну секунду через SPI и LTDC.

Кстати тачскрин тоже работает, для этого нужна библиотека Adafruit_STMPE610, тут только пини для I2C надо правильные задать.


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

Показать полностью 1
595

Кто хочет подтянуть электронику и программирование?

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

Narodstream.ru
istarik.ru
Robocraft.ru
Avislab.com
Hubstub.ru
Blog.radiotech.kz
Mcu.by
Smartmode.info
Eax.me
Catethysis.ru
TheMagicsmoke.ru
Microtechnics.ru
Myelectronics.com.ua
Count-zero.ru
Avr-start.ru
Radiolaba.ru
chipenable.ru
pluspda.ru
Milbestore.ru
Wifi-iot.com
Stepwood.com


cdeblog.ru
dmitrysnotes.ru
http://zorin.ru/notes:stm32:start
wiredlogic.io/
https://bestschemes.ru/

@moderator, не сочти рекламой, это в просветительских целях для

https://alexgyver.ru/lessons/

wasm.ru

http://easyelectronics.ru/

125

Из Arduino в С/C++ и мои первые шаги

Доброго времени суток уважаемые.

Вот, буквально недавно, я бился в судорогах наслаждения от того что научился мигать светодиодом на голом С/С++.

Из Arduino в С/C++ и мои первые шаги Arduino, Программирование, Микроконтроллеры, Длиннопост

Мем в полной мере отоброжает эмоции моей души. Просто представьте, делаешь что-то, упорно при упорно через ошибки, поражения и тут на тебе - заработало, понял суть!

Немного Story of my life:

Раньше я вообще ни каким местом не касался программирования, от слова совсем! Ну было что-то в школе, техникуме - тогда это меня не интересовало и пропускал всё мимо ушей.

И вот, переломный день года так 2018 - был тихий вечер, мне 29 годиков, сижу залипший в YouTube, прилетает рекомендация - ролик Гайвера про Ардуино. Посмотрел и загорелся!!!

Из Arduino в С/C++ и мои первые шаги Arduino, Программирование, Микроконтроллеры, Длиннопост

Закупился набором с Алика и давай познавать основы основ.

Наигравшись с дисплейчиками, кнопками, шаговыми моторчиками, RFID и т.д., начал обдумывать более реальные, полезные вещички.

Не-не, я не стал выдумывать миллионный "умный" дом который по факту умным и не является вообще, разве что автономный. Я хотел найти полезность микроконтроллеров в своей профессии - электромонтёр. Автоматизировать некоторые процессы, сделать более точные инструменты для работы и так далее. Плюсом в этом является то, что не отрываясь от своей основной профессии (которая мне нравится), я смогу изучить другое направление при этом, это направление сможет отлично дополнить мою основную деятельность + развитие.

Первым результатом всех поисков стали опыты приминения Arduino в цепях переменного напряжения 220...380В:

- Как Arduino запускает эл.двигатели 7 и 15 кВт одновременно.

- Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор.

Получил бесценный опыт для себя.

Думаете я на этом остановился? Неет. Начал засматриваться на другие МК, такие как Attiny13..85. Они подходили отлично под мои задачи, простые задачи. Применение Atmega328, которое пихают везде где надо но в основном где не надо, в этих задачах - это излишки мощности и много-много свободных незадействованных ножек. Attiny13 или же 85 это отличный вариант в простеньких проектах

Из Arduino в С/C++ и мои первые шаги Arduino, Программирование, Микроконтроллеры, Длиннопост

Со временем стал понимать, оболочка Arduino в Attiny13 очень существенно потребляла память, замедляла некоторые процессы ну и всё то что давным давно расписано на форумах и статьях.

Выход был один - писать код на С/С++ в Atmel Studio. Была загвоздка - я ни фига не шарил в этом.

Скачал даташиты, посмотрел парочку уроков в YouTube и понеслась - первое знакомство с регистрами.

Из Arduino в С/C++ и мои первые шаги Arduino, Программирование, Микроконтроллеры, Длиннопост

Скажу честно, прыгнуть с Arduino в регистры МК - не очень приятное занятие. Возникает чувство что всё что ты изучил в Arduino, типа millis(), pinMode, digitalWrite и т.д. это всё коту под хвост.

Вроде бы код написанный в оболочке Arduino или Atmel Studio выполняет одно и тоже, но состав кода отличается конкретно.

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

Но, пару вечеров на неделе, несколько десятколв роликов на YouTube и вауля... стало получатся. А какой же "выхлоп" я получил от этого - более быстрая работа МК, там где в ардуино занимало 1Кб памяти, стало занимать 200 байт, отсутствует лишняя переферия.

Вот так произошло моё первое знакомство с языком C/C++.

Показать полностью 2
953

Delphi - 25 лет

Надо же, уже 25 лет прошло с тех пор, как появился Delphi.

Уже никто и не помнит, что тогда ни одна СУБД не содержала толкового языка программирования. И еще не существовало средств быстрой разработки пользовательского интерфейса. Т.е. те окошки, которые сейчас программист может нарисовать за 5 минут, требовали нескольких часов (а то и дней) программирования.

А еще - все ждали появления толкового средства разработки для Windows.

И вот - появился Delphi. Для Windows. C обновленным Паскалем. C фантастическими на тот момент возможностями по разработке интерфейса. С фантастически удобной средой.

И с возможностью работать с базами данных. Практически любыми! Что тогда тоже было почти фантастикой.

Само название - Delphi - намекало на то, что даже для самой мощной на тот момент СУБД - Oracle - это средство позволит построить всю нужную инфраструктуру. Как Дельфы вокруг Дельфийского оракула.

И сколько программистов перешло тогда с С и С++ на Delphi, вы бы видели!

Хочется сказать за это спасибо Филиппу Кану, основавшему Borland и выпустившему этот продукт.

Delphi - 25 лет Программирование, Delphi, Net
87

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика

В прошлой части я обозревал механическую часть моего проекта. Ну а теперь настало время рассказать об электронике. Я взял ручку газа от своего старого электросамоката, достал из неё все потроха и вставил свои. Родной датчик Холла в ручке приказал долго жить, потому был заменён на новый. Светодиоды сменил на цилиндрические 3мм и подпилил, чтобы влезли в корпус. Для экономии проводов и пинов на центральном микроконтроллере, я использовал сдвиговый регистр 74HC595N (на фото не попал, но смысл ясен) и подключил всё это к косе проводов от руля до блока управления на раме

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Были куплены 2 батареи 6S1P (6 банок последовательно, 1 параллельно) на 4Ач каждая. Для них был спаян переходник на XT90 коннекторах для последовательного соединения

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Сердцем и мозгом всего этого стала плата разработчика Arduino Nano, которая была заботливо уложена в корпус старого автомобильного инвертора вместе с регулятором оборотов и вентилятором охлаждения. Главной задачей микроконтроллера было преобразовывать и фильтровать аналоговый сигнал датчика Холла в рукоятке газа в ШИМ сигнал для регулятора оборотов двигателя. Помимо этого на нём висит обязанность контроля плавности разгона, управления "габаритами" и "стопами" на задней диодной адресной ленте, регулирование оборотов куллера в центральном блоке, отслеживание температур в двигателе и регуляторе оборотов двигателя, контроль заряда батарей и последующая передача этой информации на индикаторы в ручке газа

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Глаза боятся, а руки паяют. Соединений и правда много, но всё работает исправно и вибраций не боится, проверено 1 сезоном использования

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Итоговый результат выглядит сильно эстетичнее

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Ну а после этого пошли первые тесты сего монстра. Максимальная скорость на испытаниях была 49 км/ч. Но, как в последствии выяснилось, Ультрабайк может ехать даже 52 км/ч! Запас хода от 6 до 10 км в зависимости от стиля езды и скорости, чего мне за глаза хватает. Зарядка в быстром темпе занимает менее часа. Адреналин от езды на нём бьёт через край, машины при разгоне запросто обгоняет, при резком ускорении может и перекинуть на спину) Без заднего тормоза, конечно, тяжелее, каждый раз боюсь, что вилка не выдержит и сломается при резком торможении. В последствии планирую использовать рекуперацию, для торможения задним колесом, поскольку обгонной муфты в этой системе нет. Ну и главное, цена этого проекта без цены самого велосипеда стала всего 600 долларов, что смело укладывается в рамки разумного, ведь велосипеды с такой же мощностью стоят куда дороже. Сумка для аккумуляторов позволяет увеличить объём батарей в 2 раза, а если перейти на 18650 и забить весь внутренний треугольник рамы, то можно будет достичь запаса хода и в 50 км, но мне этого не требуется. Главная задача Ultrabike`а - доехать до работы с ветерком и довольной харей:)


Двухстрочный LCD экран был установлен временно для диагностики при калибровке
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

В начале торможения светодиодная лента часто мигает в течении 5 секунд для привлечения внимания, потом начинает гореть постоянно ярко. Когда тормоз отпущен, светится "в пол накала"

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Ну и несколько фоток в итоговом виде:

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

На самом деле в проекте было множество мелочей, которые я не упомянул. Например, пропихивание датчика температуры в обмотки двигателя, вклеивание тактовой кнопки в ручку тормоза и прочее, и прочее. Я решил оставить это без особого внимания, да и не всё успевал задокументировать. Считаю, что информации получилось и так достаточно:) Тем кто осилил до конца - большой респект! :D

Показать полностью 13
74

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика

В связи с тем, что до работы мне ехать всего 2км, то тратить ресурс машины на это в летнее время кажется бессмысленным. Ну а пешком ходить мне лень:) Потому было принято решение осуществить мою давнюю мечту - собрать из моего фрирайдового велосипеда Norco Rampage электробайк. Задача стояла в получении максимальной мощности и скорости при небольшом запасе хода и минимальной цене. У меня уже имелся в наличии бесколлекторный двигатель, который я когда-то ставил на электроскейт, но у него были разбиты все подшипники. Двигатель имел максимальные обороты в районе 7500 при напряжении в 50 Вольт и мощность 2250 Ватт. В конечном итоге это мне сэкономило около 100 долларов.


Итак, начало проекта - самая первая деталь и первый мой чертёж со времён школы:D Изначально это был вал от ротора автомобильного стартера со снятыми обмотками. На чертеже то, во что он должен превратиться, а именно в новый вал для моего двигателя, поскольку старый сильно повредили разбитые подшипники. Чертёж я отнес в цех к нашим соседям, которые занимаются обработкой металла. "Loziska" в переводе с чешского означает "подшипники" - токарь меня попросил обозначить их местоположение на чертеже

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Примерка ведущей звезды на выходной вал редуктора

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Приваренная звезда. Соотношение шестерён в редукторе 3,9:1

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Второй чертёж - переходная пластина между посадочным местом статора двигателя и планетарным редуктором бывшего стартера

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Пока токарь изготавливал пластину, я решил покрасить ротор и опорную пластину ротора в суровотехнический оранжевый цвет. На фото нанесение грунтовки

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Готовая пластина

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

После сварки ведущей звезды и вала я привёл в порядок швы, чтобы цепь хорошо вкладывалась в пазы звезды. Примерил всё это в корпус

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Ниже на фото сам корпус бывшего стартера (вернее, его половина), редуктор, переходная пластина и ось двигателя

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Собрал всё воедино и проверил - работает отлично, без биения, но шумно - явно не хватает смазки в редукторе. Позже залил туда графитовую смазку для ШРУСов, которая вполне отлично справляется со своей задачей

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Начинаем думать над креплением всей тяговой установки к байку. Поскольку рама имеет пожизненную гарантию, то сверлить и вариться к ней нельзя. Значит будем крепиться к опоре сидушки. Использование 8мм листа железа будет очень кстати для добавления жесткости конструкции. Однако обработка такого куска металла, да еще и с фрезеровкой овальных отверстий при условии отсутствия фрезера, да еще и под углом к поверхности... короч, несколько дней мучений (делал это в свободное от работы время) и готово

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Итоговая конструкция. Обработку швов еще не делал

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Дальше речь пойдёт о приводе. Снимаем задний тормозной диск и калиппер (на фото уже снят) и примеряем туда ведомую звезду

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Выясняется, что нужна еще одна переходная пластина между посадочным местом тормозного диска и крепёжными отверстиями звезды. Делаем чертёж

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Внимательный читатель заметит, что звезда несколько видоизменилась. Да, это так, первые звёзды, которые я нашел на складе оказались с нюансом. Подобрать цепь к их шагу было очень сложно. Как мне сказали в магазине, такая цепь применяется на некотором количестве японских двигателей в качестве привода ГРМ, цена и доставка которой были просто возмутительны. Я решил купить полностью новый комплект цепи 3/8x5,8 со звёдами, который мне обошёлся более чем в 2 раза дешевле, чем просто цепь под первый тип звёзд. Получилось вот так:

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Продолжение следует...)

Показать полностью 18
41

Помогите с реализацией. Подсветка комнаты на адресной светодиодной ленте

Привет друзья! Являюсь абсолютным новичком в проектах на базе ардуино и адресных светодиодных лент, так что заранее прошу понять и простить)

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

Вообщем, имеем ТЗ:

1) Помещение, условно 3х6 метров.

2) Подсветка будет располагаться в профилях с круглым рассеивателем по потолку с широчайших сторон комнаты параллельно друг другу.

3) В программный код планируется вносить некоторые корректировки

Добавление эффекта "Пылающего северного сияния" (Добавление цветовой схемы в эффект огня)

Различные одноцветные подсветки с изменением уровня яркости с помощью регулятора

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

Теперь переходим к возникшим вопросам.

1) Как лучше соединять ленты - параллельно или последовательно?

2) Какой следует брать блок питания исходя из плотности ленты в 60 на метр?

3) Вытянет ли ардуино нано подобную схему или следует брать какие то другие аналоги?

Если данные темы уже поднимались и решались,моя идея сильно не нова и на данном форуме/сайте/ютубе уже есть исполнения подобных затей, уважаемые админы, можете смело блокировать тему, и желательно кинуть ссылку на решения.

Но если все же мой "проект" вызвал в ком то интерес, то прошу помочь с подбором компонентов, советом, тапком, бубном и добрым словом! ;)

P.S. Если мой проект найдет отклик, то обязательно отсниму отчет по реализации. Так же приму помощь по скетчам за еду, бесконечный респект, или условную плату :Р

Всем вселенского добра!

Помогите с реализацией. Подсветка комнаты на адресной светодиодной ленте Помощь, Arduino, Светодиоды, Программирование, Видео, Длиннопост
Показать полностью 1
26

Прошу помощи - непонятки с датчиком препятствия.

Здравствуйте, уважаемые ардуинщики!

Помогите, пожалуйста, новичку.

Сразу скажу, что перед тем, как задать вопрос, искал решение около часа, но ничего подобного не нашёл.

Суть в следующем:

К Arduino Nano подключен датчик препятствия. При срабатывании датчика препятствия, на Arduino должен зажигаться светодиод (тот, который на 13 пине). По факту - светодиод зажигается сразу. В мониторе порта так же видно, что ардуина считает, что с датчика пересечения всё время идёт сигнал о том, что есть препятствие.

НО!

Если положить палец между пином D3 (к которому подключен датчик) и D4, то всё начинает работать как надо.

Что пробовал:

1) Сменить саму плату Arduino и датчик (есть несколько разных от разных производителей)

2) Сменить провода, которыми подключен датчик к Arduino

3) Сменить USB-провод

4) Сменить источник питания (ПК, павербанк)

5) Менять пин, к которому подключен датчик препятствия

6) Менять напряжение, от которого запитан датчик (3,3В/5В)

7) Попробовал загрузить несколько готовых скетчей, дабы исключить ошибку в коде.


Ничего не помогло, так что, видимо, я сам дурак, только вот в чём именно дурак - понять не могу.


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


Помогите, пожалуйста!

Заранее спасибо!)

99

Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор.

Всем привет.
Появился повод написать продолжение своего опыта использования Arduino в коммутации силовых цепей до 1000В (0,4 кВ). А именно, автоматизированный запуск асинхронных (короткозамкнутых) эл.двигателей.
Как всё начиналось в глубочайших подробностях можно почитать тут.
Ну а я начинаю свою историю...
25.10.2019 в 17:05 по МСК раздается звонок на моем сотовом телефоне. Позвонил коллега пенсионного возраста - "Выходи в субботу на работу, твоя приблуда накрылась!".
Мои мысли начали тут же гулять вокруг одной причины - накрылись оптроны PC817, так как из всей схемы только у них была большая вероятность выйти из строя.

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

Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост
Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост

Сгорели два резистора и один симистор на включение звонка. Оптрон MOC3063 под вопросом.

Пораженные элементы отметил кружочками на схеме:

Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост

Остальные же элементы схемы и само Arduino исправны и функционируют отлично, ни каких сбоев.

Начинаем анализировать и первая версия это Короткое Замыкание (КЗ). Но предохранитель F2 (5А) целый, ни каких признаков КЗ между симистором и предохранителем нет. Да и единственное место, где могло возникнуть КЗ - это звонок или линия питания между звонком и шкафом управления. В самом симисторе КЗ делать нечего, по простому - симистор либо пропускает фазу, либо нет. Проверили всю цепь - ни чего не нашли.

Спрашиваю у коллеги - "Ты что-то делал?".

Оказывается, был поменян звонок из-за механического износа. В новом звонке просто на просто не подсоединили RC-фильтр

Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост
Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост

С другой стороны, имеется RC-фильтр у симистора, но почему-то он не смог защитить симистор

Может у вас есть мнения или совет на эту тему?

Я думаю что немного неверно подобрал RC-фильтр и резисторы R11 и R12. А возможно симистор был плохого качества и не выдержал столь мизерную нагрузку как звонок.

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

А теперь стоимость запчастей для замены:

Симистор BTA16-600 - 35 руб.

Два резистора - 2 руб.

И всё таки, я получил ценнейший опыт и нельзя пренебрегать различного рода фильтрами для защиты ваших цепей.

---

На этом у меня пока всё. Продолжаем наблюдение работы моего прототипа ПЛК.

Всем добра!

Показать полностью 3
147

Считываем кнопки и датчики не смотря на длительные задержки в программе - Аппаратные прерывания - Arduino для начинающих

Продолжаем рубрику для начинающих ардуинщиков :)


На этот раз поговорим об аппаратных (внутренних) прерываниях в Arduino (ATmega328P).

Например, они пригодятся для ситуаций, когда у вас большая программа с кучей функций delay и других задержек (что ужасно), но вам никак нельзя пропускать определенные события - нажатия кнопок, срабатывания датчиков и т.д.


Краткая выжимка из видео:

- Что такое аппаратные прерывания и как они работают (0:33)

- Смотрим информацию о прерываниях в datasheet на микроконтроллер ATmega328p (2:38)

- Пишем программу для внешнего прерывания по кнопке (6:24)

- Наблюдаем дребезг контактов на графике осциллографа (14:47)

- Пишем простую программу для борьбы с дребезгом контактов (16:00)

- Получаем домашнее задание (22:30)


Программа с настройкой прерываний по кнопке, позволяющая обойти дребезг контактов: Google Drive

Удачных компиляций! :)


P.S.: Если вы еще не состоите в сообществе "Arduino & Pi", милости просим сюда.

68

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32

Захотелось мне как то сделать инфракрасную паяльную станцию. Начал я смотреть разные сайты с готовыми схемами и решил сделать по-своему. Так же среди этих сайтов был и Пикабу, человек очень хорошо описал фазовое управление и алгоритм Брейзенхейма (тут ссылка на статью )Ардуино и управление мощной нагрузкой переменного тока или самогонный аппарат 2. но мне не понравилась идея использовать 2 контроллера.
Задание для себя было таким:
• Два ПИД регулятора для верхнего и нижнего нагревателей;
• Соответственно 2 датчика температуры (для каждого регулятора свой);
• Управление с энкодера и встроенной в него кнопки;
• Отображение на дисплей SSD1306 (128x64 т.к. был)
• Отсылка данных в ПК через USB-CDC;
• Фазовое регулирование (алгоритм Брейзенхейма)
• Малошумящее управление тиристорами (MOC3063)

Мозгом паяльника стал STM32f103 или в народе BluePill. Сконфигурировал его в CubeMX и понеслось.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

Измерение температуры сделал на термопарах с усилением их сигнала на отдельной плате-усилителе (в моем случае я калибровал для каждого канала отдельно каждую термопару). Если будете повторять, лучше сделать на модуле max31855, но придется немного изменить код и схему (там не много просто я занял оба SPI, но место еще есть, луче использовать SPI2) .
В основном меню устанавливаем температуру, поворотом энкодера, значения сохраняются во флеш. Если вам не нужен верх, то можно установить 0 в задании температуры.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

Так же есть подменю с настройками ПИД регуляторов, тут перемещение нажатием кнопки на энкодере а поворот устанавливает значение.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

ПИД регулятор получился не такой как все =). Его интегральная часть это единица времени, а не просто безразмерный коэффициент как в других цифровых регуляторах. Все цифровые регуляторы дискретны (мои срабатывают каждые 500мс(можно сделать быстрее если нужно)), за это время интегральная часть закидывает в буфер текущее значение ошибки регулирования. Дальше берется сумма этого буфера и вот мы получаем интеграл. Вот тут то и отличие, те регуляторы, что я видел, берут сумму всего буфера и умножают на безразмерный коэффициент. У моего регулятора интегратор это и есть число выборок, которое нужно взять. Допустим, время интегрирования установлено 10 т.к. частота дискретизации регулятора 0,5 с 10*0,5=5 секунд. Следовательно, регулятор будет использовать интеграл изменения ошибки за последние 5 секунд. Максимум 256 выборок. Хотел сделать, что то похожее с дифференциальным звеном, но чет забил. Там можно было бы уменьшать время для следующего отчета ошибки для диф. звена, но тогда придется слишком часто дергать АЦП, а нам еще данные по ЮСБ отправлять и на экран.
Чтобы получать данные по USB нужно установить драйвер от STM usb-cdc. Потом у Вас появится ком порт, куда каждые 500мс будут отправляться данные. Можно не использовать эту функцию, ну а если решите написать ГУИ, то в коде вся строка отправления лежит за sprintf. Так же можно отправлять команды на управление. Например, чтобы установить температуру верха нужно закинуть строковые “Ch5”+ 2 байта значение температуры (0x01ff-511 градусов).
Использован широко известный экран i2c на контроллере ssd1306 (128x64), я использую свою библиотеку к нему (урезанный adafruit).
В силовой части использовал тиристоры BTA41-600. Они на 40А, но т.к. китайские, для нагрузки в 2кВт поставил 2 штуки параллельно (говорят так нельзя делать, но я надеюсь, Вы никому не скажете). Чтобы ими управлять и использую внешние прерывания при переходе синуса сети через 0. Сделано на самой обычной оптопаре, диодном мосте и паре резисторов (на схеме d1-4, u5). На печатной плате разделил силовую часть от слаботочной. Предохранителей никаких не ставил, потому что думаю запитать от автомата.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры
ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

С силовой частью все. Вот такое получилось устройство в сборе (пока без радиаторов). Нагружал силовую часть лампочками по 100Вт, все работает.

ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры
ИК паяльная станция, ПИД регулятор, фазовое управление, stm32 Электроника, Электричество, Своими руками, Длиннопост, Паяльная станция, Stm32, Микроконтроллеры

Остается сделать корпус, пока на это нет времени. Нагреватели уже куплены и лежат в коробочках. Нагреватели заказывал у компании Электронагрев, обошлись в 6 тысяч с доставкой в Уфу, но при получении у Деловых линии, возникли проблемы с тем, что у них висел какой то долг)). Через пару дней они закрыли долг и я смог получить свои нагреватели.
Что я бы изменил, если делал заново:
• Использовал max31855
• Не забыл включить вачдог)))
• Использовал freertos
• Дописал ГУЙ))
Схемы и ссылку на код прилагаю:
https://drive.google.com/open?id=1TT0NNhkICT5_5t9u4LS_0rpkKu...
https://easyeda.com/aminovilshat/Payalnik_ultra
З.Ы. я не занимаюсь профессионально программированием STM32, это всего лишь хобби. Но судите строго) кроме советов отказаться от HAL и СubeMX.

Показать полностью 6
227

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy

Little Game Engine (LGE) – это виртуальная игровая консоль выдуманной конфигурации, с выдуманным процессором и онлайн web-SDK, состоящий из компилятора С-подобного кода в ассемблер и дальнейшей перекомпиляцией его в машинный код с возможностью исполнения этого кода там же, в онлайн в эмуляторе.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Как видно из названия, заточен весь комплект на быстрое создания 2d ретро игр. Более 20 игр уже готовы, несколько в разработке.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Чтобы поиграть онлайн, перейдите по ссылке игры ниже, выберете «compile» и затем «run».


TankCity, 1916, FourINaRow, BlackJack, ZombieDefence, MicroRace, DwarfClicker, Galaxies, Memories, NinjaEscape, Mines, Breakout, TowerDefence, FlappyBird, WormBlast, ESProgue, Snake, FishLife, Columns, MarsAttack, CityRunner, Asteroids, Bashe

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Отдельный плюс в том, что эмулятор LGE virtual machine помимо онлайн версии написан и для ESPboy гаджета, который имеет сходную с LGE VM переферию воплощенную в железе и про который я уже писал.


* цветной экран разрешением 128х128,

* 8 кнопок,

* однобитный звук

* RGB светодиод

* подходящий по скорости эмуляции микроконтроллер ESP8266

* встроенную флеш память с файловой системой SPIFFS

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Таким образом можно загружать откомпилированные в онлайн LGE SDK игры в портативный ESPboy, брать его с собой и с интересом коротать свободные минуты.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Загружать игры можно, как по проводу (см. заргрузка файлов на spiffs), так и через WiFi. Удерживая при запуске ESPboy кнопку «B», мы превращаем гаджет в точку доступа, и подключившись к ее WiFi сети с именем «ESPboy» через браузер, попадаем в веб интерфейс файловой системы, где можно, как удалять файлы, так и загружать новые.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Остается только собрать гаджет, на что есть схемы, инструкции и kit набор для сборки, который вскоре будет доступен на tindie.com.

Наигравшись в существующие игры – можно довольно быстро начать писать свои.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Краткая спецификация LGE виртуальной машины:


- Набор из 108 инструкций навеян CHIP8/SCHIP и микропроцессором MOS6502.

- 16 регистров по 16 бит, нулевой регистр является указателем стека.

- Каждая инструкция двухбайтовая, некоторые инструкции содержат после себя два байта данных

- Адресуемая память 20Kб.

- Кроме обычных арифметических инструкций и инструкций перемещения данных, есть отдельные инструкции для работы со спрайтами, экраном и звуком.

- Размер экрана 128х128 пикселей, 16 цветов на точку, что занимает 8Kб памяти, еще столько же занимает буфер для рисования спрайтов и частиц.

- Обновление экрана около 20 кадров в секунду.

- Можно рисовать тайлы и 32 спрайта размером до 128х128 пикселей с возможностью вращения и зеркалирования.

- Поддерживается работа с частицами.

- Для экономии памяти можно использовать однобитные изображения или RLE сжатие.

- Присутствует упрощенная физика: обнаружение столкновений спрайтов со спрайтами и тайлами, разрешение столкновений, гравитация.

- Экран обновляется построчно, только если в строке произошло изменение пикселей.

- Скорость VM в зависимости от того, сколько строк отрисовывается в кадре, варьируется от 100 тысяч до 900 тысяч операций в секунду.

- Можно использовать разные цветные экраны, есть программное растягивание изображения.


Чтобы не писать напрямую в опкодах, в SDK входит самописный компилятор «LGE С», представляющий из себя «C» образный язык высокого уровня. На данный момент этому компилятору далеко до полной поддержки стандартов языка C и при компиляции можно легко столкнуться с непонятной ошибкой в непонятном месте. Зато он быстр, ведь он занимает меньше 2000 строк исходного кода, а также постоянно развивается.


LGE онлайн среда разработки с компилятором и эмулятором

Описание виртуальной машины LGE

Руководство по LGE компилятору «C» образного языка

Исходный код игр LGE на LGE C


На LGE SDK уже сделано не мало игр и можно продолжать создавать новые прямо сейчас, однако до совершенства далеко. Если кто-то желает принять участие в создании новых игрушек на LGE или улучшении самого LGE SDK, а так же если кто-то заинтересовался сборкой ESPboy, добро пожаловать на форум www.espboy.com.

Там постараемся ответить на все вопросы и помочь в реализации идей.


Всем добра и успехов в творчестве.


С уваженеием,

Роман

Показать полностью 5
12818

Озвучил стиралку в стиле кожаных ублюдков)

звуковой модуль jq6500 плюс stm32.


идея возникла потому, что стиралка никак не озвучивает окончание стирки и часто я забывал вытащить вещи, они там лежали по пол дня и кисли.


хотел сначала просто мелодию сделать. и тут понеслось...


основная проблема была снять сигналы с платы стиралки. для этого ее пришлось немного исследовать.

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


начало цикла стирки тупо по нажатию кнопки PLAY


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


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


простейший конечный автомат позволил найти нужный момент в этой цепочке.


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


после исследования платы я понял, что для динамической индикации используется матрица светодиодов 7 на 7.


далее решено было найти 2 входа (вертикаль и горизонталь) , состояние которых как то коррелировало с горением диода. с двухканальным осциллом это было не трудно.


В итоге , все получилось ))

Озвучил стиралку в стиле кожаных ублюдков) Своими руками, Кожаные ублюдки, Бот, Восстание машин, Stm32, Программирование, Видео, Длиннопост, Стиральная машина

Для питания был взять какой то развязывающий DC\DC преобразователь из 12в в 5в. Линейный стабик не вытянул звуковой модуль)

Показать полностью 1
80

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon

Введение


Есть у меня одно хобби: игра в Dungeon and Dragon.

Справка из википедии про игру:

В игре участвуют ведущий (так называемый «мастер») и несколько игроков, число которых варьируется в зависимости от редакции и пожеланий участников. Обычно один игрок руководит в игровом мире действиями одного персонажа. Мастер действует от лица всех неигровых персонажей, описывает окружающую среду и происходящие в ней события. В течение игры каждый игрок задаёт действия для своего персонажа, а результаты действий определяются мастером в соответствии с правилами. Случайные события моделируются броском кубика. Иногда решения мастера могут не соответствовать правилам. Это является Золотым правилом игры: «ГМ всегда прав», так называемым «мастерским произволом». Традиционно руководство игры или свод правил включает в себя три книги: «Player’s Handbook», «Dungeon Master’s Guide» и «Monster Manual». Также существуют различные дополнения, которые мастер может использовать по своему усмотрению. Иногда для игры используются различные карты, чтобы визуально изобразить ситуации в игре, также могут использоваться фигурки персонажей и их противников. Но основным, а иногда и единственным требованием для игры является наличие листов персонажей и набора кубиков — дайсов — игральных костей с заданным числом сторон (d4, d6, d8, d10, d12, d20, d100(процентовый кубик)).

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


Шкатулка-головоломка

Из мешка убитого вами упыря вываливается странная и явно необычная шкатулка… ваши действия?
Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

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

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

С правой боковой стенки написан текст загадки и изображен дракон.

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Получишь желаемое, если сможешь усыпить дракона в темноте и найдешь сочетание фонаря, что душу жжёт, меча, что рассекает миры, ключа, что откроет дверь.
Очевидная мысль, которая может сразу появиться при осмотре шкатулки проста: «Хэй, тут всего три рычага с двумя возможными позициями. Это всего-лишь девять комбинаций, которые можно подобрать поочередно и найти нужную!». То есть всё сводится к простому перебору… казалось бы, однако давайте перебирать комбинации.

Итак, первый вариант подобран и свет над левой дверцей загорается, сообщая о том, что она открыта.

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

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

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

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

Человека, который откроет дверь тут же обрызгает кислотной водицей (ладно, простой водицей) и если игрока заденет, урон получит соответственно его персонаж. Стоит отметить, что с левой боковой стенки находится еще одна запертая дверца, которая в такт брызгам будет открываться и закрываться, поддразнивая игроков. За ней видно сокровище — кольцо (на видео кольцо отсутствует). Однако о нем позже, продолжаем подбирать комбинации.

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

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Нажимаем и слышим пронзительный писк — мощная звуковая волна исходит из шкатулки, нанося урон всем трём героям. Что же, третья дверь и последняя испробованная комбинация и все являются ошибочными! В чем секрет? Подсказка кроется в тексте загадке:

Получишь желаемое, если сможешь усыпить дракона в темноте
На боковой стенке у нас имеется дракон, давайте же попробуем усыпить его… выключив свет! На задней стенке расположен фоторезистор, реагирующий на степень освещенности. Как только свет выключается, светодиоды на крыльях дракона загораются, сообщая о том, что тот уснул и игроки двигаются в решении загадки в правильном направлении.

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

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

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

По аналогии игроки коснутся всех трех артефактов и обретут желаемое сокровище.

Заключение


Вот такая получилась шкатулка-головоломка, которая смогла разнообразить наш игровой процесс в игре Dungeon and Dragon и над разгадкой которой игроки бились около двадцати минут. Поделкой остался в целом доволен, однако картон хотелось бы заменить на дерево, а отделку сделать более аккуратной. В планах есть идеи других подобных вещиц для игры в Dungeon and Dragons. Если у кого-то был похожий опыт или имеются идеи для реализации - круто было бы почитать в комментариях, возможно использую в будущем.

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

Шкатулка-головоломка на STM32 для игры Dungeon and Dragon Dungeons & Dragons, Stm32, Микроконтроллеры, Головоломка, Видео, Длиннопост

Рисовалась структурная схема второпях, могут присутствовать небольшие ошибки. Микроконтроллер использовался довольно популярный — stm32f103c8t6, расположенный на отладочной плате. При написании программы использовал стандартную библиотеку от производителя Standard Peripherals Library и среду разработки Keil uvision. Для управления светодиодами и тумблерами использовались выводы интерфейса GPIO, настроенные на выходы и входы. Водяной насос для обрызгивания игроков подключается через ключ на MOSFET транзисторе в smd корпусе, пачка которых у меня имелась при себе. Для звуковой ловушки использовался зуммер, который подключался через собранный мною простенький усилитель, опять же на MOSFET транзисторе. Сервоприводы управляются с помощью ШИМ, генерируемого одним из таймеров МК. Фоторезистор через делитель напряжения подключен к АЦП микроконтроллера, что позволяло регистрировать смену освещенности вокруг. Наконец, всё устройство имеет автономное питание от литий-полимерного аккумулятора и модуль заряда с защитой, выведенного на заднею стенку конструкции. Очень понравились емкостные сенсорные датчики TTP223, которые расположил под изображениями меча, фонаря и ключа — срабатывают при прикосновении даже через слой картона.

Показать полностью 9 2
77

Мой пятый урок по XOD IDE. Экран LCD 1602 I2C и простая метеостанция

XOD IDE - это графический язык программирования для arduino разработанный российской компанией Амперка.

Сайт XOD - https://xod.io

GitHub - https://github.com/xodio/xod


В видео мы научимся работать с экраном LCD 1602 i2c в XOD и сделаем простенькую метеостанцию.

Мой пятый урок по XOD IDE. Экран LCD 1602 I2C и простая метеостанция Xod, Arduino, Программирование, Микроконтроллеры, Метеостанция, Видео, Урок, Языки программирования
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: