diff options
| author | abel <71026016+ableTI@users.noreply.github.com> | 2024-04-07 20:24:58 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-07 20:24:58 +0200 |
| commit | a51f5cddb85a7ba8f44a25c5e2732155ccc14ce9 (patch) | |
| tree | f914f5fb2e6b0f5762dbc4904af68741279baf2f /motordriver/motordriver.ino | |
| parent | 8090bcd5a35db3c9b63315ec99cc3e694c64974b (diff) | |
| download | robotica-a51f5cddb85a7ba8f44a25c5e2732155ccc14ce9.tar.gz robotica-a51f5cddb85a7ba8f44a25c5e2732155ccc14ce9.zip | |
Update motordriver.ino
Diffstat (limited to 'motordriver/motordriver.ino')
| -rw-r--r-- | motordriver/motordriver.ino | 254 |
1 files changed, 166 insertions, 88 deletions
diff --git a/motordriver/motordriver.ino b/motordriver/motordriver.ino index ac1f13b..5f514ba 100644 --- a/motordriver/motordriver.ino +++ b/motordriver/motordriver.ino @@ -1,3 +1,4 @@ +//moveohmi = https://robotics.stackexchange.com/questions/7829/how-to-program-a-three-wheel-omni // motor one int enA = 33; int in1 = 2; @@ -11,7 +12,15 @@ int enC = 37; int in5 = 7; int in6 = 6; -int sp = 50; +int sp = 160; + +double dirA = 0.00; +double dirB = 0.00; +double dirC = 0.00; +double spdA = 0.00; +double spdB = 0.00; +double spdC = 0.00; +double dirrad = 0.00; void setup() { @@ -30,102 +39,171 @@ void setup() void demoOne() { // this function will run the motors in both directions at a fixed speed - // turn on motor A - digitalWrite(in1, HIGH); - digitalWrite(in2, LOW); - // set speed to 200 out of possible range 0~255 - analogWrite(enA, 200); - // turn on motor B - digitalWrite(in3, HIGH); - digitalWrite(in4, LOW); - // set speed to 200 out of possible range 0~255 - analogWrite(enB, 200); + // turn on motor A + digitalWrite(in1, HIGH); + digitalWrite(in2, LOW); + // set speed to 200 out of possible range 0~255 + analogWrite(enA, sp); + // turn on motor B + digitalWrite(in3, HIGH); + digitalWrite(in4, LOW); + // set speed to 200 out of possible range 0~255 + analogWrite(enB, sp); // turn on motor c - digitalWrite(in5, HIGH); - digitalWrite(in6, LOW); - // set speed to 200 out of possible range 0~255 - analogWrite(enC, 200); - delay(2000); - // now change motor directions - digitalWrite(in1, LOW); - digitalWrite(in2, HIGH); - digitalWrite(in3, LOW); - digitalWrite(in4, HIGH); - digitalWrite(in5, LOW); - digitalWrite(in6, HIGH); - delay(2000); - // now turn off motors - digitalWrite(in1, LOW); - digitalWrite(in2, LOW); - digitalWrite(in3, LOW); - digitalWrite(in4, LOW); + digitalWrite(in5, HIGH); + digitalWrite(in6, LOW); + // set speed to 200 out of possible range 0~255 + analogWrite(enC, sp); + delay(2000); + // now change motor directions + digitalWrite(in1, LOW); + digitalWrite(in2, HIGH); + digitalWrite(in3, LOW); + digitalWrite(in4, HIGH); + digitalWrite(in5, LOW); + digitalWrite(in6, HIGH); + delay(2000); + // now turn off motors + digitalWrite(in1, LOW); + digitalWrite(in2, LOW); + digitalWrite(in3, LOW); + digitalWrite(in4, LOW); } void demoTwo() { - // this function will run the motors across the range of possible speeds - // note that maximum speed is determined by the motor itself and theoperating voltage - // the PWM values sent by analogWrite() are fractions of the maximumspeed possible - // by your hardware - // turn on motors - digitalWrite(in1, LOW); - digitalWrite(in2, HIGH); - digitalWrite(in3, LOW); - digitalWrite(in4, HIGH); - digitalWrite(in5, LOW); - digitalWrite(in6, HIGH); - // accelerate from zero to maximum speed - for (int i = 0; i < 256; i++) - { - analogWrite(enA, i); - analogWrite(enB, i); - analogWrite(enC, i); - delay(20); - } - // decelerate from maximum speed to zero - for (int i = 255; i >= 0; --i) - { - analogWrite(enA, i); - analogWrite(enB, i); - analogWrite(enC, i); - delay(20); - } - // now turn off motors - digitalWrite(in1, LOW); - digitalWrite(in2, LOW); - digitalWrite(in3, LOW); - digitalWrite(in4, LOW); - digitalWrite(in5, LOW); - digitalWrite(in6, LOW); + // this function will run the motors across the range of possible speeds + // note that maximum speed is determined by the motor itself and theoperating voltage + // the PWM values sent by analogWrite() are fractions of the maximumspeed possible + // by your hardware + // turn on motors + digitalWrite(in1, LOW); + digitalWrite(in2, HIGH); + digitalWrite(in3, LOW); + digitalWrite(in4, HIGH); + digitalWrite(in5, LOW); + digitalWrite(in6, HIGH); + // accelerate from zero to maximum speed + for (int i = 0; i < 256; i++) + { + analogWrite(enA, i); + analogWrite(enB, i); + analogWrite(enC, i); + delay(20); + } + // decelerate from maximum speed to zero + for (int i = 255; i >= 0; --i) + { + analogWrite(enA, i); + analogWrite(enB, i); + analogWrite(enC, i); + delay(20); + } + // now turn off motors + digitalWrite(in1, LOW); + digitalWrite(in2, LOW); + digitalWrite(in3, LOW); + digitalWrite(in4, LOW); + digitalWrite(in5, LOW); + digitalWrite(in6, LOW); +} + +void Amove(int sped){ + if (sped < 0) { + digitalWrite(in1, LOW); + digitalWrite(in2, HIGH); + } + else{ + digitalWrite(in1, HIGH); + digitalWrite(in2, LOW); + } + sp = abs(sped); + analogWrite(enA, sp); +} +void Bmove(int sped) { + if (sped < 0) { + digitalWrite(in3, LOW); + digitalWrite(in4, HIGH); + } else { + digitalWrite(in3, HIGH); + digitalWrite(in4, LOW); + } + int sp = abs(sped); + analogWrite(enB, sp); +} +void Cmove(int sped) { + if (sped < 0) { + digitalWrite(5, LOW); + digitalWrite(6, HIGH); + } else { + digitalWrite(5, HIGH); + digitalWrite(6, LOW); + } + int sp = abs(sped); + analogWrite(enC, sp); } -void forward() -{ - sp = 160; - analogWrite(enA, sp); - analogWrite(enB, sp); - analogWrite(enC, sp); - digitalWrite(in1, LOW); - digitalWrite(in2, HIGH); - digitalWrite(in3, LOW); - digitalWrite(in4, HIGH); - digitalWrite(in5, LOW); - digitalWrite(in6, HIGH); - delay(2000); +void turnoff(){ + analogWrite(enA, 0); + analogWrite(enB, 0); + analogWrite(enC, 0); + digitalWrite(in1, LOW); + digitalWrite(in2, LOW); + digitalWrite(in3, LOW); + digitalWrite(in4, LOW); + digitalWrite(in5, LOW); + digitalWrite(in6, LOW); +} +void forward(int speed){ + analogWrite(enA, speed); + analogWrite(enB, speed); + analogWrite(enC, speed); + digitalWrite(in1, LOW); + digitalWrite(in2, LOW); + digitalWrite(in3, HIGH); + digitalWrite(in4, LOW); + digitalWrite(in5, HIGH); + digitalWrite(in6, LOW); +} + +void moveohmi(int speed, int direction) +{ + turnoff(); + double dirrad = (direction*71) / 4068; + dirA = 1.047198-dirrad; + dirB = 3.141593-dirrad; + dirC = 5.235988-dirrad; + spdA = speed*sin(dirA); + spdB = speed*sin(dirB); + spdC = speed*sin(dirC); + Amove(spdA); + Bmove(spdB); + Cmove(spdC); +} +void beddermoveohmi(int speed, int direction) +{ + turnoff(); - // now turn off motors - digitalWrite(in1, LOW); - digitalWrite(in2, LOW); - digitalWrite(in3, LOW); - digitalWrite(in4, LOW); - digitalWrite(in5, LOW); - digitalWrite(in6, LOW); + double dirrad = (direction*71) / 4068; + Serial.println(dirrad); + //vector ontb in x en y + double x = sin(dirrad)*speed; + double y = cos(dirrad)*speed; + Serial.println((String)"x:"+x+" y:"+y); + spdA = -0.5*x - sqrt(3)/2*y; + spdB = x; + spdC = -0.5*x + sqrt(3)/2*y; + Serial.println(spdA); + Serial.println(spdB); + Serial.println(spdC); + Serial.println(); + Serial.println(); } void loop() { - //demoOne(); - //delay(1000); - //demoTwo(); - delay(1000); - forward(); + //demoOne(); + //delay(1000); + //demoTwo(); + delay(1000); + beddermoveohmi(1, 20); } |
