Activity

Управление приводом

Продолжаю тему сам с собой 😁
В качестве контроллера выбрал Arduino Mega 2560 R3 (продавали в моем городе, не хотелось долго ждать с Али).
В качестве драйвера двигателя взята плата L298, спасибо за совет leons.
драйвер пока не пришел с алика, так что пока все тестирую в протеусе.

Схема которую собрал в протеусе (во вложении).
Далее код который написал:

// ----------------------------------------------------------------управления приводом
int motorPin1 = 24; // мотор подключен к цифровому выводу 10
int motorPin2 = 25; // мотор подключен к цифровому выводу 11 (реверс)
int motorPin3 = 10; // мотор подключен к цифровому выводу 10 (PWM)
int analogPin = A0; // потенциометр подключен к аналоговому выходу А0
int buttom1Pin = 22; // АЦЦ
int buttom2Pin = 23; // кнопка подключен к входу 23
int val = 0; // переменная для хранения считанного значения с потенциометра
int openn = 0; // переменная для хранения открытия по кнопке
int opennacc = 0; // переменная для хранения открытия по АСС

int led1 = 51;
int led2 = 52;
int led3 = 53;

unsigned long currentTime;
unsigned long loopTime;

//------------------------------------------------------------------------------------------------------

void setup() {
// ----------------------------------------------------------------управления приводом
pinMode(motorPin1, OUTPUT); // переключение вывода в режим “выход”
pinMode(motorPin2, OUTPUT); // переключение вывода в режим “выход”
pinMode(motorPin3, OUTPUT); // переключение вывода в режим “выход”
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);

currentTime = millis(); // считываем время, прошедшее с момента запуска программы
loopTime = currentTime;

//------------------------------------------------------------------------------------------------------

}

void loop() { // этот цикл выполняется бесконечное количество раз
// ----------------------------------------------------------------управления приводом
val = analogRead(analogPin);
currentTime = millis();

if (digitalRead(buttom1Pin) == HIGH && opennacc == 0 && currentTime >= (loopTime + 10000)) {
opennacc = 1;
loopTime = currentTime;
}

if (digitalRead(buttom1Pin) == LOW && currentTime >= (loopTime + 10000)) {
opennacc = 0;
loopTime = currentTime;
}

if (digitalRead(buttom2Pin) == HIGH && val < 500 && openn == 0 && opennacc == 2) {
openn = 1;
}

if (digitalRead(buttom2Pin) == HIGH && val > 500 && openn == 0 && opennacc == 2) {
openn = 2;
}

if (opennacc == 1) { // открытия привода по АСС
if (val < 700) {
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
analogWrite(motorPin3, 255); // если переменная меньше 250 включаем ШИМ на полную
}
if (val >= 700 && val <= 1000) {
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
analogWrite(motorPin3, 150); // если переменная меньше от 250 до 1000 убавляем ШИМ на некоторое значение
}
if (val > 1000) {
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
analogWrite(motorPin3, 0); // если переменная меньше больше 1000 отрубаем ШИМ
opennacc = 2; // открыт по АСС
}
}

if (opennacc == 0) { // Закрытие привода по АСС

if (val > 300) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
analogWrite(motorPin3, 255); // если переменная меньше 500 включаем ШИМ на полную
}
if (val >= 20 && val <= 300) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
analogWrite(motorPin3, 150); // если переменная от 100 до 500 убавляем ШИМ на некоторое значение
}
if (val < 20) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
analogWrite(motorPin3, 0); // если переменная меньше больше 100 отрубаем ШИМ
opennacc = 0;
}
}

if (openn == 1 && opennacc == 2) { //Открытие привода по кнопке
if (val < 700) {
digitalWrite(motorPin1, HIGH);
analogWrite(motorPin3, 255); // если переменная меньше 250 включаем ШИМ на полную
}
if (val >= 700 && val <= 1000) {
digitalWrite(motorPin1, HIGH);
analogWrite(motorPin3, 150); // если переменная меньше от 250 до 1000 убавляем ШИМ на некоторое значение
}
if (val > 1000) {
digitalWrite(motorPin1, LOW);
analogWrite(motorPin3, 0); // если переменная меньше больше 1000 отрубаем ШИМ
openn = 0;
}
}

