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

Wi-Fi RC 자동차 - Qi 지원

구성품 및 소모품

IDT Qi 5W 송신기 프로토타입 키트
× 1
IDT Qi 5W 수신기 프로토타입 키트
× 1
Arduino MKR1000
× 1
• Arduino용 2WD 로봇 자동차 섀시
× 1
L293DNE
× 1
CN6009 - 승압 부스트 전력 변환기 모듈
× 1
3.7V Li-Po 배터리
× 1
1N4007 – 고전압, 고전류 정격 다이오드
× 8
LED(일반)
× 1
저항 221옴
× 1
타이 랩
× 5
브레드보드(일반)
(선택 사항)
× 1

필요한 도구 및 기계

납땜 인두(일반)
뜨거운 글루건(일반)
스크류드라이버
전압계

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이 프로젝트에서 무엇을 만들 것입니까?

주차 중에 무선으로 자동 충전되는 Wi-Fi 제어 RC 자동차를 만드는 방법을 단계별로 보여주는 프로젝트입니다.

작동 방식

프로젝트의 두뇌는 Arduino MKR1000이며 Wi-Fi를 통해 모바일 장치와 연결됩니다. Arduino 보드는 3.7V Li-Po 배터리로 전원을 공급받습니다. 모터 제어를 위해 L293DNE 모터 드라이버가 사용됩니다. 그러나 작동하려면 최소 4.5V가 필요합니다. 승압 부스트 전력 변환기 모듈(저전압을 더 높은 전압으로 변환)을 사용하여 전압을 3.7V에서 5V로 승압하고 이러한 방식으로 모터 드라이버에 5V로 전원을 공급합니다.

배터리 충전을 위해 Arduino MKR1000 보드에는 Li-Po 배터리용 자동 충전 시스템이 있습니다. 외부 전원(5V DC)이 연결되면 보드에 연결된 배터리가 충전됩니다. 따라서 IDT P9025AC-R-EVK – Qi 5W 수신기는 외부 소스(5V DC)로 Arduino 보드에 연결됩니다. 충전소 위에 주차할 때(IDT P9038-R-EVK – Qi 5W 송신기), 배터리가 충전됩니다.

제어 시스템에는 Fast와 Slow의 두 가지 속도 모드가 있습니다.

어떻게 구축하나요?

하드웨어 부품

모터 극 및 IDT 수신기 보드의 납땜 와이어(빨간색 와이어가 있는 핀 OUT 및 검은색 와이어가 있는 핀 GND). 이 단계에서는 납땜 인두와 6개의 전선이 필요합니다.

전자회로 만들기. 브레드보드를 ​​사용하여 회로를 만들 수도 있고 모든 연결을 납땜할 수도 있습니다.

주의:최소 700mAh 용량의 3.7V Li-Po 배터리를 사용하십시오! 그렇지 않으면 배터리가 과열되어 폭발할 수 있습니다!

CN6009 조정. 5V로 승압 전력 변환기 모듈. CN6009의 출력 값을 조정하려면 드라이버를 사용하십시오. 출력 전압을 반드시 확인하십시오(Voltmeter를 OUT+ 및 OUT- 핀에 연결하여).

IDT 무선 전원 Qi 5W 수신기를 연결합니다. 플라스틱 조각(예:플라스틱 카드)을 사용하여 자동차 바닥에 있는 무선 전력 수신기의 기반을 만드십시오. 그런 다음 플라스틱 조각과 수신기를 실리콘으로 자동차 바닥에 붙입니다. 마지막으로 IDT Receiver의 빨간색 선을 arduino의 VIN 핀에 연결하고 검은색 선을 GND 핀에 연결합니다.

차량을 안정적으로 만듭니다. 타이 랩으로 배터리와 브레드보드를 ​​차량에 고정합니다.

소프트웨어 부분 – Wi-Fi 연결

이 부분의 경우 코드를 복사하기만 하면 됩니다. 코드 파일에서 네트워크 SSID와 암호를 입력합니다(코드 파일의 12, 13행). 댓글 지침을 따라야 합니다. 코드는 현재 WPA/WPA2 네트워크에서 작동하도록 설정되어 있습니다. WEP 또는 개방형 네트워크에 연결하려면 코드 주석(34-37행)의 지침을 따르십시오.

사용 방법

1단계:Arduino MKR1000에 연결

차량을 제어하려면 Wi-Fi 연결이 필요합니다. 두 가지 방법으로 이를 달성할 수 있습니다. 첫 번째는 모바일 장치에서 Wi-Fi 핫스팟을 활성화하고 보드를 핫스팟에 연결하는 것입니다. 두 번째는 모바일 장치와 Arduino 보드를 동일한 Wi-Fi 라우터에 연결하는 것입니다. Arduino 보드에 업로드될 코드 파일에 라우터의 SSID 및 비밀번호 설정을 입력해야 합니다.

참고:라우터 없이도 차량을 제어할 수 있으므로 첫 번째 방법(Wi-Fi 핫스팟)을 사용하는 것이 좋습니다.

2단계:Arduino MKR1000의 IP 주소 가져오기

Arduino 보드가 모바일 장치의 핫스팟에 연결된 경우 Wi-Fi 핫스팟 설정으로 이동하면 보드의 IP 주소(예:192.168.1.1)가 표시됩니다.

아두이노 보드가 Wi-Fi 라우터에 연결되어 있다면 라우터 설정에서 확인이 필요합니다.

차량의 LED는 지정된 네트워크에 성공적으로 연결되고 서버가 활성화되었음을 나타냅니다.

3단계:Arduino MKR1000의 웹 서버에 액세스

브라우저로 이동하여 URL 상자에 Arduino의 IP 주소를 입력합니다.

4단계:충전 베이스 연결

5V DC 어댑터를 사용하여 IDT P9038-R-EVK – Qi 5W 송신기를 벽면 소켓에 연결합니다.

5단계:즐거운 시간 보내세요!

충전 시간!!

테스트 드라이브:

PCBWeb의 거버 파일

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

코드

<울>
  • Arduino_IDT_Wi-Fi_Car.ino
  • Arduino_IDT_Wi-Fi_Car.inoArduino
    12-13행의 예제와 암호를 각각 ssid와 암호로 바꾸십시오.
    #include #include const int motor1Control =2; // 오른쪽 motorconst int motor2Control =3; // 왼쪽 motorconst int motor1Input1 =4;const int motor1Input2 =5;const int motor2Input1 =8;const int motor2Input2 =9;const int wifiLed =10; // Wi-Fi 연결 성공을 나타내기 위해char ssid[] ="example"; // 네트워크 SSID(이름)를 입력합니다. char pass[] ="password"; // 네트워크 암호를 입력합니다.int keyIndex =0; // 네트워크 키 인덱스 번호 입력(선택 사항 - WEP에만 필요)int status =WL_IDLE_STATUS;String readString;WiFiServer server(80); // server의 포트를 정의합니다. speedMode ="fast";void setup() { pinMode(motor1Control, OUTPUT); 핀모드(모터2제어, 출력); 핀모드(모터1입력1, 출력); 핀모드(모터1입력2, 출력); 핀모드(모터2입력1, 출력); 핀모드(모터2입력2, 출력); 핀모드(와이파이, 출력); // Wifi 네트워크 연결 시도:while ( status !=WL_CONNECTED) { // WPA/WPA2 네트워크에 연결합니다. 개방형 또는 WEP 네트워크를 사용하는 경우 이 줄을 변경합니다. // WEP 네트워크의 경우 다음으로 교체합니다. status =WiFi.begin(ssid, keyIndex, pass); // 개방형 네트워크의 경우 다음으로 대체합니다. status =WiFi.begin(ssid); 상태 =WiFi.begin(ssid, 통과); // 연결을 위해 10초 대기:delay(10000); } // 웹서버 시작 server.begin(); // 서버가 실행 중임을 나타냅니다. digitalWrite(wifiLed, HIGH);}void loop() { // 들어오는 클라이언트를 수신합니다. WiFiClient client =server.available(); if (client) { // http 요청은 빈 줄로 끝납니다. 부울 currentLineIsBlank =true; while (client.connected()) { if (client.available()) { char c =client.read(); // 줄의 끝에 도달했고(줄 바꿈 문자를 수신함) // 줄이 비어 있으면 http 요청이 종료된 것이므로 // 응답을 보낼 수 있습니다. if (readString.length() <100 ) { //문자열을 문자열에 저장 readString +=c; } if (c =='\n') { // 표준 http 응답 헤더를 보냅니다. client.println("HTTP/1.1 200 OK"); client.println("콘텐츠 유형:텍스트/html"); 클라이언트.println(); client.println(""); client.println(""); client.println("<머리>"); client.println("<스타일>"); client.println("a.button {-webkit-모양:버튼;"); client.println("-moz-모양:버튼;"); client.println("모양:버튼;"); client.println("높이:400px;"); client.println("줄 높이:400px;"); client.println("텍스트 정렬:중앙;"); client.println("텍스트 장식:없음;"); client.println("글꼴 크기:100px;"); client.println("색상:이니셜;}"); client.println(""); client.println(""); client.println("<본문>"); // 앞으로 이동하는 버튼 client.println("FORWARDS
    "); client.println("
    "); // 좌회전 버튼 client.println("왼쪽 "); // 자동차 정지 버튼 client.println("STOP " ); // 우회전 버튼 client.println("오른쪽 "); client.println("
    "); // 뒤로 이동하는 버튼 client.println("BACKWARDS "); client.println("
    "); client.println("
    "); // 뒤로 이동 버튼 client.println("

    속도 모드

    "); client.println("빠른"); client.println("느림 "); client.println(" "); client.println(""); break; } // 어떤 버튼이 클릭되었는지 결정(있는 경우) // 빠른 모드 버튼 if (readString.indexOf("?fast")> 0){ speedMode ="fast"; // 다음 명령을 받을 수 있도록 readString을 지웁니다. readString =""; } // 느린 모드 버튼 if (readString.indexOf("?slow")> 0){ speedMode ="slow"; // 다음 명령을 받을 수 있도록 readString을 지웁니다. readString =""; } // 빠른 모드 if (speedMode =="fast"){ if (readString.indexOf("?moveForwards")> 0 ){ moveForwards(); // 다음 명령을 가져올 수 있도록 readString을 지웁니다. readString =""; } if (readString.indexOf("?moveBackwards")> 0){ moveBackwards(); // 다음 명령을 받을 수 있도록 readString을 지웁니다. 다음 명령을 받을 수 있음 readString =""; } } else if (speedMode =="slow"){ // 저속 모드 if (readString.indexOf("?moveForwards")> 0){ moveForwardsSlow(); // 다음 명령 r을 가져올 수 있도록 readString을 지우십시오. eadString =""; } if (readString.indexOf("?moveBackwards")> 0){ moveBackwardsSlow(); // 다음 명령을 가져올 수 있도록 readString을 지웁니다. readString =""; } } if (readString.indexOf("?turnLeft")> 0){ turnLeft(); // 다음 명령을 가져올 수 있도록 readString을 지웁니다. readString =""; } if (readString.indexOf("?turnRight")> 0){ turnRight(); // 다음 명령을 가져올 수 있도록 readString을 지웁니다. readString =""; } if (readString.indexOf("?stopMoving")> 0){ stopMoving(); // 다음 명령을 가져올 수 있도록 readString을 지웁니다. readString =""; } } } // 웹 브라우저에 데이터를 수신할 시간을 줍니다. delay(1); // 연결을 닫습니다. client.stop(); }}// 앞으로 이동하는 명령void moveForwards(){ digitalWrite(motor1Control, HIGH); digitalWrite(모터2제어, 높음); 디지털 쓰기(모터1입력1, 낮음); 디지털 쓰기(모터1입력2, 높음); 디지털 쓰기(모터2입력1, 낮음); digitalWrite(motor2Input2, HIGH);}// 뒤로 이동하는 명령 moveBackwards(){ digitalWrite(motor1Control, HIGH); digitalWrite(모터2컨트롤, 높음); 디지털 쓰기(모터1입력1, 높음); 디지털 쓰기(모터1입력2, 낮음); 디지털 쓰기(모터2입력1, 높음); digitalWrite(motor2Input2, LOW);}// 우회전 명령 무효 turnRight(){ // 더 느리게 회전하기 위해 더 낮은 전압이 제공됨 - 더 나은 제어 analogWrite(motor1Control, 0); analogWrite(모터2컨트롤, 200); 디지털 쓰기(모터1입력1, 높음); 디지털 쓰기(모터1입력2, 낮음); 디지털 쓰기(모터2입력1, 낮음); digitalWrite(motor2Input2, HIGH);}// 좌회전 명령 turnLeft(){ // 더 느리게 회전하기 위해 더 낮은 전압이 제공됩니다 - 더 나은 제어 analogWrite(motor1Control, 200); analogWrite(모터2컨트롤, 0); 디지털 쓰기(모터1입력1, 낮음); 디지털 쓰기(모터1입력2, 높음); 디지털 쓰기(모터2입력1, 높음); digitalWrite(motor2Input2, LOW);}// carvoid 중지 명령 stopMoving() { digitalWrite(motor1Control, LOW); digitalWrite(모터2제어, LOW); 디지털 쓰기(모터1입력1, 낮음); 디지털 쓰기(모터1입력2, 낮음); 디지털 쓰기(모터2입력1, 낮음); digitalWrite(motor2Input2, LOW);}// 저속 앞으로 이동하는 명령 moveForwardsSlow(){ analogWrite(motor1Control, 200); analogWrite(모터2컨트롤, 200); 디지털 쓰기(모터1입력1, 낮음); 디지털 쓰기(모터1입력2, 높음); 디지털 쓰기(모터2입력1, 낮음); digitalWrite(motor2Input2, HIGH);}// 저속 후진 이동을 위한 명령 무효 moveBackwardsSlow(){ analogWrite(motor1Control, 200); analogWrite(모터2컨트롤, 200); 디지털 쓰기(모터1입력1, 높음); 디지털 쓰기(모터1입력2, 낮음); 디지털 쓰기(모터2입력1, 높음); digitalWrite(motor2Input2, LOW);}

    맞춤형 부품 및 인클로저

    Arduino%20IDT%20무선%20Charging%20wifi%20car.cad

    회로도


    제조공정

    1. C# 생성자
    2. C# 중첩 클래스
    3. C# 생성자 오버로딩
    4. Wi-Fi 지원 IoT의 위협 증가
    5. 정밀 제작 자동차 엔진 부품
    6. 자동차 잭 시스템의 이해
    7. 자동차 엔진 실린더 구성
    8. 자동차 엔진의 작동 원리 이해
    9. 내 차에서 가스 누출을 해결하려면 어떻게 해야 합니까?
    10. 자동차 업그레이드가 보증에 영향을 줍니까?