element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Arduino
  • Products
  • More
Arduino
Arduino Forum Dc motor controll?
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Arduino to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Verified Answer
  • Replies 12 replies
  • Answers 1 answer
  • Subscribers 393 subscribers
  • Views 1149 views
  • Users 0 members are here
Related

Dc motor controll?

Former Member
Former Member over 11 years ago

Hi all I have finished one part of the dc motor controll program, this has subroutines for moveForward and moveBackward.  There are also limit switches set up for leftLimit and rightLimit.

 

What I would like next is to initiate a routine by a single press of goButton.    The table would then moveForward until leftLimit goes high, then stop and moveBackward until rightLimit goes high and stop and wait for next goButton to start next cycle.   The problem is the goButton and both the limit switches will not stay high,  they will just be high for a short time to initiate  the action , but the action has to go on until the next input.

 

Hope I have explained this well.

 

Gerhard

  • Sign in to reply
  • Cancel

Top Replies

  • jvdberg@ieee.org
    jvdberg@ieee.org over 11 years ago +1
    The most reliable way is to use limit switches in series with the motor. Especially if damage might result in case the motor drives beyond the limit. Not only an error in the code but also faulty transistors…
  • dougw
    0 dougw over 11 years ago

    Hi Gerhard,

    If you want to hard wire motor protection, but don't have 65A limit switches, you could try something like this:

    image

    The limit switch voltage could be set by the resistors to be compatible with your digital inputs for software monitiring.

    Note that if this uses PWM to adjust speed, software monitoring is more complex.

     

    Doug

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • phoenixcomm
    0 phoenixcomm over 8 years ago in reply to Former Member

    /*

    * dc moto with h-bridge and 2 potentiometers and 2 buttons

    * 1 button for forward at speed set by pot 1

    * 2 button for bacward at speed set by pot 2

    * limit switches on A4 and A5 */

    /*

    *RS: Pin2

    *E: Pin3

    *D4: Pin4

    *D5: Pin5

    *D6: Pin6

    *D7: Pin7 */

    //Include Library #include

    //Initiate LCD object

    LiquidCrystal lcd(2,3,4,5,6,7);

    int mode1      = 28;    //switch between pin 28

    int mode2      = 30;    //and pin 30

    int goBut      = 32;    // feed and return button pin 32

    int pot1        = A0;    // potentiometer to pin A0

    int pot2        = A1;    // potentiometer to pin A1

    int enable      = 10;    // to enable on h bridge

    int motorPin1  = 8;      // to In1 on h bridge

    int motorPin2  = 9;      // to In2 on h bride

    int leftBut    = 24;    // button to 12 pull-down

    int rightBut    = 26;    // button to 13 pull-down

    int leftLimit  = 11;    // limit switch to A4

    int rightLimit  = 12;    //limit switch to A5

    int redLed      = 13;

     

    void setup() {         // run once, when the sketch starts   

        // Begin lcd interface: 

        lcd.begin(16,2);    //Print top line 

        lcd.clear();   

        Serial.begin(9600);          // set up Serial library at 9600 bps 

        pinMode (mode1 , INPUT); 

        pinMode (mode2 , INPUT); 

        pinMode (goBut , INPUT); 

        pinMode(pot1, INPUT);         

        pinMode(pot2,INPUT); 

        pinMode(enable, OUTPUT); 

        pinMode(motorPin1, OUTPUT); 

        pinMode(motorPin2, OUTPUT); 

        pinMode(rightBut , INPUT); 

        pinMode(leftBut , INPUT); 

        pinMode(leftLimit , INPUT); 

        pinMode(rightLimit , INPUT); 

        pinMode (redLed , INPUT); 

        digitalWrite (redLed , LOW); 

        digitalWrite (motorPin1 , LOW); 

        digitalWrite (motorPin2 ,LOW); 

        digitalWrite (enable ,LOW);  }

     

        int getSpeed1() { 

              int x; 

              x = analogRead(pot1); 

              x /= 10; 

              x = max (x , 0); 

              x = min (x , 100); 

              return x; }

     

        int getSpeed2() { 

              int y; 

              y = analogRead(pot2); 

              y /= 10; 

              y = max (y ,0); 

              y = min (y , 100); 

              return y; }

     

        int getPot1() { 

              int v; 

              v = analogRead(pot1); 

              v /= 4; 

              v = max(v, 90); 

              v = min(v, 255); 

              return v; }

     

        int getPot2() { 

              int w; 

              w = analogRead(pot2); 

              w /= 4; 

              w = max(w, 90); 

              w = min(w, 255); 

              return w; }

     

        int motorFoward() { 

              analogWrite(motorPin1, getPot1());

              digitalWrite(enable,HIGH);

              digitalWrite(motorPin2,LOW);

              lcd.setCursor(5,1); 

              lcd.print("Left: ");  }

     

        int motorBackward() { 

              analogWrite(motorPin2, getPot2()); 

              digitalWrite(enable,HIGH); 

              digitalWrite(motorPin1,LOW); 

              lcd.setCursor(5,1); 

              lcd.print("Right:");  }

     

        int allStop() { 

              digitalWrite (motorPin1 , LOW); 

              digitalWrite(motorPin2 , LOW); 

              digitalWrite(enable ,LOW); 

              lcd.setCursor(5,1); 

              lcd.print("Ready:"); 

              digitalWrite(redLed , LOW); }

     

    void loop() {  // run over and over again   

        lcd.setCursor(0,1); 

        lcd.print("  %"); 

        lcd.setCursor(0,1); 

        lcd.print(getSpeed1()); 

        lcd.setCursor(12,1); 

        lcd.print("  %"); 

        lcd.setCursor(12,1); 

        lcd.print(getSpeed2()); 

        delay(100);     

        if (digitalRead(mode1) == HIGH) {   

              lcd.setCursor(0 ,0);   

              lcd.print("Feed mode.  ");   

              if (digitalRead(rightBut) == HIGH && digitalRead(leftLimit) == LOW) {   

                  motorFoward();  }     

              else if (digitalRead(leftBut) == HIGH && digitalRead(rightLimit) == LOW) {     

                  motorBackward(); }   

              else {     

                  allStop(); } } 

        else if(digitalRead(mode2) == HIGH) {   

              lcd.setCursor( 0,0);   

              lcd.print("Feed & Return.");   

              if (digitalRead(goBut) == HIGH) {

                    motorFoward(); }   

              if (digitalRead(leftLimit) == HIGH) {     

                  motorBackward(); }   

              if (digitalRead(rightLimit) == HIGH) {     

                  allStop(); } }        // space for the feed and return mode program         

        else {   

              lcd.setCursor(0,0);   

              lcd.print("Select mode?");   

              allStop(); } }

     

    @Gerhard_Oliver Now this is what the code should look like I think.

    He used syntax, that should not be legal. ie..

    "void setup()                    // run once, when the sketch starts {    // Begin lcd interface:  lcd.begin(16,2);"

     

    NOT an HTML problem!! most likely he is on a M$ box. (this is that windows used a CR-LF pair and Unix, etc use NewLine

    Do you see the problem?? Here I will show it to you in HTML:

    Here I will show it to you in HTML:   void setup()                    // run once, when the sketch starts {     // Begin lcd interface:   lcd.begin(16,2);

    Here I will underline it:  void setup()                    // run once, when the sketch starts {     // Begin lcd interface:   lcd.begin(16,2);

    The function systax is <function return type> <function name>(<arugments, or list of arguments) { where the '{' indecats the start of the boddy of the function. and if you notice he placed a '//' or comment (to the end of the line) and then the '{' with out a newline!

     

    enjoy

    Cris

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
<
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube