산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino 4WD RC 자동차

구성품 및 소모품

Arduino UNO
× 2
SparkFun 트랜시버 브레이크아웃 - nRF24L01+(RP-SMA)
× 2
Funduino 조이스틱 실드 V1.A
× 1
SparkFun 듀얼 H-Bridge 모터 드라이버 L298
× 2
4WD 스마트 로봇 자동차 섀시 키트
× 1
LED(일반)
× 3
저항 221옴
× 2
브레드보드(일반)
× 2
18650 배터리
× 2
파워뱅크
× 1
점퍼 와이어(일반)
× 1

필요한 도구 및 기계

납땜 인두(일반)

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이야기

안녕하세요 여러분! 이것은 나의 다음 프로젝트입니다 - 조이스틱 컨트롤러가 있는 Arduino 4WD RC 자동차 또는 아날로그 조이스틱으로 Arduino 4WD 스마트 자동차를 제어하는 ​​것이 얼마나 쉬운가요?

이 RC 조이스틱 제어 자동차는 NRF24l01을 송신기 및 수신기로 사용합니다. 열린 공간에서 최대 1km의 범위가 있습니다. 또한 매우 간단하고 만들기 쉽습니다.

1. 조이스틱 컨트롤러

조이스틱 구성 요소:

조이스틱 실드는 Arduino 위에 앉아 간단한 컨트롤러로 바꿉니다. 7개의 순간 푸시 버튼(4개의 큰 버튼, 2개의 작은 버튼 및 조이스틱 선택 버튼)과 2축 엄지 조이스틱은 Arduino 기능을 구형 Nintendo 컨트롤러 수준으로 제공합니다. 이 장치는 Nokia 5110 LCD 및 nRF24L01 인터페이스도 제공합니다.

기능:

