Raadi Koodka

Casharka 88: Xakamaynta matoorka servo iyadoo la isticmaalayo laba badhammo riixid

Casharka 88: Xakamaynta matoorka servo iyadoo la isticmaalayo laba badhammo riixid

Mashruucani wuxuu muujinayaa sida loo xakameeyo matoor servo iyadoo la isticmaalayo laba badhamad oo riixid ah oo Arduino ah. Halkii aad ku tiirsan lahayd potentiometer ama amar taxane ah, waxaad isticmaali kartaa badhamad fudud oo taabasho ah si aad gacanta ugu dhaqaaqdid servo bidix ama midig. Tani waxay aad faa'iido ugu leedahay codsiyada aad u baahan tahay xakameyn toos ah oo jireed oo ku saabsan qalabka, sida dhismaha gacan robotic ah, hagaajinta gimbal kamarad, ama abuurista nidaam pan-and-tilt oo laga maamulo fog. Badhamadu waxay kuu oggolaanayaan inaad si tartiib ah u hagaajiso xagasha servo, iyadoo awood u leedahay inaad qabato badhanka si aad ugu dhaqaaqdo dhammaan kala duwanaanshihiisa dhaqdhaqaaqa.

Waa kuwan dhowr mashruuc oo wax ku ool ah oo aad ku dhisi karto qaabkan:

  • Dhismaha guddi xakameyn gacmeed ah oo loogu talagalay gacan robotic ama qabasho.
  • Abuurista slider kamarad oo laga maamulo fog ama madax pan-tilt.
  • Horumarinta interface xakameyn jireed oo loogu talagalay diyaarad model ama rudder doon.
  • Samaynta "teach pendant" fudud si loo duubo boosaska mashiinka CNC ama daabacaha 3D.

Qalabka iyo Qaybaha

Mashruucani wuxuu u baahan yahay oo kaliya dhowr qaybood oo aasaasi ah, taasoo ka dhigaysa bilow fiican oo lagu baranayo labada qalab ee gelinta iyo soo-saarka ee Arduino.

  • Guddi Arduino (Uno, Nano, Mega, iwm.)
  • Matoor servo (tusaale, SG90 ama MG995)
  • Laba badhamad oo riixid ah oo ku-meel-gaar ah
  • Fiilooyin jumper
  • Breadboard (ikhtiyaar ah laakiin lagu taliyay)

Hagaha Fiilada

Fiidiyowga, fiiladu waa toos. Fiilada signal-ka ee matoorka servo waxay ku xiran tahay pin-ka PWM-ka ee Arduino, kaas oo ah pin 9 tusaalahan. Korontada iyo dhulka ee servo waxay ku xiran yihiin 5V iyo GND pins ee Arduino. Labada badhamad ee riixid waxay u xiran yihiin si la mid ah midba midka kale. Hal lug oo badham kasta waxay ku xiran tahay dhulka, iyo lugta kale waxay ku xiran tahay pin gelin dhijitaal ah oo Arduino ah (pin 2 ee badhanka "bidix" iyo pin 3 ee badhanka "midig"). Koodhku wuxuu isticmaalaa resistors-ka gudaha ee pull-up, sidaas darteed ma jiraan resistors dibadeed oo loo baahan yahay badhamada. (fiidiyowga 00:57)

Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons

Sharaxaadda Koodhka

Koodhku wuxuu loogu talagalay in si fudud loo habeeyo. Qaybaha muhiimka ah ee isticmaaluhu wax ka beddeli karo waxay ku yaalliin dusha sare ee sketch-ka. Waa kuwan kala-baxa doorsoomayaasha iyo qeexitaannada muhiimka ah ee aad rabto inaad hagaajiso mashruucaaga.

#include <Servo.h>

Servo myservo;  // abuur shay servo si loo xakameeyo servo
int servoPin = 9;// pin-kan waa inuu ka mid yahay kuwa PWM ~
int angle =90;    // xagasha bilowga ah ee servo
int angleStep =5;

#define LEFT 2   // pin 2 waxay ku xiran tahay badhanka bidix
#define RIGHT  3  // pin 3 waxay ku xiran tahay badhanka midig
  • servoPin: Doorsoomahaani wuxuu qeexayaa pin-ka Arduino ee fiilada signal-ka ee servo ku xiran tahay. Waa muhiim inaad isticmaasho pin taageerta Pulse Width Modulation (PWM), oo sida caadiga ah lagu calaamadiyo ~ guddi ku yaal.
  • angle: Tani waxay dejisaa xagasha bilowga ah ee servo marka Arduino bilaabmayo. Qiimaha caadiga ah waa 90 darajo, kaas oo sida caadiga ah dhexda ku haya servo.
  • angleStep: Kani waa korodhka xagasha servo uu isku beddelo mar kasta oo badhanka la riixo. Qiimaha 5 wuxuu ka dhigan yahay in riix kasta uu servo u dhaqaajin doono 5 darajo. Waxaad kordhin kartaa tan dhaqdhaqaaq degdeg ah ama yarayn kartaa xakameyn fiican.
  • LEFT iyo RIGHT: Tilmaamahan #define waxay u qoondeeyaan pins-ka dhijitaalka ah ee badhamada riixid ku xiran yihiin. Haddii aad badhamada ku xirto pins kala duwan, waa inaad beddeshaa qiimahan si ay u waafaqaan qaabkaaga.

Mantiska asaasiga ah ee shaqada loop() wuxuu hubinayaa haddii badhanka la riixo (iyadoo la akhrinayo signal LOW sababtoo ah qaabka pull-up). Haddii badhanka "midig" la riixo, waxay yaraynaysaa doorsoomaha angle qiyaasta angleStep. Haddii badhanka "bidix" la riixo, waxay kordhinaysaa angle. Koodhku wuxuu ku darayaa hubin xuduud ah si loo hubiyo in xagashu ku hadhsan tahay inta u dhaxaysa 0 iyo 180 darajo. Shaqada myservo.write(angle) ayaa markaa loo isticmaalaa inuu amro servo inuu u dhaqaaqo booska cusub.

Muuujinta Mashruuca Tooska ah

Muuujinta fiidiyowga, shaqadu si cad ayaa loo muujiyay. Riixista iyo qabashada badhanka "bidix" waxay keentaa in servo si habsami leh u dhaqaaqo bidix, iyadoo xagashu kordhinayso 5 darajo mar kasta, ilaa ay gaadho 180 darajo oo istaagto. Sidoo kale, riixista iyo qabashada badhanka "midig" waxay ka dhigaysaa servo inuu dib u dhaqaaqo midig, iyadoo yaraynaysa xagasha ilaa ay gaadho 0 darajo. Xagasha hadda jirta waxaa lagu daabacaa Serial Monitor, taasoo kuu oggolaanaysa inaad aragto booska saxda ah ee servo waqti-qaar. (fiidiyowga 05:20)

Qaybaha Fiidiyowga

  • [00:00] Hordhac ku saabsan xakamaynta servo badhamada
  • [00:57] Hagaha fiilada ee servo iyo badhamada riixid
  • [02:12] Sharaxaadda koodhka, qaybta 1: Dejinta iyo qaabaynta
  • [03:25] Sharaxaadda koodhka, qaybta 2: Mantiska loop-ka ugu weyn
  • [05:20] Muujin toos ah oo mashruuca ah
  • [06:23] Gunaanad iyo codsiyada suurtagalka ah

Sawirro

2 pin tactile push button switch
2 pin tactile push button switch
SG90 Mini Servo Motor
SG90 Mini Servo Motor
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons
891-Lesson 88: Servo control with 2 push buttons
Luqadda: C++
/*
 * S05-05 Servo control with 2 push buttons
 * Download and resource page https://robojax.com/RJT764
 Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
 * 
 * Written by Ahmad Shamshiri for Robojax.com 
 * on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada

  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
/*
 Controlling a servo with two Push buttons with Arduino
 when Left  push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
 when Right  push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops

*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90;    // initial angle  for servo
int angleStep =5;

#define LEFT 2   // pin 2 is connected to left button
#define RIGHT  3  // pin 3 is connected to right button

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
  pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
  pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
  myservo.write(angle);// send servo to the middle at 90 degrees
 Serial.println("Robojax Servo 2 Buttons ");
}

void loop() {
  // Servo button demo by Robojax.com
  while(digitalRead(RIGHT) == LOW){

    if (angle > 0 && angle <= 180) {
      angle = angle - angleStep;
       if(angle < 0){
        angle = 0;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// while
 // Servo button demo by Robojax.com

  while(digitalRead(LEFT) == LOW){

    // Servo button demo by Robojax.com
    if (angle >= 0 && angle <= 180) {
      angle = angle + angleStep;
      if(angle >180){
        angle =180;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// 

  
}

Faylasha📁

Faylal kale