Cuprins:

Servo Control wireless: 6 pași
Servo Control wireless: 6 pași

Video: Servo Control wireless: 6 pași

Video: Servo Control wireless: 6 pași
Video: How To Control A Standard Servo With Raspberry Pi 2024, Noiembrie
Anonim
Servo Control fără fir
Servo Control fără fir
Servo Control fără fir
Servo Control fără fir

Acest proiect controlează rotația unui servo fără fir prin intermediul unui potențiometru (buton). Rotația este limitată la 180 de grade.

Pasul 1: Componente

Componente
Componente
Componente
Componente
Componente
Componente

Acest proiect constă din

  • 2 plăci de control Arduino UNO cu cablu conector USB
  • 2 nRF24L01 - module de emisie-recepție RF de 2,4 GHz (pentru ajutor cu aceste module consultați
  • 2 plăci adaptoare cu soclu (jetoane pentru rucsac) pentru nRF24L01
  • 1 placă de extindere prototip 328 ProtoShield compatibilă Arduino opțională
  • 1 servo
  • 1 potențiometru analogic
  • fier de lipit și lipit
  • sârmă
  • clește cu nas
  • folie izolatoare, am folosit bandă electrică

Pasul 2: placa serverului

Placă server
Placă server

Placa de server este formată dintr-un modul transceiver, placa de protecție (care se conectează direct la placa Arduino într-un singur sens) și servo. Am decis să includ placa de scut pentru a evita panoul neîndemânatic și pentru a oferi proiectului și un finisaj general mai îngrijit.

Codul și resursa web incluse în lista de componente detaliază conexiunile modulului transceiver. Am decis să lipesc conexiunile în loc să folosesc conexiuni temporare ca în proiectele anterioare. De când sunt începător, am izolat fiecare îmbinare de lipit cu bandă electrică (nu erau frumoase).

Pinii plăcii de protecție corespund direct pinilor Arduino. Înainte de a atașa placa de protecție, am conectat pământul și pinii de 5 volt la șinele plăcii cu sârmă și lipit. De asemenea, am lipit firele de 5 volt și de împământare ale componentelor pe șinele plăcii de protecție, apoi am atașat în cele din urmă Arduino la placa de protecție.

Servo-ul este atașat la pinul de 3 volt pentru alimentare și pinul digital 2 pentru comunicare.

** Notă: numai după finalizarea acestei versiuni am observat că plăcile mele Arduino nu sunt identice. Transmițătorul meu server este alimentat de șina de 5 volt de pe placa de protecție, în timp ce transmițătorul client este alimentat de pinul de 3 volt, deși am fost condus să cred că o funcție a cipului adaptor de pe transceiver este de a furniza tensiunea adecvată. Tot ce pot spune sigur este că codul furnizat se potrivește cu configurația prezentată în imagini produce efectul descris.

Pasul 3: Server Coder: Copiați și lipiți

// COD SERVER / * NRF24L01 Arduino CE> D8 CSN> D10 SCK> D13 MO> D11 MI> D12 RO> Neutilizat GND> GND VCC> 5V * / // cablare transceiver

#include

// servotecă

#include

// biblioteca transceiver

#define Servopin 2

// declarație pin de ieșire servo

ServoTimer2 serv;

// declarația numelui servo

RH_NRF24 nrf24;

// declarația numelui transmițătorului

int timeOUT = 0;

// variabilă pentru servo

impulsuri int = 90;

// variabilă pentru a stoca impulsurile

configurare nulă ()

{serv.attach (Servopin); // chestii servo

Serial.begin (9600); // chestii de emisie-recepție

if (! nrf24.init ())

Serial.println ("init a eșuat"); // lucruri de monitorizare serial dacă (! nrf24.setChannel (12)) // setați canalul la 125 Serial.println ("setChannel a eșuat"); if (! nrf24.setRF (RH_NRF24:: DataRate2Mbps, RH_NRF24:: TransmitPower0dBm)) Serial.println ("setRF a eșuat"); // lucruri de monitorizare serial}

bucla nulă ()

{if (nrf24.available ()) {uint8_t buf [RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof (buf); if (nrf24.recv (buf, & len)) // lucruri de monitorizare serial {Serial.print ("a primit cererea:"); impulsuri = strtol ((const char *) buf, NULL, 10); // schimbarea tipului de date

int prin = hartă (impulsuri, 750, 2250, 0, 180); // schimbarea tipului de date

Serial.println (prin); serv.write (impulsuri); // face servo mutare}}

}

Pasul 4: Consiliul clientului

Consiliul clientului
Consiliul clientului

Placa client este formată dintr-un modul transceiver și potențiometru. Modulul de emisie-recepție este conectat în același mod ** ca și placa serverului, cu excepția faptului că, fără placa de protecție, este conectat direct la pinii plăcii Arduino.

Potențiometrul ia 5V, este împământat și este conectat la pinul analogic 2.

** Notă: după cum sa menționat în pasul plăcii serverului, plăcile mele Arduino nu sunt identice. În acest caz, transmițătorul este conectat la pinul etichetat 3.3V, direct adiacent pinului de 5V, dar din nou, totul pare să funcționeze bine.

Pasul 5: Cod client: Copiați și lipiți

// COD CLIENT / * NRF24L01 Arduino CE> D8 CSN> D10 SCK> D13 MO> D11 MI> D12 RO> Neutilizat GND> GND VCC> 5V * / // cablare transceiver

#include

// biblioteca transceiver

int potpin = A2; // delararea potențiometrului

int val;

char tempChar [5];

String valString = ""; // tipul de date schimbă lucruri

RH_NRF24 nrf24; // chestii de emisie-recepție

configurare nulă ()

{Serial.begin (9600); if (! nrf24.init ()) Serial.println ("init a eșuat"); // Valorile implicite după inițiere sunt 2.402 GHz (canal 2), 2Mbps, 0dBm dacă (! Nrf24.setChannel (12)) Serial.println ("setChannel a eșuat"); if (! nrf24.setRF (RH_NRF24:: DataRate2Mbps, RH_NRF24:: TransmitPower0dBm)) Serial.println ("setRF a eșuat"); } // chestii de emisie-recepție

bucla nulă () {

val = analogRead (potpin); // chestii de potențiometru

val = hartă (val, 0, 1023, 750, 2250);

valString = val; String str = (valString); str.toCharArray (tempChar, 5); // schimbarea tipului de date chestii nrf24.send (tempChar, sizeof (tempChar));

}

Pasul 6: O notă despre cod:

Codul conține câteva funcționalități limitate de depanare sub formă de feedback de la monitorul serial din interfața software Arduino. Când vizualizați monitorul serial din codul SERVER (ctrl + shift + M), ar trebui să puteți vedea starea potențiometrului sub forma unui număr între 1 și 180.

De asemenea, aici este biblioteca pentru wireless și servo:

www.airspayce.com/mikem/arduino/RadioHead/

github.com/nabontra/ServoTimer2

Recomandat: