• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie silnikami krokowymi przez aplikację na androida??
#1
Witam
Mam mały problem z napisaniem kodu a raczej jego pewnie małą zmianą ale dopiero zaczynam zabawę z arduino.
Wydrukowałem sobie projekt czołgu na silnikach korkowych nema17 o taki: http://www.thingiverse.com/thing:467807 i chciałbym sterować nim za pomocą aplikacji na telefonie z androidem a dokładnie chodzi o tą aplikację :
https://play.google.com/store/apps/detai...controller
Posiadam arduino uno (klon) moduł bluetooth hc-05 oraz Shield sterownika L293D zasilanie samego arduino odbywa się z power banka a silników z baterii 9V.

Całość podłączyłem-wgrałem jak na tym filmie https://www.youtube.com/watch?v=2xkA5VpwYik z tym że zamiast silników DC są  silniki krokowe podłączone według tego schematu http://www.14core.com/wp-content/uploads...-Motor.jpg
I tutaj mam problem co do kodu by móc tym sterować tak jak na filmie z tym że zamiast silników DC były silniki krokowe nema17 ktoś pomoże w napisaniu, zmianie tego kodu ??
Chyba że znacie jakieś inne ??
Z góry dziękuje za pomoc.

Kod:
//---------------------------------------------------------------------------------------------------------------------------------------
//Basic Remote Control Car - Bill Tarpy - North East CoderDojo  17/01/2015
//Feel free to use this software as a basis for your own.
#include <SoftwareSerial.h> //the library for seial communication
#include <AFMotor.h> // the library for the Adafruit L293 Arduino Motor Shield
int incomingByte = 0; // for incoming serial data
int speed_min = 135; //the minimum "speed" the motors will turn - take it lower and motors don't turn
int speed_max = 255; //the maximum "speed" the motors will turn – you can’t put in higher

int speed_left = speed_max; // set both motors to maximum speed
int speed_right = speed_max;

//as we added a Motor Shield Library we can just use the following code to define our M1 and M2 motors and their PWM frequency
//the library takes care of all the complexity of the physical interface the Arduino uses to talk to the shield and the motor
AF_DCMotor motor_left(1, MOTOR12_1KHZ); // create motor #1, 1KHz pwm
AF_DCMotor motor_right(4, MOTOR12_1KHZ); // create motor #2, 1KHz pwm

void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps - this is the speed the serial interface will work at
Serial.println("Motor test!");// display message for test purposes when connected to a serial monitor
}

void loop() {
 //this is our repeating loop - that will go round and round until we switch the Arduino off
 motor_left.setSpeed(speed_left); // minimum speed 135   max speed 255
motor_right.setSpeed(speed_right); // minimum speed 135   max speed 255  
     
//first check if there is anything on the serial interface
//we are using the Arduino's default serial interface (pins 0 and 1)so no need to define these
   if (Serial.available() > 0) {
   // read the incoming byte:
   incomingByte = Serial.read();
   }

 // if there is something on the serial interface it is read and assigned to incomingByte
 // we then use a SWITCH (case) statement which, depending on incomingByte, does different things
 // it runs the left and right motors to produce movement Forward, Backward, Left, Right or Stop
 //that's all there is to it!
 
 switch(incomingByte)
 {
    case 'S':
        // stop all motors
     { motor_left.run(RELEASE); // stopped
      motor_right.run(RELEASE); // stopped
      Serial.println("Stop\n"); //display message for test purposes when connected to a serial monitor
      incomingByte='*';}
     
    break;
   
    case 'F':
      // turn it on going forward
    {  motor_left.run(FORWARD);
     
      Serial.println("Forward\n");//display message for test purposes when connected to a serial monitor
      incomingByte='*';}
    break;
   
     case 'B':
       // turn it on going backward
   {   motor_left.run(BACKWARD);
     
      Serial.println("Backward\n");//display message for test purposes when connected to a serial monitor
      incomingByte='*';}
    break;
   
    case 'R':
    // turn right
    {  
      motor_right.run(FORWARD);
      Serial.println("Rotate Right\n");//display message for test purposes
      incomingByte='*';}
    break;

   
      case 'L':
       // turn left
     {
      motor_right.run(BACKWARD);    
      Serial.println("Rotate Left\n");//display message for test purposes
      incomingByte='*';}
    break;
   
    case '1':
       // Put what you like in here - for example - change the motor speeds
     { speed_left = speed_min; // set both motors to minimum speed
      speed_right = speed_min;
      Serial.println("Speed 1\n");//display message for test purposes
      incomingByte='*';}
    break;
   
   case '2':
       // Put what you like in here - for example - turn on some LED lights on the car
     {
      Serial.println("Lights on\n");//display message for test purposes
     
      //why not use the motor sheild's spre motors - M3 and M4  - to turn lights on and off
      //you would need to define M3/4 in your program setup, and a few extra veriables to hold values
      //then FORWARD and BACKWARD would send a voltage one way then the other through the M3 and M4 terminals as you require
     
      incomingByte='*';}
    break;        
 }
}
//-------------------------------------------------------------------------------------------------------
 
