по моему плохая идея. без сигнала серва может остаться в том же положении, а может перескочить в рандомное и больше не двигаться. поэкспериментируй
Насколько я с ними баловался сервы после детатча никуда не пытаются съехать.
Обычно это делал для устранения дрожания-подёргивания. Впечатление такое что с неё сняли питание. А так как прокрутить большую серву, даже обесточенную , задача почти невыполнимая, она будет стоять там где бросили и скорее всего держать то, что держала.
а когда ее снова включаете она уходит в какоето другое положение или остаеться где включили?
а когда ее снова включаете она уходит в какоето другое положение или остаеться где включили?
можно ваш код позаимствовать? :)
Так нельзя её просто "включить"! Вы при этом на неё ШИМ подадите, она и начнет его отрабатывать. И поедет или нет - зависит от установленого значения, ну и особенности библиотеки причудливо могут наложится. Я не использую стандартные либы, точно не скажу. А руками выключеная серва очень даже проворачивается. Код и не просите, он слишком тривиален, ни кто не станет так опускатся :)
да вроде побендили, просто я поставил начальную скорость сейчас в 100шим, на тот момент эксперементировал с дохлым акумом, он с 100 только стартовал, сейчас надо наверно на 70-80 поставить.
кстати есть прикол с движением, если поворачивать а потом сразу нажать вперед то машина еще раз повернет немного и только потом вперед )))
а когда ее снова включаете она уходит в какоето другое положение или остаеться где включили?
можно ваш код позаимствовать? :)
Так нельзя её просто "включить"! Вы при этом на неё ШИМ подадите, она и начнет его отрабатывать. И поедет или нет - зависит от установленого значения, ну и особенности библиотеки причудливо могут наложится. Я не использую стандартные либы, точно не скажу. А руками выключеная серва очень даже проворачивается. Код и не просите, он слишком тривиален, ни кто не станет так опускатся :)
Положение сервы до detach запоминается в библиотеке. если вы ничего с сервой не делали то после attach она просто останется дёргаться на том-же месте(положении)
Положение сервы до detach запоминается в библиотеке. если вы ничего с сервой не делали то после attach она просто останется дёргаться на том-же месте(положении)
тоесть будет так?
человек нажал кнопку, серва получила команду на 100градусов, и поехала, на 50 клешня сжала предмет и стала греться, но заданное время истекло и команда деатч ее выкключила, серва расслабилась, ее можно даже руками расжать.
потом человек нажал другую кнопку, серва получилда команду атач и продолжила было попытку ехать на 100, как вдруг получила новую команду и понеслась ее исполнять(разжимание напрмер)
визуально для человека это будет выглядеть так?
нажал кнопку сжимать, серва сжала предмет и расслабилась. но если предмет не тяжелый то в ней и остался
если водомёт - голова , то вам нужно переобуть резину ! коврозацепы не так будут работать :( , можно поймать аквапланирование....
по коду : вернитесь к старым кнопкам на клешню и и попробуйде ещё раз переделать ( НО НУЖНО ЗАБЫТЬ КАК ДО ЭТОГО ПЕРЕДЕЛЫВАЛИ ) , мало кто полезет за вас искать вашу ошибку :(
если водомёт - голова , то вам нужно переобуть резину ! коврозацепы не так будут работать :( , можно поймать аквапланирование....
по коду : вернитесь к старым кнопкам на клешню и и попробуйде ещё раз переделать ( НО НУЖНО ЗАБЫТЬ КАК ДО ЭТОГО ПЕРЕДЕЛЫВАЛИ ) , мало кто полезет за вас искать вашу ошибку :(
голова это клешня, водомет это зад, так что резина стоит правильно!
насчет кода, сейчас попробую ваш совет, а что еще делать. хотя я его перелопатил вдоль и поперек, так и не не нашел ошибки, вроде все должно работать...
SU-27-16 Вы были правы, просто еще раз переделал скетч, причем действовал точно так же как в прошлый раз, ничего нового, и все заработало. даже незнаю в чем причина была, вчера бился 3 часа, а сегодня за 20 мин все заработало.
правда пока как сделать расслабон серве так и не решил. хочу всетаки 4й провод в серву внедрить. но как это дело приписать к уже существаующему скетчу, пока опыта не хватает (
SU-27-16 Вы были правы, просто еще раз переделал скетч, причем действовал точно так же как в прошлый раз, ничего нового, и все заработало. даже незнаю в чем причина была, вчера бился 3 часа, а сегодня за 20 мин все заработало.
правда пока как сделать расслабон серве так и не решил. хочу всетаки 4й провод в серву внедрить. но как это дело приписать к уже существаующему скетчу, пока опыта не хватает (
Посмотрел цены на датчики давления... от 400р. Печаль. Видимо не пойдет приделать его к клешне. :)
А насколько сильно серва греется? Может к ней дешевый термистор и как только превышение температуры - хватит жать.
Прям только серва выше 35 градусов - значит зажато до кондиции. :D
_____________________________________
Нет времени всю тему читать - а есть вариант подключать питание сервы через полевой транзистор? Питание на серву только в моменты зажимания кнопок, а дальше она отключена.
Посмотрел цены на датчики давления... от 400р. Печаль. Видимо не пойдет приделать его к клешне. :)
А насколько сильно серва греется? Может к ней дешевый термистор и как только превышение температуры - хватит жать.
Прям только серва выше 35 градусов - значит зажато до кондиции. :D
_____________________________________
Нет времени всю тему читать - а есть вариант подключать питание сервы через полевой транзистор? Питание на серву только в моменты зажимания кнопок, а дальше она отключена.
неуверен что датчик давления будет работать, клешня может зажать предмет разными участками своей внутреней поверхности, не факт что датчик будет в нужном месте.
по температуре вариант не очень хороший, но сути зря гркть верву. а вдруг чтото с датчиком произойдет, покажет не тот градус и серва сгорит...
про полевик несовсем понял, можете подробней рассказать об этом способе?
Про полевик - у нас есть 3 провода к серве: земля, управляющий и питание. (коричневый, желтый и красный)
Смысл в том, что провод питания (красный) мы подключаем через полевой транзистор.
Когда напряжение на затворе транзистора есть и транзистор открыт - серва работает, иначе она будет обесточена.
Нужно лишь предусмотреть подачу питания непосредственно перед началом обращения к серве (посредством отпирания транзистора) и отключение питания сразу же после выполнения необходимых действий. Нужен будет +1 пин для управления транзистором.
Есть правда проблема - серва в этот момент может дергаться.
Про полевик - у нас есть 3 провода к серве: земля, управляющий и питание. (коричневый, желтый и красный)
Смысл в том, что провод питания (красный) мы подключаем через полевой транзистор.
Когда напряжение на затворе транзистора есть и транзистор открыт - серва работает, иначе она будет обесточена.
Нужно лишь предусмотреть подачу питания непосредственно перед началом обращения к серве (посредством отпирания транзистора) и отключение питания сразу же после выполнения необходимых действий. Нужен будет +1 пин для управления транзистором.
Есть правда проблема - серва в этот момент может дергаться.
не это тупиковый вариант, в этом случае мы все так же незнаем когда отключать это самое питание...
имхо лучше этот 1 пин пожертвовать на сигнал с резистора сервы...
кстати о пинах он реально только 1 остался! :)
а я еще хотел 2 уз датчика, а там на каждый 2 пина надо )))
Когда напряжение на затворе транзистора есть и транзистор открыт - серва работает, иначе она будет обесточена.
Нужно лишь предусмотреть подачу питания непосредственно перед началом обращения к серве (посредством отпирания транзистора) и отключение питания сразу же после выполнения необходимых действий. Нужен будет +1 пин для управления транзистором.
Есть правда проблема - серва в этот момент может дергаться.
detach сделает с сервой то-же самое, только программно, без транзистора и лишнего пина на управление транзистором
В случае этого расширителя, на использование большей части стандартных библиотек уже не рассчитывайте.
почему?
как еще добавить пинов? сделать больше портов?
Она сможет для вас щелкать релюшками, зажигать светики, принять сигнал с кнопки и т.п. А вот для подключения разных хитрых датчиков, серв и подобных вещей, со стандартными средствами не получится. Если только вы сами напишете для них код через i2c.
Так что если требуется увеличение под п.2, лучше смотрите в сторну MEGi.
Она сможет для вас щелкать релюшками, зажигать светики, принять сигнал с кнопки и т.п. А вот для подключения разных хитрых датчиков, серв и подобных вещей, со стандартными средствами не получится. Если только вы сами напишете для них код через i2c.
Так что если требуется увеличение под п.2, лучше смотрите в сторну MEGi.
спасибо что предупредили, а то я уже думал что мне это поможет.
а можете про мегу подсказать, что это? а то я можно сказать новичек и меня всюду носом тыкать нужно, если можно ссылку?
Как дешевый вариант, выбрать все что у вас управляется установкой пинов в HIGH,LOW и попробовать их навесить на I2C, посмотреть что в итоге освободится.
Как дешевый вариант, выбрать все что у вас управляется установкой пинов в HIGH,LOW и попробовать их навесить на I2C, посмотреть что в итоге освободится.
Я совсем забыл, что у вас не обычная дуина. Тогда только пляски с бубном. У вас даже не понятно, из чего экономить.
а может к ней подключить еще одну плату, стандартную ардуину. чтоб она на 1 или 2 порта отправляла какието команды, а сама формировала их исходя из полученных данных с датчиков. и наоборот в ответ получала какието команды для серво и других нагрузок....
по моему плохая идея. без сигнала серва может остаться в том же положении, а может перескочить в рандомное и больше не двигаться. поэкспериментируй
Насколько я с ними баловался сервы после детатча никуда не пытаются съехать.
Обычно это делал для устранения дрожания-подёргивания. Впечатление такое что с неё сняли питание. А так как прокрутить большую серву, даже обесточенную , задача почти невыполнимая, она будет стоять там где бросили и скорее всего держать то, что держала.
а когда ее снова включаете она уходит в какоето другое положение или остаеться где включили?
можно ваш код позаимствовать? :)
а когда ее снова включаете она уходит в какоето другое положение или остаеться где включили?
можно ваш код позаимствовать? :)
Так нельзя её просто "включить"! Вы при этом на неё ШИМ подадите, она и начнет его отрабатывать. И поедет или нет - зависит от установленого значения, ну и особенности библиотеки причудливо могут наложится. Я не использую стандартные либы, точно не скажу. А руками выключеная серва очень даже проворачивается. Код и не просите, он слишком тривиален, ни кто не станет так опускатся :)
А руками выключеная серва очень даже проворачивается. Код и не просите, он слишком тривиален, ни кто не станет так опускатся :)
поворачиваеться, но при хорошем усилии! само по себе не сдвиниться!
новое видео
https://www.youtube.com/watch?v=hddHKgop9aY&feature=youtu.be
О, третья серия))). А что, Дон Карлос уже узнал когда серву пора останавливать? И уже вплотную подошел к вопросу, как останавливать?
новое видео
https://www.youtube.com/watch?v=hddHKgop9aY&feature=youtu.be
А машинка прикольная. Рывки так и не победили?
новое видео
https://www.youtube.com/watch?v=hddHKgop9aY&feature=youtu.be
А машинка прикольная. Рывки так и не победили?
да вроде побендили, просто я поставил начальную скорость сейчас в 100шим, на тот момент эксперементировал с дохлым акумом, он с 100 только стартовал, сейчас надо наверно на 70-80 поставить.
кстати есть прикол с движением, если поворачивать а потом сразу нажать вперед то машина еще раз повернет немного и только потом вперед )))
баги скетча)
а когда ее снова включаете она уходит в какоето другое положение или остаеться где включили?
можно ваш код позаимствовать? :)
Так нельзя её просто "включить"! Вы при этом на неё ШИМ подадите, она и начнет его отрабатывать. И поедет или нет - зависит от установленого значения, ну и особенности библиотеки причудливо могут наложится. Я не использую стандартные либы, точно не скажу. А руками выключеная серва очень даже проворачивается. Код и не просите, он слишком тривиален, ни кто не станет так опускатся :)
Положение сервы до detach запоминается в библиотеке. если вы ничего с сервой не делали то после attach она просто останется дёргаться на том-же месте(положении)
Положение сервы до detach запоминается в библиотеке. если вы ничего с сервой не делали то после attach она просто останется дёргаться на том-же месте(положении)
тоесть будет так?
человек нажал кнопку, серва получила команду на 100градусов, и поехала, на 50 клешня сжала предмет и стала греться, но заданное время истекло и команда деатч ее выкключила, серва расслабилась, ее можно даже руками расжать.
потом человек нажал другую кнопку, серва получилда команду атач и продолжила было попытку ехать на 100, как вдруг получила новую команду и понеслась ее исполнять(разжимание напрмер)
визуально для человека это будет выглядеть так?
нажал кнопку сжимать, серва сжала предмет и расслабилась. но если предмет не тяжелый то в ней и остался
нажал кнопку разжать, серва разжалась, предмет выпал...
все правильно?
добавил на машину старый водомет,
и сделал клешню на отдельные кнопки.
но почемуто неработают они. серва при старте принимает дефолтное положение, но не управляеться.
все пересмотрел, вроде все правильно, может чтото неусмотрел, кто нибудь гляньте, в чем может быть ошибка?
захватом управляет серва Z
001
// Скетч для управления через блютус, Wild Thumper 6WD, на ардуино совместимом контролере TREX controller. реализовано движение и стрельба с водомета.
002
003
004
#include <BTCA2ALite.h>// Добавляем библиотеку блютус программы
005
#include <Servo.h> // Добавляем библиотеку серво
006
007
Servo myservoH;
// Горизонтальная серва водомета углы от 0 до 180 (центровка 89)
008
Servo myservoV;
// Вертикальная серва водомета углы от 120 до 180
009
Servo myservoZ;
// Cерва захвата манипулятора углы от 45 до 116
010
011
012
013
// ======================
014
const
int
Z_SERVO_PIN = 5;
// серва захвата манипулятора подключена к пину 7
015
const
int
H_SERVO_PIN = 7;
// Горизонтальная серва подключена к пину 7
016
const
int
V_SERVO_PIN = 8;
//Пин вертикального сервопривода 8
017
const
float
H_L_ANGLE = 180;
// Максимальные угл поворота башни налево
018
const
float
H_R_ANGLE = 0;
// Максимальные угл поворота башни направо
019
const
float
H_DEF_ANGLE = 84;
// Дефолтный угол (центровка)
020
const
float
V_U_ANGLE = 180;
// Максимальные угл поворота башни вверх
021
const
float
V_D_ANGLE = 150;
// Максимальные угл поворота башни вниз
022
const
float
V_DEF_ANGLE = 160;
// Дефолтный угол (центровка)
023
const
float
Z_L_ANGLE = 116;
// Максимальные угл поворота башни налево
024
const
float
Z_R_ANGLE = 45;
// Максимальные угл поворота башни направо
025
const
float
Z_DEF_ANGLE = 50;
// Дефолтный угол (центровка)
026
027
//Размер шага V_STEP и H_STEP побираем экспериментально для достижения нужной скорости поворота серв
028
const
float
V_STEP = 0.012;
// Шаг - знаение отвечающее за скорость вращения по вертикали.
029
const
float
H_STEP = 0.012;
// Шаг - знаение отвечающее за скорость вращения по горизонтали
030
const
float
Z_STEP = 0.012;
// Шаг - знаение отвечающее за скорость вращения захвата манипулятора
031
float
curVAngle = V_DEF_ANGLE;
//Переменная текущего угла верт. сервы
032
float
curHAngle = H_DEF_ANGLE;
//Переменная текущего угла гор. сервы
033
float
curZAngle = Z_DEF_ANGLE;
//Переменная текущего угла гор. сервы
034
035
036
bool
moveServoVUp =
false
;
//Флаг движения верт. сервы вверх
037
bool
moveServoVDown =
false
;
//Флаг движения верт. сервы вниз
038
bool
moveServoHLeft =
false
;
//Флаг движения гор. сервы влево
039
bool
moveServoHRight =
false
;
//Флаг движения гор. сервы вправо
040
bool
moveServoZLeft =
false
;
//Флаг движения гор. сервы влево
041
bool
moveServoZRight =
false
;
//Флаг движения гор. сервы вправо
042
043
btca2aLite btca2aLite;
// Конструктор btca2aLite
044
045
046
// задаем пины для левого мотора
047
#define Dir_L 2
048
#define Pwm_L 3
049
#define Brake_L 4
050
// задаем пины для правого мотора
051
#define Dir_R 10
052
#define Pwm_R 11
053
#define Brake_R 9
054
055
// Задаем скорости для движения
056
byte
MaxSpeed = 250;
// Максимальная скорость
057
byte
MinSpeed = 85;
// Минимальная скорость
058
059
int
forw_back = 0;
060
int
righ_left = 0;
061
062
byte
step_fb = 5;
// Шаг изменения скорости движения вперед - назад
063
byte
step_stop = 10;
// Шаг изменения скорости остановки
064
byte
step_rl = 10;
// Шаг изменения скорости движения вправо - влево
065
byte
step_dir = 10;
// Шаг изменения скорости выравнивания
066
067
068
069
#define SHOT 12 // пин для водомета
070
071
enum
States
072
{
073
WAITING,
074
READING,
075
RUNNING,
076
ERROR,
077
TIMEOUT
078
};
079
080
States state;
081
States onWait();
082
States onRead();
083
States onRun();
084
States onError();
085
086
States onTimeout();
087
088
void
performServo();
// добовляем сервы
089
090
091
void
setup
(){
092
Serial
.begin(9600);
// Скорость BT и порта должна быть 9600
093
//Моторы
094
pinMode (Pwm_L, OUTPUT);
095
pinMode (Dir_L, OUTPUT);
096
pinMode (Brake_L, OUTPUT);
097
098
pinMode (Pwm_R, OUTPUT);
099
pinMode (Dir_R, OUTPUT);
100
pinMode (Brake_R, OUTPUT);
101
102
digitalWrite (Pwm_L, LOW);
103
digitalWrite (Pwm_R, LOW);
104
105
digitalWrite (Brake_L, LOW);
106
digitalWrite (Brake_R, LOW);
107
108
pinMode(SHOT, OUTPUT);
// задаем выход для стрельбы водой
109
110
// устанавливаем пин как вывод управления сервой
111
myservoZ.attach(Z_SERVO_PIN);
112
myservoH.attach(H_SERVO_PIN);
113
myservoV.attach(V_SERVO_PIN);
114
115
myservoZ.write(curZAngle);
116
myservoH.write(curHAngle);
117
myservoV.write(curVAngle);
118
119
120
//Светодиод
121
pinMode(13, OUTPUT);
// Инициализируем пин светодиода
122
digitalWrite(13, HIGH);
// Светодиод выключен
123
}
124
125
void
loop
(){
126
127
btca2aLite.ReadCommand();
// Считывание принятых команд (кодов кнопок)
128
//Вызываем функцию управление сервами
129
performServo();
130
131
//код моторов с плавным старт\стопом
132
133
static
unsigned
long
pre_millis = 0;
134
if
(millis()-pre_millis > 50)
135
{
136
pre_millis = millis();
137
138
if
(btca2aLite.ButtonPressed(KEYCODE_DPAD_UP))
139
{
140
forw_back += step_fb;
141
if
(forw_back > 0 && forw_back < MinSpeed) forw_back = MinSpeed;
142
}
143
else
if
(btca2aLite.ButtonPressed(KEYCODE_DPAD_DOWN))
144
{
145
forw_back -= step_fb;
146
if
(forw_back < 0 && forw_back > MinSpeed*-1) forw_back = MinSpeed*-1;
147
}
148
else
149
{
150
if
(forw_back < 0) forw_back += step_stop;
151
else
if
(forw_back > 0) forw_back -= step_stop;
152
if
(abs(forw_back) < MinSpeed) forw_back = 0;
153
}
154
forw_back = constrain(forw_back, MaxSpeed*-1, MaxSpeed);
155
156
157
if
(btca2aLite.ButtonPressed(KEYCODE_DPAD_RIGHT))
158
{
159
righ_left += step_rl;
160
if
(righ_left > 0 && righ_left < MinSpeed) righ_left = MinSpeed;
161
}
162
else
if
(btca2aLite.ButtonPressed(KEYCODE_DPAD_LEFT))
163
{
164
righ_left -= step_rl;
165
if
(righ_left < 0 && righ_left > MinSpeed*-1) righ_left = MinSpeed*-1;
166
}
167
else
168
{
169
if
(righ_left < 0) righ_left += step_dir;
170
else
if
(righ_left > 0) righ_left -= step_dir;
171
if
(abs(righ_left) < MinSpeed) righ_left = 0;
172
}
173
righ_left = constrain(righ_left, MaxSpeed*-1, MaxSpeed);
174
175
176
int
pwm_l = forw_back + righ_left;
177
int
pwm_r = forw_back - righ_left;
178
pwm_l = constrain(pwm_l, MaxSpeed*-1, MaxSpeed);
179
pwm_r = constrain(pwm_r, MaxSpeed*-1, MaxSpeed);
180
181
digitalWrite(Dir_L, (pwm_l<0)?0:1);
182
digitalWrite(Dir_R, (pwm_r<0)?0:1);
183
analogWrite(Pwm_L, abs(pwm_l));
184
analogWrite(Pwm_R, abs(pwm_r));
185
}
186
187
188
189
//-------— включение насоса —-------------
190
if
(btca2aLite.ButtonPressed(KEYCODE_BUTTON_SELECT))
191
{
192
digitalWrite (SHOT, HIGH);
193
}
194
//-------— выключение насоса происходит автоматически после отпускания кнопки—-------------
195
if
(btca2aLite.ButtonReleased(KEYCODE_BUTTON_SELECT))
196
{
197
digitalWrite (SHOT, LOW);
198
}
199
200
201
//--------— Повороты серв при нажатии кнопок —-------------
202
203
if
(btca2aLite.Button(KEYCODE_BUTTON_X))
// servoV вниз
204
{
205
moveServoVDown =
true
;
206
207
}
208
if
(btca2aLite.Button(KEYCODE_BUTTON_A))
// servoH движется к 0
209
{
210
moveServoHRight =
true
;
211
}
212
if
(btca2aLite.Button(KEYCODE_BUTTON_B))
// servoV вверх
213
{
214
moveServoVUp =
true
;
215
216
}
217
218
if
(btca2aLite.Button(KEYCODE_BUTTON_Y))
// servoH движется к 180
219
{
220
moveServoHLeft =
true
;
221
}
222
223
224
//--------— серва захвата манипулятора —-------------
225
if
(btca2aLite.Button(KEYCODE_BUTTON_R1))
// servoH движется к 180
226
{
227
moveServoZLeft =
true
;
228
}
229
230
if
(btca2aLite.Button(KEYCODE_BUTTON_R2))
// servoH движется к 180
231
{
232
moveServoZRight =
true
;
233
}
234
235
236
237
238
//--------— чтобы сервы не продолжали движения при отжатых кнопках —-------------
239
if
(btca2aLite.ButtonReleased(KEYCODE_BUTTON_X))
240
{
241
moveServoVDown =
false
;
242
}
243
if
(btca2aLite.ButtonReleased(KEYCODE_BUTTON_B))
244
{
245
moveServoVUp =
false
;
246
}
247
248
if
(btca2aLite.ButtonReleased(KEYCODE_BUTTON_A))
249
{
250
moveServoHRight =
false
;
251
}
252
if
(btca2aLite.ButtonReleased(KEYCODE_BUTTON_Y))
253
{
254
moveServoHLeft =
false
;
255
}
256
257
if
(btca2aLite.ButtonReleased(KEYCODE_BUTTON_R1))
258
{
259
moveServoZRight =
false
;
260
}
261
if
(btca2aLite.ButtonReleased(KEYCODE_BUTTON_R2))
262
{
263
moveServoZLeft =
false
;
264
}
265
266
267
268
269
270
271
//----------------— Стоп —---------------------
272
273
// Если не нажата ни одна кнопка курсора происходит остановка, скорость 0 для каждого мотора
274
if
(btca2aLite.ButtonReleased(KEYCODE_DPAD_UP) && btca2aLite.ButtonReleased(KEYCODE_DPAD_DOWN) && btca2aLite.ButtonReleased(KEYCODE_DPAD_LEFT) && btca2aLite.ButtonReleased(KEYCODE_DPAD_RIGHT)){
275
analogWrite (Pwm_L, 0);
276
analogWrite (Pwm_R, 0);
277
}
278
}
279
280
281
282
//Функция управления сервоприводами (вызывается в теле loop на каждой итерации)
283
//Выполняет изменения положения серв на подобранный шаг согласно установленным флагам движения
284
//Флаги устанавливаются согласно поступившим символам управления сервами
285
void
performServo()
286
{
287
//Установлен флаг движения вверх и текущий угол не максимальный
288
if
(moveServoVUp && curVAngle + V_STEP <= V_U_ANGLE)
289
{
290
//К текущему верт. углу прибавляем шаг
291
curVAngle += V_STEP;
292
}
293
//Установлен флаг движения вниз и текущий угол не минимален
294
else
if
(moveServoVDown && curVAngle - V_STEP >= V_D_ANGLE)
295
{
296
//От текущего верт. угла отнимаем шаг
297
curVAngle -= V_STEP;
298
299
}
300
//Установлен флаг движения влево и текущий угол не максимален
301
if
(moveServoHLeft && curHAngle + H_STEP <= H_L_ANGLE)
302
{
303
//К текущему гор. углу прибавляем гор. шаг
304
curHAngle += H_STEP;
305
}
306
//Установлен флаг движения вправо и текущий угол не минимален
307
else
if
(moveServoHRight && curHAngle - H_STEP >= H_R_ANGLE)
308
{
309
//От текущего угла отнимаем гор. шаг
310
curHAngle -= H_STEP;
311
}
312
313
314
315
//Установлен флаг движения влево и текущий угол не максимален
316
if
(moveServoZLeft && curZAngle + Z_STEP <= Z_L_ANGLE)
317
{
318
//К текущему гор. углу прибавляем гор. шаг
319
curHAngle += Z_STEP;
320
}
321
//Установлен флаг движения вправо и текущий угол не минимален
322
else
if
(moveServoZRight && curHAngle - Z_STEP >= Z_R_ANGLE)
323
{
324
//От текущего угла отнимаем гор. шаг
325
curZAngle -= Z_STEP;
326
}
327
328
329
//Если было движние по вертикали
330
if
(moveServoVUp || moveServoVDown)
331
{
332
myservoV.write(curVAngle);
333
}
334
//Если было движение по горизонтали
335
if
(moveServoHLeft || moveServoHRight)
336
{
337
myservoH.write(curHAngle);
338
}
339
340
341
//Если было движение по горизонтали
342
if
(moveServoZLeft || moveServoZRight)
343
{
344
myservoZ.write(curZAngle);
345
}
346
347
348
349
}
а где перёд ? где зад ?
если водомёт - голова , то вам нужно переобуть резину ! коврозацепы не так будут работать :( , можно поймать аквапланирование....
по коду : вернитесь к старым кнопкам на клешню и и попробуйде ещё раз переделать ( НО НУЖНО ЗАБЫТЬ КАК ДО ЭТОГО ПЕРЕДЕЛЫВАЛИ ) , мало кто полезет за вас искать вашу ошибку :(
а где перёд ? где зад ?
если водомёт - голова , то вам нужно переобуть резину ! коврозацепы не так будут работать :( , можно поймать аквапланирование....
по коду : вернитесь к старым кнопкам на клешню и и попробуйде ещё раз переделать ( НО НУЖНО ЗАБЫТЬ КАК ДО ЭТОГО ПЕРЕДЕЛЫВАЛИ ) , мало кто полезет за вас искать вашу ошибку :(
голова это клешня, водомет это зад, так что резина стоит правильно!
насчет кода, сейчас попробую ваш совет, а что еще делать. хотя я его перелопатил вдоль и поперек, так и не не нашел ошибки, вроде все должно работать...
SU-27-16 Вы были правы, просто еще раз переделал скетч, причем действовал точно так же как в прошлый раз, ничего нового, и все заработало. даже незнаю в чем причина была, вчера бился 3 часа, а сегодня за 20 мин все заработало.
правда пока как сделать расслабон серве так и не решил. хочу всетаки 4й провод в серву внедрить. но как это дело приписать к уже существаующему скетчу, пока опыта не хватает (
SU-27-16 Вы были правы, просто еще раз переделал скетч, причем действовал точно так же как в прошлый раз, ничего нового, и все заработало. даже незнаю в чем причина была, вчера бился 3 часа, а сегодня за 20 мин все заработало.
правда пока как сделать расслабон серве так и не решил. хочу всетаки 4й провод в серву внедрить. но как это дело приписать к уже существаующему скетчу, пока опыта не хватает (
Посмотрел цены на датчики давления... от 400р. Печаль. Видимо не пойдет приделать его к клешне. :)
А насколько сильно серва греется? Может к ней дешевый термистор и как только превышение температуры - хватит жать.
Прям только серва выше 35 градусов - значит зажато до кондиции. :D
_____________________________________
Нет времени всю тему читать - а есть вариант подключать питание сервы через полевой транзистор? Питание на серву только в моменты зажимания кнопок, а дальше она отключена.
)))) тема продолжается
)))) тема продолжается
Пятая серия, где Пухлявый с его попкорном)))
нет его
Посмотрел цены на датчики давления... от 400р. Печаль. Видимо не пойдет приделать его к клешне. :)
А насколько сильно серва греется? Может к ней дешевый термистор и как только превышение температуры - хватит жать.
Прям только серва выше 35 градусов - значит зажато до кондиции. :D
_____________________________________
Нет времени всю тему читать - а есть вариант подключать питание сервы через полевой транзистор? Питание на серву только в моменты зажимания кнопок, а дальше она отключена.
неуверен что датчик давления будет работать, клешня может зажать предмет разными участками своей внутреней поверхности, не факт что датчик будет в нужном месте.
по температуре вариант не очень хороший, но сути зря гркть верву. а вдруг чтото с датчиком произойдет, покажет не тот градус и серва сгорит...
про полевик несовсем понял, можете подробней рассказать об этом способе?
https://vk.com/video_ext.php?oid=8503257&id=171269871&hash=80a5ed04254c3...
"про полевик несовсем понял, можете подробней рассказать об этом способе?"
Эт еще один способ отключить серву, не дающий ответа на вопрос "когда?"
Про полевик - у нас есть 3 провода к серве: земля, управляющий и питание. (коричневый, желтый и красный)
Смысл в том, что провод питания (красный) мы подключаем через полевой транзистор.
Когда напряжение на затворе транзистора есть и транзистор открыт - серва работает, иначе она будет обесточена.
Нужно лишь предусмотреть подачу питания непосредственно перед началом обращения к серве (посредством отпирания транзистора) и отключение питания сразу же после выполнения необходимых действий. Нужен будет +1 пин для управления транзистором.
Есть правда проблема - серва в этот момент может дергаться.
Про полевик - у нас есть 3 провода к серве: земля, управляющий и питание. (коричневый, желтый и красный)
Смысл в том, что провод питания (красный) мы подключаем через полевой транзистор.
Когда напряжение на затворе транзистора есть и транзистор открыт - серва работает, иначе она будет обесточена.
Нужно лишь предусмотреть подачу питания непосредственно перед началом обращения к серве (посредством отпирания транзистора) и отключение питания сразу же после выполнения необходимых действий. Нужен будет +1 пин для управления транзистором.
Есть правда проблема - серва в этот момент может дергаться.
не это тупиковый вариант, в этом случае мы все так же незнаем когда отключать это самое питание...
имхо лучше этот 1 пин пожертвовать на сигнал с резистора сервы...
кстати о пинах он реально только 1 остался! :)
а я еще хотел 2 уз датчика, а там на каждый 2 пина надо )))
подумываю о приобретении платы расширения. аля:
http://zelectro.cc/Z-PCF8574T_I2C_module
В случае этого расширителя, на использование большей части стандартных библиотек уже не рассчитывайте.
не это тупиковый вариант, в этом случае мы все так же незнаем когда отключать это самое питание...
имхо лучше этот 1 пин пожертвовать на сигнал с резистора сервы...
А действительно ли нам важно настолько точно знать когда ее выключить?)
Думаю, доли секунды тут не важны. Даем после выполнения, допустим 100мс, если мало чуть прибавить.
Для расширения - как вариант если много пинов используются в режиме цифровых выходов использовать микросхемку типо http://amperka.ru/product/74hc595-shift-out-register
Только прогу надо будет перелопатить.
Когда напряжение на затворе транзистора есть и транзистор открыт - серва работает, иначе она будет обесточена.
Нужно лишь предусмотреть подачу питания непосредственно перед началом обращения к серве (посредством отпирания транзистора) и отключение питания сразу же после выполнения необходимых действий. Нужен будет +1 пин для управления транзистором.
Есть правда проблема - серва в этот момент может дергаться.
detach сделает с сервой то-же самое, только программно, без транзистора и лишнего пина на управление транзистором
В случае этого расширителя, на использование большей части стандартных библиотек уже не рассчитывайте.
почему?
как еще добавить пинов? сделать больше портов?
В случае этого расширителя, на использование большей части стандартных библиотек уже не рассчитывайте.
почему?
как еще добавить пинов? сделать больше портов?
Она сможет для вас щелкать релюшками, зажигать светики, принять сигнал с кнопки и т.п. А вот для подключения разных хитрых датчиков, серв и подобных вещей, со стандартными средствами не получится. Если только вы сами напишете для них код через i2c.
Так что если требуется увеличение под п.2, лучше смотрите в сторну MEGi.
Она сможет для вас щелкать релюшками, зажигать светики, принять сигнал с кнопки и т.п. А вот для подключения разных хитрых датчиков, серв и подобных вещей, со стандартными средствами не получится. Если только вы сами напишете для них код через i2c.
Так что если требуется увеличение под п.2, лучше смотрите в сторну MEGi.
спасибо что предупредили, а то я уже думал что мне это поможет.
а можете про мегу подсказать, что это? а то я можно сказать новичек и меня всюду носом тыкать нужно, если можно ссылку?
http://arduino.ru/Hardware/ArduinoBoardMega2560
Как дешевый вариант, выбрать все что у вас управляется установкой пинов в HIGH,LOW и попробовать их навесить на I2C, посмотреть что в итоге освободится.
Как дешевый вариант, выбрать все что у вас управляется установкой пинов в HIGH,LOW и попробовать их навесить на I2C, посмотреть что в итоге освободится.
это вы про ту плану расширения?
у меня кстати есть еще шина I2C на плате.
вот такая плата у меня https://www.sparkfun.com/products/12075
Я совсем забыл, что у вас не обычная дуина. Тогда только пляски с бубном. У вас даже не понятно, из чего экономить.
Я совсем забыл, что у вас не обычная дуина. Тогда только пляски с бубном. У вас даже не понятно, из чего экономить.
а может к ней подключить еще одну плату, стандартную ардуину. чтоб она на 1 или 2 порта отправляла какието команды, а сама формировала их исходя из полученных данных с датчиков. и наоборот в ответ получала какието команды для серво и других нагрузок....
тема про "расслабление" закончилась ? решение приняли ?
....тогда откройте новую тему про увеличение псевдоПинов !
тема про "расслабление" закончилась ? решение приняли ?
....тогда откройте новую тему про увеличение псевдоПинов !
неа пока не решил(
разделяйте темы.... трудно в одной ветке следить за вашими желаниями... вернее - не трудно, а на..нано.... :(
про расслабление - всё уже предложено - закрывайте тему - ".... сами решайте ... решайте сами ... иметь или не иметь .... "
наверно вы правы, создам в разде проекты, может там кто посожет
да ! создайте ! подскажут.... а вы услышите ?
да ! создайте ! подскажут.... а вы услышите ?
а вы прочли что я просил?
с самого начала говорил что нехватает знаний самому код написать, прошу помощи в написании нескольких несчастных строчек в мой код...
но народ предпочел более 50 сообщений настрочить нежели реально помочь...
уже и решение нашли, припаять дополнительный провод к серве...
да потому что твоя идея оторвана от реальности, а тебе предлагали реальные
если ты уперся на своем это не значит что тебе помогут в этом