MAL4X Научно-технический форум разработчиков симуляторов и автоматики


Симуляторы перегрузок. DIY электроника. ЭВМ. Компьютерные сети.
Up

Помогите, дайте схему и код на Arduino и Monster Moto Sh

Строим реалистичный симулятор перегрузок своими руками. Рекомендации. Советы.

Модераторы: Death_Morozz, null, Ale

Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение ketlller » 21 фев 2017, 13:35

Ребята! На сайте нету конкретной информации для 2dof, по ел схеме и кода на Arduino Uno и Monster Moto Shield - для SimTools.
Пожалуйста помогите ссылками или самой ел схемой и кодом на Arduino Uno и Monster Moto Shield.
Заранее мы новички будем благодарны.
ketlller
Новичок
 
Сообщения: 31
Зарегистрирован: 12 фев 2017, 16:32
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Баллы репутации: -5

Re: Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение SimAl » 21 фев 2017, 21:37

В простом варианте схема там не особо нужна по большому счету. Просто шилд бутербродом ставится на Ардуино и все работает. Останется только силовые линии протянуть и обратную связь. Для этого схема, допустим есть здесь, заодно и с внятным описанием.
Аватара пользователя
SimAl
SIMER
 
Сообщения: 379
Зарегистрирован: 22 ноя 2013, 20:03
Откуда: Кропивницкий
Благодарил (а): 58 раз.
Поблагодарили: 258 раз.
Баллы репутации: 128
ТехнарьТехнарь

Re: Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение ketlller » 23 фев 2017, 01:35

SimAl писал(а):В простом варианте схема там не особо нужна по большому счету. Просто шилд бутербродом ставится на Ардуино и все работает. Останется только силовые линии протянуть и обратную связь. Для этого схема, допустим есть здесь, заодно и с внятным описанием.



Я делаю в соответствии с указаниями инструкции, но когда я тестирую на SimTools, то сигнал на двигатель не идет.
Спаял по схеме этой:
Arduino /..Motomonster1
....GND <-> GND pin
.........5V <-> 5V
.....pin 4 <-> pin 4 inA motor1
.....pin 5 <-> pin 5 pwm1
.....pin 6 <-> pin 6 pwm2
.....pin 7 <-> pin 7 inA motor2
.....pin 8 <-> pin 8 inB motor1
.....pin 9 <-> pin 9 inB motor2

.....pinA0 <-> center pin of pot 1
.....pinA1 <-> center pin of pot 2
.....pinGND <-> 0 ohm's pin potentiometer 1 & 2
.....pin 5V <-> 10k ohm's pin potentiometer 1 & 2

8.jpg
8.jpg (3.35 МБ) Просмотров: 11122



Мои настройки принтскрин SimTools:

1.jpg
1.jpg (168.95 КБ) Просмотров: 11124

2.jpg
2.jpg (156.44 КБ) Просмотров: 11124

3.jpg
3.jpg (155.62 КБ) Просмотров: 11124


Я начинаю испытание двигателя - двигатель не работает.
4.jpg
4.jpg (145.47 КБ) Просмотров: 11124


