15.03.2017, 10:25 | #1 | |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
Arduino на замену "кирпичу"
Продолжу тему развлечений с аналоговым макетом.
На соседнем форуме камрад озадачился заменой аналогового блока на ардуину. На скорую руку накидал скетч. Используется UNO и Motor Shield R3 По хорошему, энкодер лучше на прерывания вешать, но поскольку прерывания на UNO только на D2 и D3, а D3 используется моторшилдом, обойдемся и так. Можно, конечно на канал B моторшилда повесить. Но что имеем - то имеем. ТЗ: Включение/выключение питания отдельной кнопкой. Направление переключается тумблером. Управление при помощи энкодера Кнопка энкодера используется как "Экстренная остановка". (я бы сделал на ней вкл/выкл питания или смену направления) Сектч из двух файлов. Все, что может изменяться в файле dc_config.h Код:
#define TRACK_POWER_PIN 3 // PWM выход сигнала #define TRACK_DIR_PIN 12 // вход направления движения #define TRACK_AMP_PIN A0 // вход контроля тока #define TRACK_MAX_AMP 700 // максимальное значение на выходе контроля тока (0-1024) #define ENCODER_BUTTON_PIN 2 // вход кнопки энкодера #define ENCODER_A_PIN 4 // вход сигнала энкодера А #define ENCODER_B_PIN 5 // вход сигнала энкодера Б #define DIRECTION_SWTCH_PIN 7 // вход переключателя направления движения #define POWER_BUTTON_PIN 10 // вход кнопки включения/выключения #define POWER_LED_PIN 6 // выход светодиода индикации включения питания #define START_DUTY_CYCLE 127 // минимальное значение скважности ШИМ #define SPEED_STEP 28 // количество шагов энкодера #define Debug Serial #define DebugBaud 115200 //#define DEBUG Код:
#include "dc_config.h" #include <Bounce2.h> unsigned char encA; // состояние энкодера А unsigned char encB; // состояние энкодера Б unsigned char lastA = 0; // последнее состояние энкодера А int FwdRev = 0; // направление вращения энкодера: 0 против часовой, 1 по часовой int encoderPos = 0; // текушее положение энкодера int scaled = 0; // значение положения энкодера приведенное в диапазон 0-255 для PWM byte trackPWR = 0; // питание рельс: 0-выключено, 1 включено unsigned long currentTime; // текущее время unsigned long loopTime; // пследнее время выполнения цикла считывания состояния энкодера int dir = 0; // направление движения: 0 вперед, 1 назад float scale_step = (255 - START_DUTY_CYCLE) / (SPEED_STEP - 1); Bounce pwrBouncer; Bounce encBouncer; Bounce dirBouncer; void setup() { #if defined(DEBUG) Debug.begin(DebugBaud); #endif TCCR2B = TCCR2B & B11111000 | B00000001; pinMode(ENCODER_A_PIN, INPUT); pinMode(ENCODER_B_PIN, INPUT); pinMode(DIRECTION_SWTCH_PIN, INPUT); pinMode(POWER_BUTTON_PIN, INPUT); pinMode(TRACK_POWER_PIN, OUTPUT); pinMode(TRACK_DIR_PIN, OUTPUT); pinMode(POWER_LED_PIN, OUTPUT); currentTime = millis(); loopTime = currentTime; digitalWrite(TRACK_POWER_PIN, LOW); digitalWrite(TRACK_DIR_PIN, LOW); pwrBouncer = Bounce(); pwrBouncer.attach(POWER_BUTTON_PIN); pwrBouncer.interval(5); encBouncer = Bounce(); encBouncer.attach(ENCODER_BUTTON_PIN); encBouncer.interval(5); dirBouncer = Bounce(); dirBouncer.attach(DIRECTION_SWTCH_PIN); dirBouncer.interval(5); } void loop() { currentTime = millis(); if(encBouncer.update()){ if(encBouncer.read() == LOW){ digitalWrite(TRACK_POWER_PIN, LOW); encoderPos = 0; #if defined(DEBUG) Debug.println("ESTOP"); #endif } } if(pwrBouncer.update()){ if(pwrBouncer.read() == LOW){ trackPWR = !trackPWR; digitalWrite(POWER_LED_PIN, trackPWR); #if defined(DEBUG) Debug.print("POWER"); Debug.print("\t"); Debug.println(trackPWR); #endif } } if(dirBouncer.update()){ dir = dirBouncer.read(); digitalWrite(TRACK_DIR_PIN,dir); #if defined(DEBUG) Debug.print("DIRECTION"); Debug.print("\t"); Debug.println(dir); #endif } if (analogRead(TRACK_AMP_PIN) > TRACK_MAX_AMP) { trackPWR = 0; digitalWrite(TRACK_POWER_PIN, LOW); digitalWrite(POWER_LED_PIN, LOW); #if defined(DEBUG) Debug.println("SHORT CIRCUIT"); #endif } if(trackPWR){ if(currentTime >= (loopTime + 5)){ encA = digitalRead(ENCODER_A_PIN); encB = digitalRead(ENCODER_B_PIN); if((!encA) && (lastA)){ #if defined(DEBUG) Debug.print("ENCODER"); Debug.print("\t"); #endif if(encB) { if (encoderPos < SPEED_STEP) { encoderPos ++; } FwdRev = 1; } else { if(encoderPos > 0){ encoderPos --; } FwdRev = 0; } if(encoderPos>=SPEED_STEP){ scaled=255; } else if(encoderPos<=0){ scaled=0; } else { scaled = START_DUTY_CYCLE + encoderPos * scale_step; } #if defined(DEBUG) Debug.print(encoderPos); Debug.print("\t"); Debug.println(scaled); #endif } lastA = encA; loopTime = currentTime; } analogWrite(TRACK_POWER_PIN, scaled); } } |
|
|
8 пользователя(ей) сказали cпасибо: |
15.03.2017, 12:01 | #2 |
Заглянувший
Регистрация: 15.01.2012
Адрес: Минск
Сообщений: 30
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 7
Поблагодарили 12 раз(а) в 7 сообщениях
:
0 за это сообщение 0 Всего Репутация: на пути к лучшему (12)
|
BNSF9399, а не подскажите, в данном случае можно любой использовать любой моторшильд из нижеперечисленных (фото в спойле), или только как у Вас? (а то что то я два месяца назад заказал такой как у Вас, но он не дошел и продавец с легкостью вернул деньги, наверно явно не отсылал, так что все равно заказывать заново)
Скрытый текст
|
|
15.03.2017, 12:57 | #3 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
только как на нижнем фото.
Но, если исключить защиту или паять схему самостоятельно, то можно и от Амперки или Robotdyn использовать. На сколько я понимаю, на втором фото тоже без контроля тока на выходе шилд И еще момент, при питании на рельсах более 12 вольт, на шилде нужно перерезать перемычку иначе дуня сгорит к чертям. |
|
15.03.2017, 13:19 | #4 |
Местный
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,866
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,667
Поблагодарили 3,281 раз(а) в 1,177 сообщениях
:
0 за это сообщение 1 Всего Репутация: репутация неоспорима (3292)
|
Класс!!!
А алгоритмы плавного разгона - торможения будут? Чтоб как в цифре... Токовые датчики и как следствие управление стрелками и прочим ? |
|
15.03.2017, 13:38 | #5 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
я не планирую. там и так достаточно плавно все получается.
на "кирпичах" этого нет Заказчик, как я понял, хочет сделать эмулятор кабины машиниста. |
|
15.03.2017, 21:21 | #6 |
Fireman
Регистрация: 12.01.2012
Адрес: Большая деревня
Сообщений: 317
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 421
Поблагодарили 874 раз(а) в 190 сообщениях
:
0 за это сообщение 0 Всего Репутация: - просто великолепная личность (878)
|
К сожалению я не силен в программировании Arduino, эту тему да год бы назад. Было очень надо.
Я выкрутился по другому. Делал подобный аналоговый блок питания с управлением через планшет/смартфон через блютуз. Так как сам ничего придумать не умею воспользовался готовыми примерами для машинок роботов, перекроил под себя программу конструктор RemoteXY. Я реализовал только двиджение вперед/назад и четыре тумблера для включения в домиках света. Кстати в машинках роботах по два/ четыре независимо управляемых мотора. Для нас это два/четыре отдельных пути с раздельным аналоговым управлением. Чем мне понравился этот метод, что есть куча примеров со скетчами и готовый графический интерфейс конструктор с кнопками, тумблерами, движками, слайдерами и т. д. Как конструктор создаешь пульт управления перетаскивая на экран нужные элементы и пульт готов. При входе в редактор Ардуино эти готовые элементы становятяся куском скетча. Есть конечно и ложка дегтя - разработчик хочет небольшую денюжку. Но для таких как я не умелых это выход. Кнопку стоп я вывел на корпусе в котором смонтировал плату ардуино, драйвер моторов, блютуз модуль. Просто прерывал питание с БП. К сожалению фотографии не делал, сейчас эту схему разобрал в угоду Dcc++.
__________________
G-live steam... |
|
Пользователь сказал cпасибо: |
15.03.2017, 22:13 | #7 |
Заглянувший
Регистрация: 16.08.2012
Адрес: Ржев
Сообщений: 60
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5
Поблагодарили 63 раз(а) в 17 сообщениях
:
0 за это сообщение 0 Всего Репутация: скоро придёт к известности (63)
|
Радиатор бы не помешал. При длительных покатушках начинает ощутимо греться.
|
|
16.03.2017, 10:04 | #8 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
|
|
Пользователь сказал cпасибо: |
06.08.2017, 13:49 | #9 |
Заглянувший
Регистрация: 07.09.2015
Адрес: SPb
Сообщений: 76
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 8
Поблагодарили 6 раз(а) в 6 сообщениях
:
0 за это сообщение 0 Всего Репутация: пока неопределено (6)
|
при загрузке в MEGA 2560 выдает ошибку ( compilation terminated.
exit status 1 Ошибка компиляции для платы Arduino/Genuino Mega or Mega 2560.) если добавить 2й шим выход,возможность переключаться между выходами кнопкой ( управление 1 энкодером ) и сделать удаленное управление по RS485 или радио на 433МГц ( моторшилд на макете - пульт управления с энкодеромв руках )? |
|
07.08.2017, 01:27 | #10 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
|
|
13.10.2023, 14:18 | #11 |
Новичок
Регистрация: 30.08.2023
Адрес: Калининград
Сообщений: 26
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 37
Поблагодарили 2 раз(а) в 2 сообщениях
:
0 за это сообщение 0 Всего Репутация: пока неопределено (2)
|
Коллеги, подскажите, при реализации вот такой схемы реверсивного движения вперёд-назад через ардуино и два датчика - локомотиву нажен DCC декодер или это реализуется на аналоге? Мне нужно только чтобы он плавно стартовал и плавно останавливался и двигался туда-сюда по заданному интервалу времени.
|
|
13.10.2023, 14:25 | #12 |
Местный
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,842
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 974
Поблагодарили 2,656 раз(а) в 1,572 сообщениях
:
0 за это сообщение 3 Всего Репутация: репутация неоспорима (2702)
|
|
|
Пользователь сказал cпасибо: |
13.10.2023, 15:50 | #13 |
Новичок
Регистрация: 30.08.2023
Адрес: Калининград
Сообщений: 26
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 37
Поблагодарили 2 раз(а) в 2 сообщениях
:
0 за это сообщение 0 Всего Репутация: пока неопределено (2)
|
Господи, у меня задача упростилась в 3 раза ) Минус три декодера ))))
|
|
15.10.2023, 20:14 | #14 |
Заглянувший
Регистрация: 02.08.2014
Адрес: краснодарский край ст. Полтавская
Сообщений: 244
Сказал(а) 'не согласен(а)'!: 1
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 111
Поблагодарили 93 раз(а) в 59 сообщениях
:
0 за это сообщение 1 Всего Репутация: скоро придёт к известности (103)
|
|
|
2 пользователя(ей) сказали cпасибо: |
15.10.2023, 20:16 | #15 |
Новичок
Регистрация: 30.08.2023
Адрес: Калининград
Сообщений: 26
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 37
Поблагодарили 2 раз(а) в 2 сообщениях
:
0 за это сообщение 0 Всего Репутация: пока неопределено (2)
|
|
|
15.10.2023, 20:20 | #16 |
Заглянувший
Регистрация: 02.08.2014
Адрес: краснодарский край ст. Полтавская
Сообщений: 244
Сказал(а) 'не согласен(а)'!: 1
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 111
Поблагодарили 93 раз(а) в 59 сообщениях
:
0 за это сообщение 1 Всего Репутация: скоро придёт к известности (103)
|
|
|
16.10.2023, 15:35 | #17 | |
Новичок
Регистрация: 30.08.2023
Адрес: Калининград
Сообщений: 26
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 37
Поблагодарили 2 раз(а) в 2 сообщениях
:
0 за это сообщение 0 Всего Репутация: пока неопределено (2)
|
|
|
|
16.10.2023, 19:23 | #18 |
Местный
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,842
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 974
Поблагодарили 2,656 раз(а) в 1,572 сообщениях
:
0 за это сообщение 3 Всего Репутация: репутация неоспорима (2702)
|
|
|
Пользователь сказал cпасибо: |
17.10.2023, 14:48 | #19 |
Заглянувший
Регистрация: 02.08.2014
Адрес: краснодарский край ст. Полтавская
Сообщений: 244
Сказал(а) 'не согласен(а)'!: 1
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 111
Поблагодарили 93 раз(а) в 59 сообщениях
:
0 за это сообщение 1 Всего Репутация: скоро придёт к известности (103)
|
и с плавность тоже что то делать, скетч переделывать.
|
|
Пользователь сказал cпасибо: |
18.10.2023, 23:08 | #20 |
Новичок
Регистрация: 30.08.2023
Адрес: Калининград
Сообщений: 26
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 37
Поблагодарили 2 раз(а) в 2 сообщениях
:
0 за это сообщение 0 Всего Репутация: пока неопределено (2)
|
|
|
20.10.2023, 01:10 | #21 |
Местный
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,842
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 974
Поблагодарили 2,656 раз(а) в 1,572 сообщениях
:
0 за это сообщение 3 Всего Репутация: репутация неоспорима (2702)
|
Теория для начала:
http://wiki.amperka.ru/%D0%BA%D0%BE%...82%D1%8C%D1%8E |
|
Пользователь сказал cпасибо: |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
"Пять копеек" старого "ворчуна" по теме "электроника" | старлей | Флейм | 17 | 13.01.2014 14:31 |