if (openn == 2) { // Закрытие привода по кнопке
if (val > 300) {
digitalWrite(motorPin2, HIGH);
analogWrite(motorPin3, 255); // если переменная больше 500 включаем ШИМ на полную
}
if (val >= 20 && val <= 300) {
digitalWrite(motorPin2, HIGH);
analogWrite(motorPin3, 150); // если переменная от 100 до 500 убавляем ШИМ на некоторое значение
}
if (val < 20) {
digitalWrite(motorPin2, LOW);
analogWrite(motorPin3, 0); // если переменная меньше меньше 100 отрубаем ШИМ
openn = 0;
}
}

//-------------------------индикация переменной opennacc временно
if (opennacc == 0){
digitalWrite(led1, HIGH);
}else {digitalWrite(led1, LOW);
}

if (opennacc == 1){
digitalWrite(led2, HIGH);
}else {digitalWrite(led2, LOW);
}

if (opennacc == 2){
digitalWrite(led3, HIGH);
}else {digitalWrite(led3, LOW);
}
}
//------------------------------------------------------------------------------------------------------

Вроде все работает… Если не сложно, оцените пожалуйста, может чего лишнего понаписал…

Управление приводом

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

int motorPin1 = 10; // мотор подключен к цифровому выводу 10
int motorPin2 = 11; // мотор подключен к цифровому выводу 11 (реверс)
int analogPin = A0; // потенциометр подключен к аналоговому выходу А0
int buttom1Pin = 22; // АЦЦ
int buttom2Pin = 23; // кнопка подключен к входу 22
int val = 0; // переменная для хранения считанного значения с потенциометра
int openn = 0; // переменная фиг знает для чего

void setup() {

pinMode(motorPin1, OUTPUT); // переключение вывода в режим “выход”
pinMode(motorPin2, OUTPUT); // переключение вывода в режим “выход”

}

void loop() { // этот цикл выполняется бесконечное количество раз
val = analogRead(analogPin);
if (digitalRead(buttom2Pin)==HIGH && val<500 && openn == 0) {
openn = 1;
}
if (digitalRead(buttom2Pin)==HIGH && val>500 && openn == 0) {
openn = 2;
}

if (openn == 1) {
if (val < 250) {
analogWrite(motorPin1, 255); // если переменная меньше 700 включаем ШИМ на полную
}
if (val>250 && val < 1000) {
analogWrite(motorPin1, 150); // если переменная меньше от 700 до 1000 убавляем ШИМ на некоторое значение
}
if (val > 1000) {
analogWrite(motorPin1, 0); // если переменная меньше больше 1000 отрубаем ШИМ
openn = 0;
}
}

if (openn == 2) {
if (val > 500) {
analogWrite(motorPin2, 255); // если переменная меньше 700 включаем ШИМ на полную
}
if (val > 100 && val < 500) {
analogWrite(motorPin2, 150); // если переменная меньше от 700 до 1000 убавляем ШИМ на некоторое значение
}
if (val < 100) {
analogWrite(motorPin2, 0); // если переменная меньше больше 1000 отрубаем ШИМ
openn = 0;
}
}
}

Но теперь появились другие проблемы и новые исходные данные. Но это уже совсем другая история 😁

Управление приводом

И снова здравствуйте, и снова нужна ваша помощь.
к предыдущему скетчу пытаюсь добавить кнопку:

int motorPin = 10; // мотор подключен к цифровому выводу 10
int analogPin = A0; // потенциометр подключен к аналоговому выходу А0
int buttom1Pin = 22; // кнопка подключен к входу 22
int val = 0; // переменная для хранения считанного значения с потенциометра
int openn = 0; // переменная для хранения считанного значения с потенциометра

void setup() {

pinMode(motorPin, OUTPUT); // переключение вывода в режим “выход”

}

void loop() { // этот цикл выполняется бесконечное количество раз

val = analogRead(analogPin); // записываем в переменную показания с потенциометра
if (digitalRead(buttom1Pin) == HIGH) {
do {
if (val<500) {
analogWrite(motorPin, 255); // если переменная меньше 700 включаем ШИМ на полную
}
if (val>500&&val<1000) {
analogWrite(motorPin, 150); // если переменная меньше от 700 до 1000 убавляем ШИМ на некоторое значение
}
if (val>1000) {
analogWrite(motorPin, 0); // если переменная меньше больше 1000 отрубаем ШИМ
}
}while (val>1000);
}
}

Но, при симуляции в протеусе происходит следующее:

  1. начальные параметры, кнопка не нажата, переменник в нуле, мотор не крутится;
  2. при нажатии кнопки начинает вращатся мотор с максимальной скоростью;
  3. начинаю “крутить” переменник, скорость мотора изменяется согласно алгоритма скетча;
  4. при достижении переменника 100%, мотор останавливается.
    Вроде все хорошо, но…
    Если я правильно понимаю свой скетч, то после всех этих действий, изменении положения резистора и повторного нажатия кнопки цикл (do-while) должен запустится заново, и мотор снова должен вращатся по алгоритму, но этого почему-то не происходит…
    В чем проблема?
