GranDoxin Опубликовано 15 августа, 2017 Поделиться Опубликовано 15 августа, 2017 Ссылка на комментарий
expresso07 Опубликовано 16 августа, 2017 Поделиться Опубликовано 16 августа, 2017 ага, именно этот человек делал мою платформу Ссылка на комментарий
JohnDoe Опубликовано 16 августа, 2017 Поделиться Опубликовано 16 августа, 2017 @GranDoxin, Ишь, оживился… Не хрен на моушен-платформы отвлекаться — баранку делай давай : ) 1 Ссылка на комментарий
expresso07 Опубликовано 16 августа, 2017 Поделиться Опубликовано 16 августа, 2017 кстати да - заказывать мне еще один q1r маму или нет? Ссылка на комментарий
GranDoxin Опубликовано 16 августа, 2017 Поделиться Опубликовано 16 августа, 2017 Ишь, оживился… Так это же наоборот хорошо.. )) кстати да - заказывать мне еще один q1r маму или нет? Ну погоди, заказывать надо когда будет к чему... )) Ссылка на комментарий
Популярный пост GranDoxin Опубликовано 17 августа, 2017 Популярный пост Поделиться Опубликовано 17 августа, 2017 5 Ссылка на комментарий
AntonP Опубликовано 17 августа, 2017 Поделиться Опубликовано 17 августа, 2017 Класс!!!! Ссылка на комментарий
mypkuh Опубликовано 26 августа, 2017 Автор Поделиться Опубликовано 26 августа, 2017 китайцы радуют доставка за 12 дней. [spoiler=Готовь кокпиты летом] Заканчиваю первый этап, остались моторы дождаться и начинаю собирать стенд. 3 Ссылка на комментарий
mypkuh Опубликовано 4 сентября, 2017 Автор Поделиться Опубликовано 4 сентября, 2017 Добавляем к нашим расходам +1500р. П.О по извлечению данных из игр, оказывается стоит денег) Кряка я не нашел, а я искал (нет) затраты на сегодняшний день: Два мотора 2400р экзист автодок Адруино и МоторМосты 500р али два БП 12вольт 16А примерно 2000р (БУ)авито Поты 300р 10шт(продаются партиями) али ПО simtools 1500р Провода и расходы на пайку Кардан, расходы на сварку и металл еще неизвестны. [spoiler=Мотор от ланоса]https://fotki.yandex...80/view/2120681 [spoiler=наша схема и что получилось]https://fotki.yandex...80/view/2120680 https://fotki.yandex...80/view/2120679 В. Почему нужен мотор от ланоса? О. У него масса не на корпусе, а отдельным проводом! З.Ы. еслиб я знал, что все не так просто я бы не начал! это только начало, а уже столько гемороя. надеюсь хватить сил 2 Ссылка на комментарий
TOPMO3 Опубликовано 4 сентября, 2017 Поделиться Опубликовано 4 сентября, 2017 П.О по извлечению данных из игр, оказывается стоит денег) Для самодельщиков бесплатно. Тебе надо у них на форуме завести тему про свою конструкцию (на англ, через гугл транслейт), такая тема является как бы подтверждением того, что тебе нужна DIY-лицензия 2 Ссылка на комментарий
mypkuh Опубликовано 5 сентября, 2017 Автор Поделиться Опубликовано 5 сентября, 2017 (изменено) Кардан https://goo.gl/photo...r5YZHxMG247KuDA https://goo.gl/photo...6xHeNx4ttJWHct7 при покупке обращать внимание на состоянии крестовины, чтобы легко вращалась) UPD Хорошие новости "оно заработало" видео с полей https://www.youtube.com/watch?v=fYMBm8TMLGw Изменено 5 сентября, 2017 пользователем mypkuh 3 Ссылка на комментарий
GranDoxin Опубликовано 5 сентября, 2017 Поделиться Опубликовано 5 сентября, 2017 Вж вж насколько тихо или громко для уха? Ссылка на комментарий
mypkuh Опубликовано 5 сентября, 2017 Автор Поделиться Опубликовано 5 сентября, 2017 Вж вж насколько тихо или громко для уха? ну на столе слышно, после установки моторы стоят за креслом, пилот обычно в наушниках и шлеме, врятли услушит Ссылка на комментарий
GranDoxin Опубликовано 6 сентября, 2017 Поделиться Опубликовано 6 сентября, 2017 пилот обычно в наушниках и шлеме, врятли услушит Ну это смотря какой пилот.. у меня вот и шлема то нет : ) На самом деле я не за пилота беспокоюсь, а за окружающих. Насколько оно может или не может досаждать им... В домашних условиях это немаловажно. 1 Ссылка на комментарий
expresso07 Опубликовано 6 сентября, 2017 Поделиться Опубликовано 6 сентября, 2017 нормально со звуком. шум лично у меня только от вентиляторов, охлаждающих сам мост adruino. пения птиц и скрипов, как с актуторами, тут тоже нет. икто не жаловался, хотя и вечером бывает гоняю 1 Ссылка на комментарий
mypkuh Опубликовано 7 сентября, 2017 Автор Поделиться Опубликовано 7 сентября, 2017 вот и первые головняки, хз чо с левым мотором Ссылка на комментарий
Deriy Опубликовано 7 сентября, 2017 Поделиться Опубликовано 7 сентября, 2017 Какой софт используешь? Когда я ради экперимента делал на ардуино и 6 рулевых машинках миниплатформу 6dof, одна их машинок тоже дергалась. На форуме XSimulator никто вразумительного ответа не дал. Начал разбираться, и оказалось что нужно было увеличить время задержки в настройках софта. После этого всё заработало как надо. На картине эток параметр установлен на 20 м.сек. Я его повышал до тех пор пока сбои не прекратились. 1 Ссылка на комментарий
mypkuh Опубликовано 7 сентября, 2017 Автор Поделиться Опубликовано 7 сентября, 2017 Какой софт используешь? Когда я ради экперимента делал на ардуино и 6 рулевых машинках миниплатформу 6dof, одна их машинок тоже дергалась. На форуме XSimulator никто вразумительного ответа не дал. Начал разбираться, и оказалось что нужно было увеличить время задержки в настройках софта. После этого всё заработало как надо. На картине эток параметр установлен на 20 м.сек. Я его повышал до тех пор пока сбои не прекратились. измение данной настройки увы не помогает. единственное что остается это либо в коде ардуино что-то или мотор такой глюченый. вот мой код мб кто разбирается в таких?) [spoiler=код ардуино] /* Arduino code for dynamic playseat 2DOF Created 24 May 2011 by Jim Lindblom SparkFun Electronics https://www.sparkfun.com/products/10182 "Example Code" Created 24 Apr 2012 by Jean David SEDRUE Version betatest26 - 24042012 http://www.gamoover.net/Forums/index.php?topic=25907 Updated 20 May 2013 by RacingMat in english http://www.xsimulator.net/2dof-wiper-motor-playseat/ in french : http://www.gamoover.net/Forums/index.php?topic=27617 Updated 30 April 2014 by RacingMat (bug for value below 16 corrected) */ #define BRAKEVCC 0 #define RV 2 //beware it's depending on your hardware wiring #define FW 1 //beware it's depending on your hardware wiring #define STOP 0 #define BRAKEGND 3 //////////////////////////////////////////////////////////////////////////////// #define pwmMax 255 // or less, if you want to lower the maximum motor's speed // defining the range of potentiometer's rotation const int potMini=300; const int potMaxi=800; //////////////////////////////////////////////////////////////////////////////// #define motLeft 0 #define motRight 1 #define potL A0 #define potR A1 //////////////////////////////////////////////////////////////////////////////// // DECLARATIONS //////////////////////////////////////////////////////////////////////////////// /* VNH2SP30 pin definitions*/ int inApin[2] = { 7, 4}; // INA: Clockwise input int inBpin[2] = { 8, 9}; // INB: Counter-clockwise input int pwmpin[2] = { 5, 6}; // PWM input int cspin[2] = { 2, 3}; // CS: Current sense ANALOG input int enpin[2] = { 0, 1}; // EN: Status of switches output (Analog pin) int statpin = 13; //not explained by Sparkfun /* init position value*/ int DataValueL=512; //middle position 0-1024 int DataValueR=512; //middle position 0-1024 //////////////////////////////////////////////////////////////////////////////// // INITIALIZATION //////////////////////////////////////////////////////////////////////////////// void setup() { // serial initialization Serial.begin(115200); // initialization of Arduino's pins pinMode(statpin, OUTPUT); //not explained by Sparkfun digitalWrite(statpin, LOW); for (int i=0; i<2; i++) { pinMode(inApin[i], OUTPUT); pinMode(inBpin[i], OUTPUT); pinMode(pwmpin[i], OUTPUT); } // Initialize braked for motor for (int i=0; i<2; i++) { digitalWrite(inApin[i], LOW); digitalWrite(inBpin[i], LOW); } } //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// Main Loop //////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// void loop() { int sensorL,sensorR; readSerialData(); // DataValueR & L contain the last order received (if there is no newer received, the last is kept) // the previous order will still be used by the PID regulation MotorMotion Function sensorR = analogRead(potR); // range 0-1024 sensorL = analogRead(potL); // range 0-1024 motorMotion(motRight,sensorR,DataValueR); motorMotion(motLeft,sensorL,DataValueL); } //////////////////////////////////////////////////////////////////////////////// // Procedure: wait for complete trame //////////////////////////////////////////////////////////////////////////////// void readSerialData() { byte Data[3]={ '0','0','0' }; // keep this function short, because the loop has to be short to keep the control over the motors if (Serial.available()>2){ //parse the buffer : test if the byte is the first of the order "R" Data[0]=Serial.read(); if (Data[0]=='L'){ Data[1]=Serial.read(); Data[2]=Serial.read(); // call the function that converts the hexa in decimal and that maps the range DataValueR=NormalizeData(Data); } if (Data[0]=='R'){ Data[1]=Serial.read(); Data[2]=Serial.read(); // call the function that converts the hexa in decimal and maps the range DataValueL=NormalizeData(Data); } } if (Serial.available()>16) Serial.flush(); } //////////////////////////////////////////////////////// void motorMotion(int numMot,int actualPos,int targetPos) //////////////////////////////////////////////////////// { int Tol=20; // no order to move will be sent to the motor if the target is close to the actual position // this prevents short jittering moves //could be a parameter read from a pot on an analogic pin // the highest value, the calmest the simulator would be (less moves) int gap; int pwm; int brakingDistance=30; // security concern : targetPos has to be within the mechanically authorized range targetPos=constrain(targetPos,potMini+brakingDistance,potMaxi-brakingDistance); gap=abs(targetPos-actualPos); if (gap<= Tol) { motorOff(numMot); //too near to move } else { // PID : calculates speed according to distance pwm=195; if (gap>50) pwm=215; if (gap>75) pwm=235; if (gap>100) pwm=255; pwm=map(pwm, 0, 255, 0, pwmMax); //adjust the value according to pwmMax for mechanical debugging purpose ! // if motor is outside from the range, send motor back to the limit ! // go forward (up) if ((actualPos// go reverse (down) if ((actualPos>potMaxi) || (actualPos>targetPos)) motorGo(numMot, RV, pwm); } } //////////////////////////////////////////////////////////////////////////////// void motorOff(int motor){ //Brake Ground : free wheel actually //////////////////////////////////////////////////////////////////////////////// digitalWrite(inApin[motor], LOW); digitalWrite(inBpin[motor], LOW); analogWrite(pwmpin[motor], 0); } //////////////////////////////////////////////////////////////////////////////// void motorOffBraked(int motor){ // "brake VCC" : short-circuit inducing electromagnetic brake //////////////////////////////////////////////////////////////////////////////// digitalWrite(inApin[motor], HIGH); digitalWrite(inBpin[motor], HIGH); analogWrite(pwmpin[motor], 0); } //////////////////////////////////////////////////////////////////////////////// void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) //////////////////////////////////////////////////////////////////////////////// { if (motor <= 1) { if (direct <=4) { // Set inA[motor] if (direct <=1) digitalWrite(inApin[motor], HIGH); else digitalWrite(inApin[motor], LOW); // Set inB[motor] if ((direct==0)||(direct==2)) digitalWrite(inBpin[motor], HIGH); else digitalWrite(inBpin[motor], LOW); analogWrite(pwmpin[motor], pwm); } } } //////////////////////////////////////////////////////////////////////////////// void motorDrive(uint8_t motor, uint8_t direct, uint8_t pwm) //////////////////////////////////////////////////////////////////////////////// { // more readable function than Jim's (for educational purpose) // but 50 octets heavier -> unused if (motor <= 1 && direct <=4) { switch (direct) { case 0: //electromagnetic brake : brake VCC digitalWrite(inApin[motor], HIGH); digitalWrite(inBpin[motor], HIGH); break; case 3: //Brake Ground (free wheel) digitalWrite(inApin[motor], LOW); digitalWrite(inBpin[motor], LOW); break; case 1: // forward : beware it's depending on your hardware wiring digitalWrite(inApin[motor], HIGH); digitalWrite(inBpin[motor], LOW); break; case 2: // Reverse : beware it's depending on your hardware wiring digitalWrite(inApin[motor], LOW); digitalWrite(inBpin[motor], HIGH); break; } analogWrite(pwmpin[motor], pwm); } } //////////////////////////////////////////////////////////////////////////////// // testPot //////////////////////////////////////////////////////////////////////////////// void testPot(){ Serial.print(analogRead(potR)); Serial.print(";"); Serial.println(analogRead(potL)); delay(250); } //////////////////////////////////////////////////////////////////////////////// void testpulse(){ int pw=120; while (true){ motorGo(motLeft, FW, pw); delay(250); motorOff(motLeft); delay(250); motorGo(motLeft, RV, pw); delay(250); motorOff(motLeft); delay(500); motorGo(motRight, FW, pw); delay(250); motorOff(motRight); delay(250); motorGo(motRight, RV, pw); delay(250); motorOff(motRight); Serial.println("testpulse pwm:80"); delay(500); } } //////////////////////////////////////////////////////////////////////////////// // Function: convert Hex to Dec //////////////////////////////////////////////////////////////////////////////// int NormalizeData(byte x[3]) //////////////////////////////////////////////////////////////////////////////// { int result; if ((x[2]==13) || (x[2]=='R') || (x[2]=='L')) //only a LSB and Carrier Return or 'L' or 'R' in case of value below 16 (ie one CHAR and not 2) { x[2]=x[1]; //move MSB to LSB x[1]='0'; //clear MSB } for (int i=1; i<3; i++) { if (x[i]>47 && x[i]<58 ){//for xA to xF x[i]=x[i]-48; } if ( x[i]>64 && x[i]<71 ){//for x0 to x9 x[i]=x[i]-55; } } // map the range from Xsim (0 <-> 255) to the mechanically authorized range (potMini <-> potMaxi) result=map((x[1]*16+x[2]),0,255,potMini,potMaxi); return result; } Ссылка на комментарий
Deriy Опубликовано 7 сентября, 2017 Поделиться Опубликовано 7 сентября, 2017 Для того чтобы убедиться в том что мотор глючный или нет, переподключи его на место того мотора который не дёргается. С кодом помочь к сожалению не могу. 2 Ссылка на комментарий
mypkuh Опубликовано 7 сентября, 2017 Автор Поделиться Опубликовано 7 сентября, 2017 Для того чтобы убедиться в том что мотор глючный или нет, переподключи его на место того мотора который не дёргается. С кодом помочь к сожалению не могу. В общем дело явно в коде, при переключении мотора работает без пробелем Ссылка на комментарий
TOPMO3 Опубликовано 8 сентября, 2017 Поделиться Опубликовано 8 сентября, 2017 честно говоря сомневаюсь, что дело в коде, но попробуй SMC3, имхо он самый продвинутый https://www.xsimulator.net/community/threads/smc3-arduino-3dof-motor-driver-and-windows-utilities.4957/ еще можно поменять местами мотомонстеры для проверки - у них тоже качество сильно плавает 1 Ссылка на комментарий
mypkuh Опубликовано 8 сентября, 2017 Автор Поделиться Опубликовано 8 сентября, 2017 (изменено) честно говоря сомневаюсь, что дело в коде, но попробуй SMC3, имхо он самый продвинутый https://www.xsimulator.net/community/threads/smc3-arduino-3dof-motor-driver-and-windows-utilities.4957/ еще можно поменять местами мотомонстеры для проверки - у них тоже качество сильно плавает На русском форуме подсказали что это норма и под нагрузкой пройдет. И вообще настройкой моторов только под нагрузкой заниматся. Возможно дело в мотомонстре Тем временем https://photos.app.goo.gl/0HmoMAUyXKnTmJNE2 Изменено 8 сентября, 2017 пользователем mypkuh 2 Ссылка на комментарий
mypkuh Опубликовано 10 сентября, 2017 Автор Поделиться Опубликовано 10 сентября, 2017 [spoiler=Как я это вижу] 3 Ссылка на комментарий
expresso07 Опубликовано 11 сентября, 2017 Поделиться Опубликовано 11 сентября, 2017 сталь? тяжеловасто будет.. зато железобетонно Ссылка на комментарий
mypkuh Опубликовано 11 сентября, 2017 Автор Поделиться Опубликовано 11 сентября, 2017 С заделом на будущие, кто знает вдруг психану и моторы помощнее поставлю) 1 Ссылка на комментарий
Рекомендуемые сообщения