Технический форум по робототехнике.
Angel71 писал(а):это от человека зависит. вам программирование совершенно не интересно, вот оно мимо и проходит. я же вам писал, что лучше делать то, что нравится и получается, остальную работу предоставить тем, кто лучше вас это сделает.
slom писал(а):жуть какая!
чтобы сделать протез вам нужны датчики взаимодействующие с человеком... четко определяющие что человек хочет сделать. далее нужен четкий софт и датчики обратной связи, чтобы программа знала в каком положении конечности находятся сейчас... в случае с ногами какаята инверсная кинематика, гироскопы для стабилизации и прочее. это все на самом деле безумно сложно.
а у вас извините какие то конвульсии серв, с задержкой дейли...
п.с. лучше бы вы доделали проект страйкбольного бота!
это в разы проще и дешевле. ответственности при производстве меньше, да и ввиду последних событий, на Украине как раз нужны такие боты, для того же разминироваения... лучше пусть машина на мине подорвется и колеса потеряет чем человек - ногу, и потом получит ваш протез, который поможет ему шею свернуть
void loop()
{
servo3.write(10); // нога назад
servo4.write(20); // колено разогнуто
delay(500);
servo3.write(60); // нога вперед
servo4.write(60); // колено согнуть
delay(500);
servo4.write(20); // колено разогнуть
servo3.write(40); // нога чуток назад
delay(500);
}
int servoDelay=15;
void loop(){
for (pos=20; pos<=160; pos=pos+1) {
servo.write(pos);
delay(servoDelay);
}
for (pos=160; pos>=20; pos=pos-1) {
myPointer.write(pos);
delay(servoDelay);
}
void loop(){
servoDelay=15;
servo.write(20);
delay(2000);
for (pos=20; pos<=160; pos=pos+1) {
servo.write(pos);
delay(servoDelay);
}
void loop() {
int pos = 0;
int tergetPos = 110;
unsigned long time, diff;
unsigned long travelTime = 1500; //milliseconds
servo.write(20);
delay(2000);
time = millis();
while(pos < tergetPos)
{
diff = time - millis();
pos = вычисли здесь сам;
servo.write(pos);
}
}
Angel71 писал(а):пробуй придумывать, как в нужный момент и с каким значением вызывать servo.write. отот последний пример с вычислением значения тебе еще пригодится. переписать под себя библиотеку для серв или написать свою библиотеку управления моторами привода (если серву переделаешь или другой привод возьмёшь). для нормального управления тебе нужно будет знать реальное положение (ну то потом), а не пытаться управлять сервой по принципу "ну по идеи она должна сейчас быть тут". подпаяться к потенциометру сервы. мотором или управлять напрямую (свой h-мост/драйdер мотора прикрутить) или временно оставить через электронику сервы.
язык это не то, что бы второстепенное. само по себе хорошее знание бесполезно, если не можешь алгоритмы придумывать. как бы взаимодополняющее получается. язык вообще можно отдельно изучать. отдельно сам язык это даже полезней. просто самоучитель и в какой среде разработки (в контроллер дуни заливать не очень удобно - нет отладчика, в котором можно хоть пошагово выполнять и смотреть, какие значения у переменных/констант и т.д.), хоть консольное приложение. читаешь книжки, решаешь там задачки. можно порешать какие задачники по программированию. и т.д.
для начала из языка вообще не обязательно много знать. просто разок-другой прочитай небольшой самоучитель, где вкратце опишут основное и уже потом постепенно и из книжек и со всяких статеек по языку и программированию ардуинок будешь узнавать больше.
void loop() {
int pos = 0;
int tergetPos = 110;
unsigned long time, diff;
unsigned long travelTime = 1500; //milliseconds
servo.write(20);
delay(2000);
time = millis();
while(pos < tergetPos)
{
diff = time - millis();
pos = вычисли здесь сам;
servo.write(pos);
}
}
servo4.write(20); // колено разогнуто
delay(500);
servo4.write(60); // колено согнуть
for(i=20;i<60;i++)
{
servo4.write(i);
delay(100);
}