Управление приводом

И снова обращаюсь к Вам за помощью, нужно проверить код… Двигаюсь конечно потихоньку, времени мало свободного, но все же двигаюсь…

Итак, решил начать с малого. Так сказать без всяких кнопок и прочего. Оставляю только мотор и потенциометр (так сказать код открытия):

int motorPin = 10; // мотор подключен к цифровому выводу 10
int analogPin = A0; // потенциометр подключен к аналоговому выходу А0
int val = 0; // переменная для хранения считанного значения с потенциометра

void setup() {

pinMode(motorPin, OUTPUT); // переключение вывода в режим “выход”

}

void loop() { // этот цикл выполняется бесконечное количество раз

val = analogRead(analogPin); // записываем в переменную показания с потенциометра

if (val<700) {
analogWrite(motorPin, 255); // если переменная меньше 700 включаем ШИМ на полную
}
if (val>700&&val<1000) {
analogWrite(motorPin, 150); // если переменная меньше от 700 до 1000 убавляем ШИМ на некоторое значение
}
if (val>1000) {
analogWrite(motorPin, 0); // если переменная меньше больше 1000 отрубаем ШИМ
}
}

Я в правильном направлении двигаюсь?

Управление приводом

Все, стоп. Забыли про концевики и кулачковые механизмы… Это не наш метод, и не интересно… Пока электриком работал на них насмотрелся.
Буду делать на Ардуино. Сижу изучаю…

Управление приводом

Всем спасибо за советы, особенно Вам Дмитрий. Про Ардуино даже и не думал… Попробую на нем сделать.
Согласен, на концевиках проще всего, но моторчик в данном редукторе имеет хорошую инерцию, и после пары применений на схеме с концевиками, я этот редуктор скорей всего выкину.
Резистор вроде в ТЗ присутствовал всегда, см. вложение.
И не надо говорить, что я переобуваюсь… Хотя да, скорей всего я буду переобуваться, т.к. сам до конца не знаю что в итоге хочу получить, и я не только про привод…
Сам руковожу проектным отделом, самого бесят заказчики, которые дают невнятное ТЗ, а потом переобуваются в самый последний момент.

Управление приводом

Мда… Думал микроконтроллеры проще освоить… Скачал Atmel Studio 7.0, смотрел уроки… Но пока только примерно понял как ШИМ генерировать на attiny2313…

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRB = 0xff; // все выводы порта B сконфигурировать как выходы
DDRD = 0x00; // все выводы порта D сконфигурировать как входы

PORTD = 0xff; // установить “1” на всех выводах порта D,

// включаем подтягивающие резисторы

while (1)
{
if (!(PIND & (1<<PIND1))) // проверить “0” на линии 1 порта D
{
TCCR1A = (1<<COM1B1) | (1<<WGM10);
TCCR1B = (1<<WGM12) | (1<<CS10);
OCR1B = 240;
DDRB |= (1<<PB4);
}
else
{
TCCR1A = (1<<COM1B1) | (1<<WGM10);
TCCR1B = (1<<WGM12) | (1<<CS10);
OCR1B = 10;
DDRB |= (1<<PB4);
}
}
}

Но вот с подключением резистора и написание кода под него вообще не поддается.
Кто готов помочь?

Управление приводом

Решил кстати узнать, сколько будет стоить разработка данного устройства, создал тему на форуме радиокот, все описал… и маленько обомлел!!!
За разработку ПО просят 2000р.
За разработку схемы 5000р.!!!

Это реальные цены? или я чего-то не понимаю…

Управление приводом

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

Управление приводом

Доброго времени суток. Имеется привод (см. вложение), необходима схема управления приводом с трёх кнопок, желательно на avr. Принцип работы следующий:

1 кнопка - ведёт привод в крайнее верхнее положение (открыть);

2 кнопка - ведёт привод в крайнее нижнее положение (закрыть);

3 кнопка - в открытом положении плавно закрывает привод, пока нажата кнопка;

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

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

Basher SaberTooth 1/8 Scale Truggy (ARR)

