제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
1. 차를 타세요!
우선 오래된 RC카가 필요합니다. 다행히 몬스터 트럭을 찾았습니다. 이것은 매우 흥미로울 수 있습니다!
2개의 모터를 제어하는 케이블을 제외한 모든 전자 장치를 제거합니다.
2. Arduino와 방패
Arduino 보드(저는 Arduino UNO를 선택했습니다)를 가지고 USB 호스트 실드를 그 위에 꽂습니다.
3. 자동차에 Arduino 연결
Arduino UNO와 USB 호스트 실드 위에 실드를 연결하고 자동차에 나사로 고정합니다. 나는 오래된 전자 회로에 구멍 중 하나를 사용했습니다.
4. 회로 만들기
나는 브레드 보드에서 내 것을 만들었지 만 perfboard에서 만들 수도 있습니다. 기본적으로 회로는 두 개의 드라이버(L293D 또는 SN754410)와 두 개의 전압 안정기로 구성됩니다. 전압 안정기는 배터리의 전압을 제한하는 데 사용됩니다. 사실 저는 15-18V의 최대 전압을 가지기 위해 10-12개의 AA 1.5V 배터리를 사용하는 것이 좋습니다. 그러면 RC 자동차로 더 많은 시간을 보낼 수 있습니다. 모터는 많은 양의 전류를 필요로 하기 때문에 차량을 정지 위치(약 2A)에서 움직이기 위해서는 78S12와 같은 강력한 전압 안정기가 필요합니다.
드라이버 작동 방식에 대한 자세한 정보를 원하시면 여기를 참조하십시오!
5. 자동차에 회로 연결
회로를 배치할 수 있는 RC 자동차의 빈 곳을 찾으십시오. 내가 가지고 있는 몬스터 트럭에는 공간이 많이 있습니다. 일단 배치되면 회로를 두 개의 모터에 연결합니다. 마지막으로 무선 수신기를 USB 호스트 실드에 연결합니다.
6. 강령
코드는 Circuits@home의 Kristian Lauszus가 GitHub에 호스팅한 USB 호스트 라이브러리 2.0의 예를 기반으로 합니다.
USB_Host_Shield_2.0/*Xbox Wireless Reciver 라이브러리의 예제 스케치 - Kristian Lauszus가 개발했으며 무선으로 최대 4개의 컨트롤러를 지원합니다. 자세한 내용은 블로그 게시물을 참조하십시오. http://blog.tkjelectronics.dk/2012/12 /xbox-360-receiver-added-to-the-usb-host-library/ orsend me an e-mail:[email protected]*/#include // 보기만 필요한 IDE 만족 ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //선택한 핀에는 PWM이 있어야 합니다.#define motorPinTwo 6 //선택한 핀에는 다음이 있어야 합니다. PWM#define motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2/* 모터의 회전 속도를 정의합니다. 0에서 255 사이여야 합니다. */int pulse =0;int forward =0;int break_on =0;void setup() { TCCR1B =TCCR1B &0b11111000 | 0x02; Serial.begin(115200); if (Usb.Init() ==-1) { Serial.print(F("\r\nOSC가 시작되지 않았습니다.")); 동안(1); //정지 motors_stop(); 센터(); } Serial.print(F("\r\nXbox 무선 수신기 라이브러리 시작됨")); 핀모드(모터핀원, 출력); 핀모드(모터핀투, 출력); 핀모드(motor2PinOne, OUTPUT); 핀모드(motor2PinTwo, OUTPUT); 핀 모드(브레이크, 출력); digitalWrite (BRAKE, LOW);} 무효 루프() { Usb.Task(); if(Xbox.XboxReceiverConnected) { for(uint8_t i=0;i<4;i++) { if(Xbox.getButtonPress(L2, i)) { Serial.print("L2:"); Serial.print(Xbox.getButtonPress(L2, i)); 펄스 =Xbox.getButtonPress(L2, i); 앞으로 =0; 시계 방향(); } if(Xbox.getButtonPress(R2, i)) { Serial.print("R2:"); Serial.println(Xbox.getButtonPress(R2, i)); 펄스 =Xbox.getButtonPress(R2, i); 앞으로 =1; 시계 반대 방향(); } if(Xbox.getAnalogHat(LeftHatX, i)> 7500 || Xbox.getAnalogHat(LeftHatX, i) <-7500 || Xbox.getAnalogHat(LeftHatY, i)> 7500 || Xbox.getAnalogHat(LeftHatY, i) 7500 || Xbox.getAnalogHat(RightHatX, i)> 7500 || Xbox.getAnalogHat(RightHatX, i) <-7500 || Xbox.getAnalogHat(RightHatY, i)> 7500 || Xbox.getAnalogHat i(RightHatY, 7500) { if(Xbox.getAnalogHat(LeftHatX, i)> 7500) { Serial.print(F("LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX, i)); Serial.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i)> 26000) turn_right(); 그렇지 않으면 센터(); } if (Xbox.getAnalogHat(LeftHatX, i) <-7500) { Serial.print(F("LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX, i)); Serial.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i) <-26000) turn_left(); 그렇지 않으면 센터(); } if(Xbox.getAnalogHat(LeftHatY, i)> 7500 || Xbox.getAnalogHat(LeftHatY, i) <-7500) { Serial.print(F("LeftHatY:")); Serial.print(Xbox.getAnalogHat(LeftHatY, i)); Serial.print("\t"); } if(Xbox.getAnalogHat(RightHatX, i)> 7500) { Serial.print(F("RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX, i)); Serial.print("\t"); } if (Xbox.getAnalogHat(RightHatX, i) <-7500) { Serial.print(F("RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX, i)); Serial.print("\t"); } if(Xbox.getAnalogHat(RightHatY, i)> 7500 || Xbox.getAnalogHat(RightHatY, i) <-7500) { Serial.print(F("RightHatY:")); Serial.print(Xbox.getAnalogHat(RightHatY, i)); } 직렬.println(); } if(Xbox.getButtonClick(UP, i)) { Serial.println(F("위쪽")); } if(Xbox.getButtonClick(DOWN, i)) { Serial.println(F("아래로")); } if(Xbox.getButtonClick(LEFT, i)) { Serial.println(F("왼쪽")); } if(Xbox.getButtonClick(오른쪽, i)) { Serial.println(F("오른쪽")); } if(Xbox.getButtonClick(START, i)) { Serial.println(F("시작")); } if(Xbox.getButtonClick(BACK, i)) { Serial.println(F("뒤로")); } if(Xbox.getButtonClick(L3, i)) Serial.println(F("L3")); if(Xbox.getButtonClick(R3, i)) Serial.println(F("R3")); if(Xbox.getButtonClick(L1, i)) Serial.println(F("L1")); if(Xbox.getButtonClick(R1, i)) Serial.println(F("R1")); if(Xbox.getButtonClick(XBOX, i)) { Xbox.setLedMode(회전, i); Serial.println(F("Xbox")); } if(Xbox.getButtonClick(A, i)) { Serial.println(F("A")); } if(Xbox.getButtonClick(B, i)) { Serial.println(F("B")); 디지털 쓰기(브레이크, 높음); 브레이크 온 =1; 펄스 =100; if (앞으로) 시계 방향(); 그렇지 않으면 시계 반대 방향(); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if(Xbox.getButtonClick(Y, i)) { Serial.println(F("Y")); motors_stop(); } } } delay(1);}void clock(){ Serial.print("회전은 시계 방향이고 속도는 "); Serial.println(펄스); analogWrite(모터핀원,펄스); // H-브리지의 1번 다리를 낮게 설정 analogWrite(motorPinTwo,0); if (brake_on) { 지연(600); 디지털 쓰기(브레이크, 낮음); 브레이크 온 =0; 펄스 =0; }}void counterClockwise(){ Serial.print("회전은 시계 반대 방향이고 속도는 "); Serial.println(펄스); analogWrite(모터핀원, 0); // H-브리지의 1번 다리를 낮게 설정 analogWrite(motorPinTwo,pulse); if (brake_on) { 지연(600); 디지털 쓰기(브레이크, 낮음); 브레이크 온 =0; 펄스 =0; }} 무효 turn_left(){ digitalWrite(motor2PinOne,HIGH); // H-브리지의 1번 다리를 로우로 설정합니다. digitalWrite(motor2PinTwo,LOW);}void turn_right(){ digitalWrite(motor2PinOne,LOW); // H-브리지의 1번 다리를 낮게 설정합니다. digitalWrite(motor2PinTwo,HIGH);}void motors_stop(){ analogWrite(motorPinOne,0); analogWrite(motorPinTwo,0); 펄스 =0;} 무효 센터(){ digitalWrite(motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW);}
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> /* Xbox Wireless Reciver 라이브러리의 예제 스케치 - Kristian Lauszus가 개발함 최대 4개의 컨트롤러를 무선으로 지원합니다. 자세한 내용은 블로그 게시물을 참조하십시오. http://blog.tkjelectronics.dk/2012/12/xbox-360 -receiver-added-to-the-usb-host-library/ 또는 이메일을 보내주십시오:[email protected] */#include// IDE를 만족시키십시오. in the ino.#ifdef dobogusinclude#include #endifUSB Usb;XBOXRECV Xbox(&Usb);#define motorPinOne 5 //선택한 핀에는 PWM이 있어야 합니다.#define motorPinTwo 6 //선택한 핀에는 PWM이 있어야 합니다#define motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2/* 모터의 회전 속도를 정의합니다. 0에서 255 사이여야 합니다. */int pulse =0;int forward =0;int break_on =0;void setup() { TCCR1B =TCCR1B &0b11111000 | 0x02; Serial.begin(115200); if (Usb.Init() ==-1) { Serial.print(F("\r\nOSC가 시작되지 않았습니다.")); 동안(1); //정지 motors_stop(); 센터(); } Serial.print(F("\r\nXbox 무선 수신기 라이브러리 시작됨")); 핀모드(모터핀원, 출력); 핀모드(모터핀투, 출력); 핀모드(motor2PinOne, OUTPUT); 핀모드(motor2PinTwo, OUTPUT); 핀 모드(브레이크, 출력); digitalWrite (BRAKE, LOW);} 무효 루프() { Usb.Task(); if(Xbox.XboxReceiverConnected) { for(uint8_t i=0;i<4;i++) { if(Xbox.getButtonPress(L2, i)) { Serial.print("L2:"); Serial.print(Xbox.getButtonPress(L2, i)); 펄스 =Xbox.getButtonPress(L2, i); 앞으로 =0; 시계 방향(); } if(Xbox.getButtonPress(R2, i)) { Serial.print("R2:"); Serial.println(Xbox.getButtonPress(R2, i)); 펄스 =Xbox.getButtonPress(R2, i); 앞으로 =1; 시계 반대 방향(); } if(Xbox.getAnalogHat(LeftHatX, i)> 7500 || Xbox.getAnalogHat(LeftHatX, i) <-7500 || Xbox.getAnalogHat(LeftHatY, i)> 7500 || Xbox.getAnalogHat(LeftHatY, i) 7500 || Xbox.getAnalogHat(RightHatX, i)> 7500 || Xbox.getAnalogHat(RightHatX, i) <-7500 || Xbox.getAnalogHat(RightHatY, i)> 7500 || Xbox.getAnalogHat i(RightHatY, 7500) { if(Xbox.getAnalogHat(LeftHatX, i)> 7500) { Serial.print(F("LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX, i)); Serial.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i)> 26000) turn_right(); 그렇지 않으면 센터(); } if (Xbox.getAnalogHat(LeftHatX, i) <-7500) { Serial.print(F("LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX, i)); Serial.print("\t"); if (Xbox.getAnalogHat(LeftHatX, i) <-26000) turn_left(); 그렇지 않으면 센터(); } if(Xbox.getAnalogHat(LeftHatY, i)> 7500 || Xbox.getAnalogHat(LeftHatY, i) <-7500) { Serial.print(F("LeftHatY:")); Serial.print(Xbox.getAnalogHat(LeftHatY, i)); Serial.print("\t"); } if(Xbox.getAnalogHat(RightHatX, i)> 7500) { Serial.print(F("RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX, i)); Serial.print("\t"); } if (Xbox.getAnalogHat(RightHatX, i) <-7500) { Serial.print(F("RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX, i)); Serial.print("\t"); } if(Xbox.getAnalogHat(RightHatY, i)> 7500 || Xbox.getAnalogHat(RightHatY, i) <-7500) { Serial.print(F("RightHatY:")); Serial.print(Xbox.getAnalogHat(RightHatY, i)); } 직렬.println(); } if(Xbox.getButtonClick(UP, i)) { Serial.println(F("위쪽")); } if(Xbox.getButtonClick(DOWN, i)) { Serial.println(F("아래로")); } if(Xbox.getButtonClick(LEFT, i)) { Serial.println(F("왼쪽")); } if(Xbox.getButtonClick(오른쪽, i)) { Serial.println(F("오른쪽")); } if(Xbox.getButtonClick(START, i)) { Serial.println(F("시작")); } if(Xbox.getButtonClick(BACK, i)) { Serial.println(F("뒤로")); } if(Xbox.getButtonClick(L3, i)) Serial.println(F("L3")); if(Xbox.getButtonClick(R3, i)) Serial.println(F("R3")); if(Xbox.getButtonClick(L1, i)) Serial.println(F("L1")); if(Xbox.getButtonClick(R1, i)) Serial.println(F("R1")); if(Xbox.getButtonClick(XBOX, i)) { Xbox.setLedMode(회전, i); Serial.println(F("Xbox")); } if(Xbox.getButtonClick(A, i)) { Serial.println(F("A")); } if(Xbox.getButtonClick(B, i)) { Serial.println(F("B")); 디지털 쓰기(브레이크, 높음); 브레이크 온 =1; 펄스 =100; if (앞으로) 시계 방향(); 그렇지 않으면 시계 반대 방향(); } if(Xbox.getButtonClick(X, i)) Serial.println(F("X")); if(Xbox.getButtonClick(Y, i)) { Serial.println(F("Y")); motors_stop(); } } } delay(1);}void clock(){ Serial.print("회전은 시계 방향이고 속도는 "); Serial.println(펄스); analogWrite(모터핀원,펄스); // H-브리지의 1번 다리를 낮게 설정 analogWrite(motorPinTwo,0); if (brake_on) { 지연(600); 디지털 쓰기(브레이크, 낮음); 브레이크 온 =0; 펄스 =0; }}void counterClockwise(){ Serial.print("회전은 시계 반대 방향이고 속도는 "); Serial.println(펄스); analogWrite(모터핀원, 0); // H-브리지의 1번 다리를 낮게 설정 analogWrite(motorPinTwo,pulse); if (brake_on) { 지연(600); 디지털 쓰기(브레이크, 낮음); 브레이크 온 =0; 펄스 =0; } } 무효 turn_left(){ digitalWrite(motor2PinOne,HIGH); // H-브리지의 1번 다리를 로우로 설정합니다. digitalWrite(motor2PinTwo,LOW);}void turn_right(){ digitalWrite(motor2PinOne,LOW); // H-브리지의 1번 다리를 낮게 설정합니다. digitalWrite(motor2PinTwo,HIGH);}void motors_stop(){ analogWrite(motorPinOne,0); analogWrite(motorPinTwo,0); 펄스 =0;} 무효 센터(){ digitalWrite(motor2PinOne, LOW); digitalWrite(motor2PinTwo, LOW);}
제조공정
구성품 및 소모품 Arduino Mega 2560 × 1 Adafruit 2핀 LCD 디스플레이 × 1 24V 전원 공급 장치 × 1 Adafruit 힘 센서 × 1 팝 범퍼 어셈블리 × 1 팝 범퍼 스위치 × 1 대상 스위치 × 1 롤오버 스위치 × 1 플리퍼 어셈블리 × 1 LED 램프 × 1 이 프로젝트 정보 Arduino 제어 핀
구성품 및 소모품 Arduino UNO × 1 이중 축 조이스틱 × 1 앱 및 온라인 서비스 Arduino IDE IDLE(파이썬 GUI) 이 프로젝트 정보 마우스나 트랙패드를 사용하여 컴퓨터의 커서를 추적하는 대신 조이스틱을 사용하여 동일한 응용 프로그램을 만들었습니다. 조이스틱은 커서를 임의의 방향(x 및 Y축)으로 이동할 수 있으며 내장된 조이스틱의 스위치로 클릭 기능도 수행합니다. 기본 사항- 조이스틱은 일반적