pondelok, 27 marec 2017 10:38 Written by 4509 times
Rate this item
(0 votes)

ARDUINO - SERVO a PWM

Ovládanie servomotora priamo z Arduino je pomerne jednoduché. Na ovládanie serva využívame PWM (pulse width modulation). Polohu serva nám bude určovať strieda. Striedu definujeme ako pomer doby trvania aktívneho stavu voči perióde (dobe opakovania sa) javu. Môžeme použiť ľubovolné servo. Avšak, niektoré môžu vyžadovať oveľa viac prúdu než Arduino môže poskytnúť. Preto v našom príklade použijeme servo HS55.

 

Servo HS-55 :

114 1 HS 55 Economy Feather Servo 1

Polohy serva :

servo perioda

Zapojenie konektora :

hitecconnector

 

Zapojenie ARDUINO Nano a servo :

zapojenie servo

Kód arduino v cpp:

 

#include <Servo.h>

Servo servo1;
char inChar = 0;
String inputString = "";
boolean stringComplete = false;
int servoDegrees = 0;

void setup()
{
  Serial.begin(9600);
  servo1.attach(14); //analog pin 0
}

void loop()
{
  if (stringComplete)
  {
    servoDegrees = inputString.toInt();
    if (servoDegrees >= 0 && servoDegrees <= 180)
    {
      servo1.write(servoDegrees);
      Serial.println(servoDegrees);
    }
    else
    {
      Serial.println("Bad value");
    }

    inputString = "";
    stringComplete = false;
  }
}
void serialEvent()
{
  while (Serial.available() > 0)
  {
    char inChar = (char)Serial.read();

    inputString += inChar;

    if (inChar == '\n')
    {
      stringComplete = true;
    }
  }
}

GUI aplikacia :

 gui

Kód v c# :

 

using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace ServoGuiExample
{
    public partial class Form1 : Form
    {
        private string selectedPortName = string.Empty;
        private SerialPort mySerialPort = null;
        public Form1()
        {
            InitializeComponent();
            //Get all serial ports
            this.comboBox1.Items.AddRange(SerialPort.GetPortNames());
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.selectedPortName = this.comboBox1.Text;
            if (!string.IsNullOrEmpty(this.selectedPortName))
            {
                this.mySerialPort = new SerialPort(this.selectedPortName, 9600);
                this.mySerialPort.Open();
            }
        }

        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            if (this.mySerialPort != null && this.mySerialPort.IsOpen)
                this.mySerialPort.WriteLine(trackBar1.Value.ToString());
        }
    }
}

 

 

Last modified on pondelok, 27 marec 2017 18:00
Ing.Jaroslav Vadel

Som zakladateľom www.projectik.eu.

Hrám sa na programátora, ktorý ovláda:

c#,cpp,java,unity3d,php,html,NI testand,NI Vision Builder,Cognex In-Sight,NI LabView

"Naprogramovať program, ktorý funguje vie každy. Ale to, že program funguje ešte neznamena, že je napísany správne "

Website: www.projectik.eu
More in this category: « ARDUINO - Použitie FREE RTOS