<울>
  • nRF24L01 인터페이스
  • <울>
  • Nokia 5110 LCD 인터페이스
  • <울>
  • 블루투스 인터페이스
  • <울>
  • I2C 인터페이스
  • <울>
  • Arduino와 호환
  • <울>
  • 작동 전압 3.5V 또는 5V
  • 실제로는 BTE16-49 - nRF24L01+RFX2401C +PA+LNA 무선 통신 모듈(안테나 차폐 케이스 2.4GHz 20dbm 1000m 포함)이라고 표시되어 있습니다.

    판매자가 지정한 특성:

    <울>
  • 2.4GHz 글로벌 개방형 ISM 대역, 라이선스 면제 사용
  • <울>
  • 최대 작동 속도 2Mbps, 효율적인 GFSK 변조, 오디오, 비디오 전송
  • <울>
  • 다지점 통신 및 주파수 호핑 통신 요구 사항을 충족하기 위한 125개 채널
  • <울>
  • 내장 하드웨어 CRC 오류 감지 및 점대다점 통신 제어의 주소
  • <울>
  • 작동 전압 3.0-3.6V, 전송 전력 20dBm(VDD =3.3V)
  • <울>
  • 외부 2.4GHz 안테나
  • <울>
  • 2.54mm 피치 핀, 증폭기 모듈 인터페이스 없이 완벽하게 호환, 교체하기 쉬운 거리 향상
  • <울>
  • 전송 거리 최대 1000m
  • 2. 조이스틱 컨트롤러

    Joystick Shield에는 4개의 큰 버튼 + 2개의 작은 버튼 + 조이스틱 선택 버튼과 2축 엄지 조이스틱(0에서 1023까지의 X축, 0에서 1023까지의 Y축)이 있습니다. 이 실드는 Arduino 상단에 위치하여 이를 간단한 컨트롤러. 내 스케치에서 버튼 업은 부저(혼), 버튼 오른쪽 - 전면 조명(LED + 저항 200옴), 버튼 왼쪽 - 후면 조명(LED + 저항 200옴)용입니다. 다른 버튼은 사용하지 않습니다.

    조이스틱 테스트:

    유휴 상태:X=499, Y=502, 위쪽=1, 오른쪽=1, 아래쪽=1, 왼쪽=1

    3. Arduino 4WD RC 자동차

    위의 결선도 이미지와 같이 결선하십시오.

    참고:코드를 업로드하기 전에 Arduino Uno 보드(핀 0, 1)에서 점퍼 와이어를 분리해야 합니다.

    모든 단계를 제대로 마치면 Car is ready to go!

    Arduino 자동차와 조이스틱 컨트롤러에 전원을 공급한 후 조이스틱을 사용하여 조이스틱을 앞뒤로 움직여 자동차를 제어할 수 있습니다.

    계속 지켜봐 주세요!

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Car_nRF24.ino
  • Joystick_nRF24.ino
  • Car_nRF24.ino아두이노
    Arduino RC Car
    /* JoyStick 모듈 수신기 코드용 코드 - 연결:nRF24L01 모듈 참조:1 - GND 2 - VCC 3.3V !!! NOT 5V 3 - CE - Arduino 핀 6 4 - CSN - Arduino 핀 8 5 - SCK - Arduino 핀 13 6 - MOSI - Arduino 핀 11 7 - MISO - Arduino 핀 12 8 - 미사용 *///-----( 필요한 라이브러리 가져오기 )-----#include #include #include /*-----( 상수 및 핀 번호 선언 )-----* /#define CE_PIN 6#define CSN_PIN 8// 참고:상수 끝에 있는 "LL"은 "LongLong" typeconst uint64_t pipe =0xE8E8F0F0E1LL입니다. // 송신 파이프 정의#define light_Front 18 //Arduino Uno용 LED 전면 우측 핀 A4#define light_Back 19 //Arduino Uno용 LED 후면 우측 핀 A5#define horn_Buzz 7 #define ENA_m1 3 // 모터 활성화/속도 전면 우측 #define ENB_m1 5 // 모터 활성화/속도 Back Right#define ENA_m2 9 // 모터 활성화/속도 Front Left#define ENB_m2 10 // 모터 활성화/속도 Back Left#define IN_11 0 // L298N #1 in 1 모터 Front Right #define IN_12 1 // L298N #1 in 2 모터 Front Right#define IN_13 2 // L298N #1 in 3 모터 Back Right#define IN_14 4 // L298N #1 in 4 모터 Back Right#define IN_21 14 // L298N # 2 in 1 모터 Front Left#define IN_22 15 // L298N #2 in 2 모터 Front Left#define IN_23 16 // L298N #2 in 3 모터 Back Left#define IN_24 17 // L298N #2 in 4 모터 Back Left/* -----( 객체 선언 )-----*/RF24 radio(CE_PIN, CSN_PIN); // 라디오 생성/*-----( 변수 선언 )-----*/int 조이스틱[6]; // 조이스틱 판독값을 포함하는 6개 요소 배열int speedRight =0;int speedLeft =0;int xAxis, yAxis;// 조이스틱의 4개 버튼 변수 int buttonUp;int buttonRight;int buttonDown;int buttonLeft;void setup(){ pinMode(light_Front, 산출); 핀모드(light_Back, OUTPUT); pinMode(horn_Buzz, OUTPUT); 핀모드(ENA_m1, 출력); 핀모드(ENB_m1, 출력); 핀모드(ENA_m2, 출력); 핀모드(ENB_m2, 출력); 핀모드(IN_11, 출력); 핀모드(IN_12, 출력); 핀모드(IN_13, 출력); 핀모드(IN_14, 출력); 핀모드(IN_21, 출력); 핀모드(IN_22, 출력); 핀모드(IN_23, 출력); pinMode(IN_24, OUTPUT);/* Serial.begin(9600); Serial.println("Nrf24L01 수신기 시작 중"); */ radio.begin(); radio.openReadingPipe(1,파이프); radio.startListening();}void 루프(){ if ( radio.available() ) { radio.read( 조이스틱, sizeof(조이스틱) ); x축 =조이스틱[0]; y축 =조이스틱[1]; // 조이스틱 배열의 4개 버튼 변수 int buttonUp =조이스틱[2]; int buttonRight =조이스틱[3]; int buttonDown =조이스틱[4]; int buttonLeft =조이스틱[5]; //Serial.println(); // 디버깅용 // 데이터 페이로드 가져오기 - 아래 디버깅 코드 if (buttonUp ==HIGH){digitalWrite(horn_Buzz, LOW);} else {digitalWrite(horn_Buzz, HIGH);} if (buttonRight ==HIGH){digitalWrite( light_Front, LOW);} else {digitalWrite(light_Front, HIGH);} if (buttonLeft ==HIGH){digitalWrite(light_Back, LOW);} else {digitalWrite(light_Back, HIGH);}// 앞으로 사용되는 Y축 및 역방향 제어 if (yAxis <470) { // 오른쪽 모터를 역방향으로 설정 digitalWrite(IN_11, LOW); 디지털 쓰기(IN_12, 높음); 디지털 쓰기(IN_13, 높음); 디지털 쓰기(IN_14, 낮음); // 왼쪽 모터를 뒤로 설정 digitalWrite(IN_21, HIGH); 디지털 쓰기(IN_22, LOW); 디지털 쓰기(IN_23, LOW); 디지털 쓰기(IN_24, 높음); // 감소하는 Y축 판독값을 470에서 0으로 뒤로 이동하여 모터 속도를 증가시키기 위한 PWM 신호 값으로 0에서 255로 변환 speedRight =map(yAxis, 470, 0, 0, 255); speedLeft =지도(y축, 470, 0, 0, 255); }else if (yAxis> 550) { // 오른쪽 모터를 앞으로 설정 digitalWrite(IN_11, HIGH); 디지털 쓰기(IN_12, LOW); digitalWrite(IN_13, LOW); 디지털 쓰기(IN_14, 높음); // 왼쪽 모터를 앞으로 설정 digitalWrite(IN_21, LOW); 디지털 쓰기(IN_22, 높음); 디지털 쓰기(IN_23, 높음); 디지털 쓰기(IN_24, LOW); // 550에서 1023으로 증가하는 Y축 판독값을 모터 속도를 증가시키기 위한 PWM 신호 값으로 0에서 255로 변환 speedRight =map(yAxis, 550, 1023, 0, 255); speedLeft =지도(y축, 550, 1023, 0, 255); } // 조이스틱이 중간에 있으면 모터가 움직이지 않습니다. else { speedRight =0; 왼쪽 속도 =0; }// 왼쪽 및 오른쪽 제어에 사용되는 X축 if (xAxis <470) { // 감소하는 X축 판독값을 470에서 0으로 증가하는 값으로 변환합니다. int xMapped =map(xAxis, 470, 0, 0 , 255); // 왼쪽으로 이동 - 왼쪽 모터 속도 감소, 오른쪽 모터 속도 증가 speedLeft =speedLeft - xMapped; speedRight =speedRight + xMapped; // 범위를 0에서 255로 제한 if (speedLeft <0) { speedLeft =0; } if (speedRight> 255) { speedRight =255; } } if (xAxis> 550) { // 550에서 1023까지 증가하는 X축 판독값을 0에서 255 값으로 변환 int xMapped =map(xAxis, 550, 1023, 0, 255); // 오른쪽으로 이동 - 오른쪽 모터 속도 감소, 왼쪽 모터 속도 증가 speedLeft =speedLeft + xMapped; speedRight =speedRight - xMapped; // 범위를 0에서 255로 제한 if (speedLeft> 255) { speedLeft =255; } if (speedRight <0) { speedRight =0; } } // 저속에서 윙윙거리는 소리 방지(모터에 따라 조정합니다. PWM 값이 70 미만이면 모터가 움직이지 않습니다.) if (speedLeft <70) { speedLeft =0; } if (speedRight <70) { speedRight =0; } analogWrite(ENA_m1, speedRight); // 모터 A에 PWM 신호 보내기 analogWrite(ENB_m1, speedRight); analogWrite(ENA_m2, speedLeft); // 모터 B에 PWM 신호 보내기 analogWrite(ENB_m2, speedLeft); /* Serial.print("X ="); Serial.print(x축); Serial.print(" Y ="); Serial.print(y축); Serial.print(" 위로 ="); Serial.print(조이스틱[2]); Serial.print(" 오른쪽 ="); Serial.print(조이스틱[3]); Serial.print(" 아래로 ="); Serial.print(조이스틱[4]); Serial.print(" 왼쪽 ="); Serial.println(조이스틱[5]); */ } } 
    Joystick_nRF24.ino아두이노
    조이스틱 컨트롤러용 코드
    /* JoyStick 모듈 트랜시버 코드 - 연결:nRF24L01 모듈 참조:1 - GND 2 - VCC 3.3V !!! NOT 5V 3 - CE - Arduino 핀 9 4 - CSN - Arduino 핀 10 5 - SCK - Arduino 핀 13 6 - MOSI - Arduino 핀 11 7 - MISO - Arduino 핀 12 8 - 미사용 기본 버튼 핀:위쪽 - 오른쪽 핀 2 - 핀 3 아래 - 핀 4 왼쪽 - 핀 5 - 아날로그 조이스틱 모듈 GND to Arduino GND VCC to Arduino +5V X Pot to Arduino A0 Y Pot to Arduino A1/*-----(필요한 라이브러리 가져오기)----- */#include #include "nRF24L01.h#include "RF24.h#define CE_PIN 9#define CSN_PIN 10#define xAxis 14 // Arduino UNO용 A0#define yAxis 15 // Arduino용 A1 UNO// 참고:상수 끝에 있는 "LL"은 "LongLong" typeconst uint64_t pipe =0xE8E8F0F0E1LL입니다. // 전송 파이프 정의/*-----( Declare objects )-----*/RF24 radio(CE_PIN, CSN_PIN); // 라디오 생성/*-----( 변수 선언 )-----*/int 조이스틱[6]; // 조이스틱 읽기 및 4개의 버튼을 포함하는 6개의 요소 배열int buttonUp =2;int buttonRight =3;int buttonDown =4;int buttonLeft =5;void setup() { Serial.begin(9600); radio.begin(); radio.openWritingPipe(파이프); radio.stopListening(); //모든 버튼과 초기 상태에 대한 pinMode 선언 pinMode(buttonUp,INPUT_PULLUP); 핀모드(버튼오른쪽,INPUT_PULLUP); 핀모드(버튼다운,INPUT_PULLUP); 핀모드(버튼왼쪽,INPUT_PULLUP); digitalWrite(버튼업,낮음); 디지털 쓰기(버튼오른쪽,낮음); 디지털 쓰기(버튼다운, LOW); digitalWrite(buttonLeft,LOW);}void 루프() { 조이스틱[0] =analogRead(xAxis); 조이스틱[1] =analogRead(y축); 조이스틱[2] =디지털 읽기(버튼업); 조이스틱[3] =디지털읽기(버튼오른쪽); 조이스틱[4] =디지털 읽기(버튼다운); 조이스틱[5] =디지털 읽기(버튼 왼쪽); radio.write( 조이스틱, sizeof(조이스틱) ); 지연(20); Serial.print("X ="); Serial.print(analogRead(x축)); Serial.print(" Y ="); Serial.print(analogRead(y축)); Serial.print(" 위로 ="); Serial.print(digitalRead(buttonUp)); Serial.print(" 오른쪽 ="); Serial.print(digitalRead(buttonRight)); Serial.print(" 아래로 ="); Serial.print(디지털읽기(버튼다운)); Serial.print(" 왼쪽 ="); Serial.println(digitalRead(buttonLeft));}

    회로도

    rc_car_tp3A7JlpYw.fzz

    제조공정

    1. Arduino 디지털 주사위
    2. Arduino 게임 컨트롤러
    3. 조이스틱 제어 RC 자동차
    4. 아이언맨
    5. 나를 찾기
    6. Arduino 3D 인쇄 로봇 팔
    7. Arduino 가습기 제어
    8. Arduino + Processing + PHP를 사용한 자동차 카운터
    9. NeoMatrix Arduino Pong
    10. Arduino 조이스틱