Ну фоток мало не бывает… Так что фоткайте все узлы, что показалось слабым, может что-то уже сломали, доработки и прочее…)
ну и к вопросам…

  1. реальный (максимальный) дорожный просвет и чем он регулируется.
  2. пробовали ставить другие колеса (пошире, и с большим диаметром). может корку другую примеряли…
  3. качество стокового пластика (гнется или сразу ломается).
  4. толщина рычагов подвески.
  5. передние привода мипы или кости (в стоке)?
  6. родная электроника (мотор, рег) сильно греются на 4 банках?
    пока вопросов больше нет… Заранее спасибо за ответы)
Хочу купить модель ! Помогите!
GreenDi:

Зачастую это зависит от вас! Почитайте как правильно управлять/ прыгать :
rc-auto.ru/articles_models/id/810/
rc-auto.ru/articles_models/id/216/
rc-auto.ru/articles_models/id/207/
rc-auto.ru/articles_models/id/209/
А если покопать/почитать по форуму, то найдете много нового и интересного. УЧТИТЕ! Для машины 1/1 люди учат правила, учатся водить, ЗДЕСЬ ТАК ЖЕ! Надо учиться, надо читать, ни кто не вложит в вас свои знания и за пять минут не обучит!

И учтите. Что вариант объясните мне/ ответьте на мой вопрос не конают, ели вы сами не хотите ни чего делать!

Так я и не прошу учить, а эти статьи я уже давно читал, года два, или три назад… Просто спрашиваю какая из этих моделей прочнее, а на форумах много мнений, для кого-то и “китай” самый лучший… Была бы возможность купил бы все эти модели и сам уже сравнивал)

Хочу купить модель ! Помогите!
Korovay:

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

Еще не определилься, просто сказал, что мне она больше нравится, но главный критерий это прочность…

fil77:

rc-auto.ru/forum/index.php?showtopic=19997
Здесь сравнение моделей E-MTA и MT4 G3

Как раз после этой статьи и задал вопрос сюда)

Хочу купить модель ! Помогите!

Хм… Ну да, пластиковый, все закрыто (много деталюшек, для меня это +, т.к. люблю поковыряться в моделях)… Насчет акков собирался использовать только 2х2S так что не критично для меня… Центральный диф… А зачем он вообще? Может на соревнованиях что-то и даст, а для простых покатушек и без него можно…

Хочу купить модель ! Помогите!

В общем я совсем запутался в своих мыслях и «хотелках»…
Сейчас на руках имеется traxxas rustler, в целом машина устраивает (на мой взгляд не убиваемая), но зимой на заднем приводе кататься невозможно (у меня не получается)…
Хотел найти полноприводную траггу в 10 масштабе, но так ничего серьезного и не нашел…
Машина нужна для покатушек «во дворе» с некоторыми элементами башинга…
Присмотрелся к моделям:

  1. e-revo 1/8
  2. Thunder Tiger MT-4 G3 (вроде и не трагги, но… похожа)
  3. Thunder Tiger e-MTA (то-же не трагги, но то-же похожа)
  4. Team Associated RC8T
    Какая из этих моделей самая крепкая, какая подойдет «новичку» (не всегда получается приземлятся на 4 колеса…)?
    Может еще что посоветуете?
    Планировал брать шасси, без электроники (чем дешевле, тем лучше)
Хочу купить модель ! Помогите!

Здравствуйте, мне 25 годиков.
Опыт в автомоделизме есть, сейчас в наличии traxxas rustler (с китайской б/к), в целом модель устраивает (очень прочная, еще ни одной поломки), но у нее задний привод и зимой нереально гонять…
Теперь задумался о покупке к зиме что-то полноприводное, и возможно в 8 масштабе…
Китайское с хоббика не хочу брать, как-то не особо доверяю.
Нужна электро трагги для дворовых покатушек, с небольшими элементами башинга.
Присмотрелся к некоторым моделям:

  1. HPI-RACING TROPHY TRUGGY FLUX
  2. Losi 8IGHT-T
  3. Asso RC8Te
    Что скажете, может еще что посоветуете?
E-Revo 1:16 (часть 2)

Здравствуйте, а кто-нибудь может сфоткать реву1/16 с какой-нибудь моделью 1/10? Хочется визуально сравнить размеры. Есть растлер он заднеприводный, а хочется полный, но “большую” реву финансово не потяну… И вообще хотелось-бы услышать ваше мнение, стоит ли менять растлера на реву?

Кто летает на вертолетах в Нижнем Новгороде?

Здравствуйте, есть у кого нибудь файлы модели logo 400 для симулятора Reflex? Если не сложно скиньте на мыло egor-mav@майл.ru.
Раньше вроде на rc-sim.de (не реклама) можно было скачать, а сейчас что-то нету возможности…