Odpowiedź
#2
A masz Darlington uln.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
(28-08-2016, 23:09)adix napisał(a): A masz Darlington uln.

Niestety nie a w czym on ma pomóc?
 
Odpowiedź
#4
Po pacz jeden pin arduino ma max pobór prądu chyba o 0.4 A taki silnik sam bieze ok 2 A jak to chcesz sterować?
Właśnie dzieki darliktonowi czyli sterownik ULN2003.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#5
(29-08-2016, 18:23)adix napisał(a): Po pacz wn arduino ma max pobór prądu chyba o 0.4 A taki silnik sam bieze ok 2 A jak to chcesz sterować?
Właśnie dzieki darliktonowi czyli  sterownik ULN2003.

Mam jak pisałem shield do arduino o ten:
http://electropark.pl/shieldy/3686-ardui...ch-dc.html
[size=small]To co sugerujesz żeby zmienić na ten sterownik ULN2003 moje silniczki nema maja pobór prądu 0.9A i nawet połączyłam je oraz wgralem testowy kod od AF motor i działa co prawda ale strasznie słaby moment mają silniki.
 
Odpowiedź
#6
" działa co prawda ale strasznie słaby moment mają silniki."
bo ma za mało prądu a port atmegi daje 0.4 A


Shield L293D a wiec masz uln ==l293 top iny układ ale ta sama budowa "co prawda słaby ale jest" to jest darlikton a wiec masz wszystko i do obsługi tego nie potrzebujesz biblioteki najlepiej samemu to napisać.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#7
(29-08-2016, 22:12)adix napisał(a): npdziała co prawda ale strasznie słaby moment mają silniki."
bo ma za mało prądu a port atmegi daje 0.4 A


Shield L293D a wiec  masz uln ==l293 top iny układ ale ta sama budowa "co prawda słaby ale jest" to jest  darlikton a wiec masz wszystko i do obsługi tego nie potrzebujesz biblioteki najlepiej samemu to napisać.

Tak jak pisałem w pierwszym poscie posiadam wlasnie taki shield do arduino tylko mam problem z napisaniem tego kodu bo to juz jak dla mnie wyzsza szkoła czarna magia Smile czy mógłbyś odrobinę podpowiedzieć jak zacząć taki kod pod np. tą gotową już aplikacje na androida z pierwszego postu?
 
Odpowiedź
#8
Najpierw zrób prawo lewo silnikiem na przyciskach, zawsze buduj od podstaw.
A aplikacje się dopasuje do programu.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#9
(29-08-2016, 23:19)adix napisał(a): Najpierw zrób prawo lewo silnikiem na przyciskach, zawsze buduj od podstaw.
A aplikacje się dopasuje do programu.

Ok spróbuję ale wolałbym sterować już przy pomocy bluetootha i androida no ale jak prostych zadań sie nie wykona to się człowiek nie nauczy Smile
A masz jakiś pomysł by te silniki miały większy moment bo teraz to zatrzymuje ręką bez problemu czyżby za słaby prąd idzie na silniki 9V z bateryjki chyba że zmienić na dwa ogniwa 4.2V?
 
Odpowiedź
#10
Stary program zawsze piszesz od podstaw a chodzi mi bys napisal program do ardoino i dziala bedze:
s1 w prawo.
s2 w lewo.
Potem pujdziemy dalej czyli obsuga bluetoot
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości