-Ïîèñê ïî äíåâíèêó

Ïîèñê ñîîáùåíèé â dev58

 -Ïîäïèñêà ïî e-mail

 

 -Ñòàòèñòèêà

Ñòàòèñòèêà LiveInternet.ru: ïîêàçàíî êîëè÷åñòâî õèòîâ è ïîñåòèòåëåé
Ñîçäàí: 11.05.2017
Çàïèñåé:
Êîììåíòàðèåâ:
Íàïèñàíî: 9


Arduino nano, ñåðâîìîòîð è äæîéñòèê

Ïÿòíèöà, 12 Ìàÿ 2017 ã. 20:14 + â öèòàòíèê

Çàâàëÿëàñü ó ìåíÿ arduino nano (êà÷åñòâåííûé êèòàéñêèé êëîí îò RobotDyn). À òóò íà äíÿõ òàê æå èç Êèòàÿ ïðèøëè ñåðâîìîòîð è ìàíèïóëÿòîð, à òàê æå íàøëîñü âðåìÿ, ÷òîáû íåìíîãî ðàçîáðàòüñÿ ñ ýòèì. Èòàê, öåëü ó ìåíÿ áûëà ïðîñòàÿ: ñîåäèíèòü arduino uno, ñåðâîìîòîð è äæîéñòèê, è çàñòàâèòü ñåðâîìîòîð ïîâîðà÷èâàòüñÿ ïðè ïîâîðîòå äæîéñòèêà.   ïðàêòè÷åñêèõ öåëÿõ ýòî ìîæíî èñïîëüçîâàòü, íàïðèìåð, äëÿ óïðàâëåíèÿ ïîâîðîòîì êàìåðû.

 

 

Êàê îêàçàëîñü, ýòî íå òàê óæ è ñëîæíî. Ñõåìà ïîäêëþ÷åíèÿ ñëåäóþùàÿ:

1. Arduino è ñåðâîìîòîð:

  • êîðè÷íåâûé (íà ìîåì ñåðâîìîòîðå) ïðîâîä - çåìëÿ (gnd);
  • êðàñíûé ïðîâîä - 5v;
  • îðàíæåâûé ïðîâîä - 8 ïèí.

2. Arduino è äæîéñòèê:

  • gnd - gnd;
  • 5v - 5v (ÿ ïîäêëþ÷èë ê 3.3v);
  • VRX (ñèãíàë äëÿ êîîðäèíàò ïî îñè X) - A1;
  • VRY (ñèãíàë äëÿ êîîðäèíàò ïî îñè Y) - A0;
  • SW (ðåæèì êíîïêè - íàæàòà èëè îòïóùåíà) - 2 ïèí.

Ñîåäèíÿåì âñå íàøè ÷óäà êèòàéñêîãî ïðîèçâîäñòâà, ïîäêëþ÷àåì arduino ê êîìïüþòåðó, îòêðûâàåì Arduino IDE, çàëèâàåì ñêåò÷, óêàçàííûé íèæå. Ïîñëå çàãðóçêè ñêåò÷à ìîæíî äâèãàòü ìàíèïóëÿòîðîì â ñòîðîíû, ñåðâîìîòîð áóäåò ïîâîðà÷èâàòüñÿ .

 

#include <Servo.h> //Áèáëèîòåêà äëÿ ðàáîòû ñ ñåðâîìîòîðîì

int xPin = A1; //À1 - àíàëîãîâûé ñèãíàë Õ êîîðäèíàò äæîéñòèêà

int yPin = A0; //À0 - àíàëîãîâûé ñèãíàë Ó êîîðäèíàò äæîéñòèêà

int buttonPin = 2; // Ïèí äëÿ ðåæèìà êíîïêè (íàæàòà èëè îòïóùåíà)

int xPosition = 0;  // ïåðåìåííàÿ äëÿ õðàíåíèÿ òåêóùåé ïîçèöèè äæîéñòèêà ïî îñè X

int yPosition = 0; // ïåðåìåííàÿ äëÿ õðàíåíèÿ òåêóùåé ïîçèöèè äæîéñòèêà ïî îñè Y

int buttonState = 0; //òåêóùåå ñîñòîÿíèå êíîïêè (íàæàòà)

int servoPin = 8; // ïèí äëÿ ñèãíàëîâ ñ ñåðâîìîòîðà

Servo servo; // ïåðåìåííàÿ òèïà Servo

int angle = 90; //ñòàðòîâûé óãîë ïîâîðîòà ñåðâîìîòîðà

int currentXpos = 0; //Òåêóùàÿ ïîçèöèÿ X


void setup() {

  pinMode(xPin, INPUT); // Ñèãíàë ñ xPin îïðåäåëÿåì êàê âõîäíîé ñèãíàë

  pinMode(yPin, INPUT); // Ñèãíàë ñ yPin îïðåäåëÿåì êàê âõîäíîé ñèãíàë

  pinMode(buttonPin, INPUT_PULLUP); // àêòèâèðóåì ïîäòÿãèâàþùèé ðåçèñòîð íà ïèíå êíîïêè

  servo.attach(servoPin); // ïðèñîåäèíÿåì ïèí 

  servo.write(angle); // Ïîâîðà÷èâàåì ñåðâîìîòîð íà 90 ãðàäóñîâ

}