пытаюст тестить - но двигатель не вращается((
5.jpg
5.jpg (3 МБ) Просмотров: 11124





На Ардуину заливал этот код что вы мне дали по ссылке
https://www.xsimulator.net/2dof-motion- ... layseat/4/

6.jpg
6.jpg (173.88 КБ) Просмотров: 11124


потом перешел по ссылке с кодом и скачал его и залил на Ардуино:
2DOF_Racingmat_Arduino_Code_and_Presets.zip
(4.23 КБ) Скачиваний: 66

https://www.xsimulator.net/community/ma ... bridge.67/

7.jpg
7.jpg (289.11 КБ) Просмотров: 11124



Помогите пожалуйста разобратся с моей ошибкой!?(
ketlller
Новичок
 
Сообщения: 31
Зарегистрирован: 12 фев 2017, 16:32
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Баллы репутации: -5

Re: Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение SimAl » 23 фев 2017, 02:35

Стоило бы сначала разобраться, правильно ли подключено. Для этого можно залить этот скетч. Судя по коду, сразу после его заливки двигатели должны начать вращаться, периодически меняя направление вращения.
Ну и не видно, откуда выходят провода из двигателя.
Аватара пользователя
SimAl
SIMER
 
Сообщения: 379
Зарегистрирован: 22 ноя 2013, 20:03
Откуда: Кропивницкий
Благодарил (а): 58 раз.
Поблагодарили: 258 раз.
Баллы репутации: 128
ТехнарьТехнарь

Re: Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение ketlller » 23 фев 2017, 03:57

SimAl писал(а):Стоило бы сначала разобраться, правильно ли подключено. Для этого можно залить этот скетч. Судя по коду, сразу после его заливки двигатели должны начать вращаться, периодически меняя направление вращения.
Ну и не видно, откуда выходят провода из двигателя.


С этим кодом вырывает резисторы((( . Это что-то не тот код!!!! Может посоветуешь кодо именно для работы с Sim Tools ? Заранее благодарен.
ketlller
Новичок
 
Сообщения: 31
Зарегистрирован: 12 фев 2017, 16:32
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Баллы репутации: -5

Re: Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение ketlller » 23 фев 2017, 04:51

ketlller писал(а):
SimAl писал(а):Стоило бы сначала разобраться, правильно ли подключено. Для этого можно залить этот скетч. Судя по коду, сразу после его заливки двигатели должны начать вращаться, периодически меняя направление вращения.
Ну и не видно, откуда выходят провода из двигателя.


С этим кодом вырывает резисторы((( . Это что-то не тот код!!!! Может посоветуешь кодо именно для работы с Sim Tools ? Заранее благодарен.


Вот я нашел код на Ардуину, но сигнал на второй движек пропадает или затухает. Меня местами движки и резисторы. Проблемка в коде получается((
Можешь пожалуйста глянуть код в чем проблемка то(?

/*
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=208;
const int potMaxi=815;

////////////////////////////////////////////////////////////////////////////////
#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<potMini) || (actualPos<targetPos)) motorGo(numMot, FW, pwm);
// 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;
}
ketlller
Новичок
 
Сообщения: 31
Зарегистрирован: 12 фев 2017, 16:32
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Баллы репутации: -5

Re: Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение SimAl » 23 фев 2017, 11:49

ketlller писал(а):С этим кодом вырывает резисторы((( . Это что-то не тот код!!!! Может посоветуешь кодо именно для работы с Sim Tools ? Заранее благодарен.
Этот скетч и не должен работать с резисторами. Он призван показать, правильно ли подключены двигатели. Если правильно - должны вращаться оба двигателя. Я так понял, работают? Отключить вообще-то механически нужно было резисторы.

В уме я такой скетч выполнить не могу. Номера входов, вроде, правильные.
Единственное, что меня смущает - то, что у тебя входы с резисторов заведены на А0 и А1 и при этом запаяна гребенка, соответственно на эти же входы повешены и токовые выходы шилда. Так что я бы либо выпаял контакты А0 и А1 на шилде и подключил резисторы к самой Ардуино, либо переместил бы резисторы на свободные А4, А5 с соответствующим изменением скетча. Также попробуй поотправлять команды из какого-то терминала, не из СимТулз. Я так понимаю, в терминале должен быть виден ответ Ардуино.
Аватара пользователя
SimAl
SIMER
 
Сообщения: 379
Зарегистрирован: 22 ноя 2013, 20:03
Откуда: Кропивницкий
Благодарил (а): 58 раз.
Поблагодарили: 258 раз.
Баллы репутации: 128
ТехнарьТехнарь

Re: Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение ketlller » 23 фев 2017, 18:26

SimAl писал(а):
ketlller писал(а):С этим кодом вырывает резисторы((( . Это что-то не тот код!!!! Может посоветуешь кодо именно для работы с Sim Tools ? Заранее благодарен.
Этот скетч и не должен работать с резисторами. Он призван показать, правильно ли подключены двигатели. Если правильно - должны вращаться оба двигателя. Я так понял, работают? Отключить вообще-то механически нужно было резисторы.

В уме я такой скетч выполнить не могу. Номера входов, вроде, правильные.
Единственное, что меня смущает - то, что у тебя входы с резисторов заведены на А0 и А1 и при этом запаяна гребенка, соответственно на эти же входы повешены и токовые выходы шилда. Так что я бы либо выпаял контакты А0 и А1 на шилде и подключил резисторы к самой Ардуино, либо переместил бы резисторы на свободные А4, А5 с соответствующим изменением скетча. Также попробуй поотправлять команды из какого-то терминала, не из СимТулз. Я так понимаю, в терминале должен быть виден ответ Ардуино.


Привет!
я подключал резисторы на плату Arduino Uno на контакты А0 и А1.
Запускаю SimTools запускаю игру LFS , то двигателя работают! Но один работает устало както, с потерей-пропадания напряжения хз....
Я менял местами контакты резисторов и двигателей - то проблема на другом движке стала. Тойсть проблемка в коде Arduino Uno наверное???
10.jpg
10.jpg (3.45 МБ) Просмотров: 11103


А еще я заметил что на тем резисторе где двигатель теряется и прерывчасто работает - то оцентровки у резистора нету. Тойсть центральное положение резистора смещенное. Где устанавливается среднее положение резистора, от которого двигатель будет уходить влево или вправо - в коде есть такие данные?


А может быть проблема в Monster Moto (китай) ? Визуально при покупке увидел пятно темное на левой микросхеме, но суть в том что у меня подглючивает правый канал получается. Или в коде проблема или в плате Monster Moto (китай). Что скажите?

11.jpg
11.jpg (3.77 МБ) Просмотров: 11102
ketlller
Новичок
 
Сообщения: 31
Зарегистрирован: 12 фев 2017, 16:32
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Баллы репутации: -5

Сообщение SimAl » 23 фев 2017, 19:40

Поэтому я и предлагаю тестировать по очереди. Запустити скетч, который я тебе сначала давал для проверки монстров. Если оба мотора будут работать одинаково, тогда залей скетч для симулятора и поуправляй из терминала. Если получится, тогда уже симтулз. А ты собрал сразу все в кучу, и теперь непонятно где искать проблему.
Аватара пользователя
SimAl
SIMER
 
Сообщения: 379
Зарегистрирован: 22 ноя 2013, 20:03
Откуда: Кропивницкий
Благодарил (а): 58 раз.
Поблагодарили: 258 раз.
Баллы репутации: 128
ТехнарьТехнарь

Re:

Сообщение ketlller » 23 фев 2017, 22:11

SimAl писал(а):Поэтому я и предлагаю тестировать по очереди. Запустити скетч, который я тебе сначала давал для проверки монстров. Если оба мотора будут работать одинаково, тогда залей скетч для симулятора и поуправляй из терминала. Если получится, тогда уже симтулз. А ты собрал сразу все в кучу, и теперь непонятно где искать проблему.


я тебя поддерживаю, спасибо за поддержку!) может есть ссылки на терминалы?
ketlller
Новичок
 
Сообщения: 31
Зарегистрирован: 12 фев 2017, 16:32
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Баллы репутации: -5

Re: Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение SimAl » 23 фев 2017, 23:00

Аватара пользователя
SimAl
SIMER
 
Сообщения: 379
Зарегистрирован: 22 ноя 2013, 20:03
Откуда: Кропивницкий
Благодарил (а): 58 раз.
Поблагодарили: 258 раз.
Баллы репутации: 128
ТехнарьТехнарь

Re: Помогите, дайте схему и код на Arduino и Monster Moto Sh

Сообщение ketlller » 24 фев 2017, 00:35

SimAl писал(а):Конечно есть!


Ну ты вообще ГЕНИЙ...))) даже вместо меня прописал в поиске гугла serial+terminal ))) спасибо за заботу!!!)))))

Крутой сайт http://mal4x.ru
Ребята здесь отзывчивые, с великими знаниями!!!! Благодарю . :!:
ketlller
Новичок
 
Сообщения: 31
Зарегистрирован: 12 фев 2017, 16:32
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Баллы репутации: -5


Вернуться в X-SIMULATOR и RU-SIMULATOR & SimTools

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 230

cron
x

#{title}

#{text}