void loop() {

  xPosition = analogRead(xPin); // ÷èòàåì çíà÷åíèå xPin

  yPosition = analogRead(yPin); // ÷èòàåì çíà÷åíèå yPin

  buttonState = digitalRead(buttonPin); // ÷èòàåì 'ñîñòîÿíèå' êíîïêè


  //åñëè çíà÷åíèå xPosition áîëüøå 360 
  if(xPosition > 360) {

    angle  = angle-10; // óìåíüøàåì óãîë ïîâîðîòà íà 10 ãðàäóñîâ

    // åñëè óãîë ìåíüøå 0
    if(angle < 0) {
      angle = 0; //óñòàíàâëèâàåì çíà÷åíèå óãëà 0 ãðàäóñîâ
    }
  }
  
  //åñëè xPosition ìåíüøå 300
  if(xPosition < 300) {

    angle =  angle+10; // óâåëè÷èâàåì óãîë ïîâîðîòà ñåðâîìîòîðà íà 10 ãðàäóñîâ

    //åñëè óãîë ïîâîðîòà áîëüøå 180 ãðàäóñîâ
    if(angle > 180) {
      angle = 180; //óñòàíàâëèâàåì çíà÷åíèå óãëà â 180 ãðàäóñîâ
    }
  }
  
  // åñëè íàæàòà êíîïêà äæîéñòèêà
  if(buttonState == 0)
  {
    angle = 90; //óñòàíàâëèâàåì óãîë â 90 ãðàäóñîâ
  }
  
  servo.write(angle); // ïîâîðà÷èâàåì ñåðâîìîòîð íà íóæíûé óãîë
  
  delay(50); // äîáàâëÿåì çàäåðæêó ìåæäó ñ÷èòûâàíèåì äàííûõ

}

 

 

Ïðè ïîäêëþ÷åíèè äæîéñòèêà ê ïèòàíèþ 3.3V çíà÷åíèå ïî óìîë÷àíèþ äëÿ X è Y ïîçèöèé áûëî 330 (ïðè ïîäêëþ÷åíèè ê 5V çíà÷åíèÿ ìîãóò áûòü äðóãèå), äëÿ ïðîâåðêè çíà÷åíèé òåêóùèõ ïîêàçàíèé è ÿ âçÿë îòêëîíåíèå îò íà÷àëüíîãî çíà÷åíèÿ â 30 åäèíèö.

Îòñëåäèòü çíà÷åíèÿ àíàëîãîâûõ ñèãíàëîâ ìîæíî ñ ïîìîùüþ ìîíèòîðà ñåðèéíîãî ïîðòà (îòêðûòü åãî ìîæíî òàê: èíñòðóìåíòû -> ìîíèòîð ïîðòà èëè CTRL + SHIFT + M). Äëÿ ýòîãî â ôóíêöèè setup() íåîáõîäèìî íàïèñàòü ñëåäóþùåå:

 

  Serial.begin(9600); // èíèöèàëèçàöèÿ îáìåíà äàííûìè ïî ñåðèéíîìó ïðîòîêîëó ñî ñêîðîñòüþ 9600 bps



 ôóíêöèè loop() íàïèñàòü ñëåäóþùåå:

 

  Serial.print("X: ");

  Serial.print(xPosition);

  Serial.print(" | Y: ");

  Serial.print(yPosition);

  Serial.print(" | Button: ");

  Serial.println(buttonState);


Èòàê, â äàííîé ñòàòüå ðàññìîòðåí ïðîöåññ ïîäêëþ÷åíèÿ ñåðâîìîòîðà è äæîéñòèêà ê Arduino Uno, ïðèâåäåí ïðèìåð ñêåò÷à.  äàëüíåéøåì ÿ ïëàíèðóþ ïîäêëþ÷èòü âòîðîé ñåðâîìîòîð, ÷òîáû ïîëüíîñòüþ èñïîëüçîâàòü âîçìîæíîñòè äæîéñòèêà è îñóùåñòâëÿòü ïîâîðîò ïî îñÿì X è Y.

 

Îðèãèíàë ñòàòüè, à òàê æå âèäåî çäåñü http://dev58.ru/articles/arduino_nano_servomotor_i_joystick

Ìåòêè:  

??????   îáðàòèòüñÿ ïî èìåíè Ñðåäà, 07 Èþíÿ 2017 ã. 19:55 (ññûëêà)
Îòâåòèòü Ñ öèòàòîé Â öèòàòíèê
??????   îáðàòèòüñÿ ïî èìåíè Ïîíåäåëüíèê, 29 Îêòÿáðÿ 2018 ã. 13:55 (ññûëêà)
à íåëüçÿ-ëè íà àðäóèíî óíî?
Îòâåòèòü Ñ öèòàòîé Â öèòàòíèê    |    Íå ïîêàçûâàòü êîììåíòàðèé
 

Äîáàâèòü êîììåíòàðèé:
Òåêñò êîììåíòàðèÿ: ñìàéëèêè

Ïðîâåðêà îðôîãðàôèè: (íàéòè îøèáêè)

Ïðèêðåïèòü êàðòèíêó:

 Ïåðåâîäèòü URL â ññûëêó
 Ïîäïèñàòüñÿ íà êîììåíòàðèè
 Ïîäïèñàòü êàðòèíêó