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

Raspberry Motor Shield를 사용한 Android 제어 장난감

구성품 및 소모품

Android 기기
× 1
아두이노 101
× 1
라즈베리 파이 2 모델 B
× 1
Dk 전자 모터 실드
× 1
Wifi 동글 공식 라즈베리
× 1
트러스트 5v 파워 뱅크
× 1

앱 및 온라인 서비스

Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015

이 프로젝트 정보

프로젝트가 끝나면 Android 기기의 가속도 센서로 제어되는 지형 차량을 관리할 것입니다.

이 프로젝트에는 모터 실드, 라즈베리 파이, arduino 및 dc 모터 장치가 포함되어 있습니다.

1단계

먼저 라즈베리파이와 아두이노 사이에 I2C 버스를 만들어야 합니다. 여기에서 I2C를 선택하는 이유를 알 수 있습니다.

아래 그림과 같이 I2C와 모터 쉴드 프로세스를 모두 포함하는 필수 코드를 찾을 수 있습니다.

#include #define MyAddress 0x40#include AF_DCMotor motorhiz(3);AF_DCMotor motoryon(4);byte DataToBeSend[1];byte ReceivedData;int counter =0;void setup(){Serial.begin(9600) ); /* 'I2CReceived'에 I2C Slave 초기화 및 콜백 기능 'onReceive' 할당*/ Wire.begin(MyAddress); Wire.onReceive(I2CReceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(릴리스); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* 1초마다 DataToBeSend를 증가시키고 범위가 0에서 99 사이인지 확인합니다. */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0 :DataToBeSend[0] + 1;}/* 이 함수는 RPi2가 이 I2C 슬레이브에 데이터를 보낼 때 자동으로 호출됩니다. */void I2CReceived(int NumberOfBytes){ //counter++; //문자열 counterStr =문자열(카운터); //Serial.println("수신 데이터 :"+counterStr); /* WinIoT가 데이터 바이트를 보냈습니다. 읽어보세요 */ ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; 문자열 ReceivedDataStr =문자열(수신 데이터); Serial.println(ReceivedDataInt); if(ReceivedDataInt>=100) //X Datası { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 145 &&ReceivedDataInt <154) { Serial.println("RELEASE"); motorhiz.run(릴리스); } else if(ReceivedDataInt>=100 &&ReceivedDataInt <104) { Serial.println("RELEASE"); motorhiz.run(릴리스); } else if(ReceivedDataInt>=155) { ReceivedDataInt =ReceivedDataInt -155; int motorSpeed ​​=(ReceivedDataInt * 10)+50; if(모터 속도> 254) { 모터 속도 =254; } motorhiz.setSpeed(모터 속도); motorhiz.run(뒤로); 문자열 motorSpeedStr =문자열(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } else if(ReceivedDataInt>=105 ) { ReceivedDataInt =ReceivedDataInt -105; int motorSpeed ​​=(ReceivedDataInt * 10)+50; if(모터 속도> 254) { 모터 속도 =254; } motorhiz.setSpeed(모터 속도); motorhiz.run(앞으로); 문자열 motorSpeedStr =문자열(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } } else // Y Datası { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 45 &&ReceivedDataInt <54) { Serial.println("RELEASE"); motoryon.run(릴리즈); } else if(ReceivedDataInt>=0 &&ReceivedDataInt <4) { Serial.println("릴리즈"); motoryon.run(릴리즈); } else if(ReceivedDataInt>=55) { ReceivedDataInt =ReceivedDataInt -55; int motorSpeed ​​=(ReceivedDataInt * 12)+50; if(모터 속도> 254) { 모터 속도 =254; } motoryon.setSpeed(모터 속도); motoryon.run(뒤로); 문자열 motorSpeedStr =문자열(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } else if(ReceivedDataInt>=5 ) { ReceivedDataInt =ReceivedDataInt -5; int motorSpeed ​​=(ReceivedDataInt * 12)+50; if(모터 속도> 254) { 모터 속도 =254; } motoryon.setSpeed(모터 속도); motoryon.run(앞으로); 문자열 motorSpeedStr =문자열(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } }}/* 이 함수는 RPi2가 이 I2C 슬레이브에서 데이터를 요청할 때 자동으로 호출됩니다. */void I2CRequest(){//Serial.println("DataToBeSend"); /*WinIoT에 데이터 보내기 */ //Wire.write(DataToBeSend,1);} 
I2C의 arduino와 raspberry pi 간의 통신을 위한 핀 스키마는 위의 그림과 같습니다. arduino용 외부 전원 공급 장치를 사용할 필요가 없습니다. Arduino는 raspberry pi의 Vout 핀에서 전원을 공급받습니다. 

2단계

아래와 같이 I2C를 통해 arduino에 데이터를 보내는 raspberry pi(웹 서버로 작동)에 필요한 코드입니다.

코드는 페이지(코드 섹션)의 끝에서 코드를 찾을 수 있습니다.

3단계

Ajax 요청을 사용하여 가속도계 센서의 데이터를 웹 서버로 보내는 Visual Studio Cordova Android Application을 개발합니다.

코드는 페이지(코드 섹션)의 끝에서 코드를 찾을 수 있습니다.

간단히

1-) 안드로이드 어플리케이션은 센서 데이터(안드로이드 폰 가속도계 데이터)를 라즈베리 파이에서 실행되는 웹 서버로 보냅니다.

2-) 웹 서버는 I2C를 사용하여 데이터(라즈베리 파이가 안드로이드 폰의 가속도계 센서에서 데이터를 얻음)를 arduino로 보냅니다.

3-) Arduino는 데이터를 처리하고 모터 실드를 사용하여 모터를 실행합니다.

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

코드

<울>
  • Wiri.h I2C 통신 및 모토 쉴드 안드로이드 코드
  • 안드로이드 조종기
  • Windows IOT 웹 서버
  • Wiri.h I2C 통신 및 모토 쉴드 Android 코드Arduino
    arduino와 raspberry pi arduino 코드 간의 I2C 통신. 최소 입력 출력 소스를 갖는 두 장치에 대한 직렬 통신입니다.
    #include #define MyAddress 0x40#include AF_DCMotor motorhiz(3);AF_DCMotor motoryon(4);byte DataToBeSend[ 1];byte ReceivedData;int 카운터 =0;void setup(){ Serial.begin(9600); /* 'I2CReceived'에 I2C Slave 초기화 및 콜백 기능 'onReceive' 할당*/ Wire.begin(MyAddress); Wire.onReceive(I2CReceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(릴리스); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* 1초마다 DataToBeSend를 증가시키고 범위가 0에서 99 사이인지 확인합니다. */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0 :DataToBeSend[0] + 1;}/* 이 함수는 RPi2가 이 I2C 슬레이브에 데이터를 보낼 때 자동으로 호출됩니다. */void I2CReceived(int NumberOfBytes){ //counter++; //문자열 counterStr =문자열(카운터); //Serial.println("수신 데이터 :"+counterStr); /* WinIoT가 데이터 바이트를 보냈습니다. 읽어보세요 */ ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; 문자열 ReceivedDataStr =문자열(수신 데이터); Serial.println(ReceivedDataInt); if(ReceivedDataInt>=100) //X Datası { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 145 &&ReceivedDataInt <154) { Serial.println("RELEASE"); motorhiz.run(릴리스); } else if(ReceivedDataInt>=100 &&ReceivedDataInt <104) { Serial.println("RELEASE"); motorhiz.run(릴리스); } else if(ReceivedDataInt>=155) { ReceivedDataInt =ReceivedDataInt -155; int motorSpeed ​​=(ReceivedDataInt * 10)+50; if(모터 속도> 254) { 모터 속도 =254; } motorhiz.setSpeed(모터 속도); motorhiz.run(뒤로); 문자열 motorSpeedStr =문자열(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } else if(ReceivedDataInt>=105 ) { ReceivedDataInt =ReceivedDataInt -105; int motorSpeed ​​=(ReceivedDataInt * 10)+50; if(모터 속도> 254) { 모터 속도 =254; } motorhiz.setSpeed(모터 속도); motorhiz.run(앞으로); 문자열 motorSpeedStr =문자열(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } } else // Y Datası { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 45 &&ReceivedDataInt <54) { Serial.println("RELEASE"); motoryon.run(릴리즈); } else if(ReceivedDataInt>=0 &&ReceivedDataInt <4) { Serial.println("릴리즈"); motoryon.run(릴리즈); } else if(ReceivedDataInt>=55) { ReceivedDataInt =ReceivedDataInt -55; int motorSpeed ​​=(ReceivedDataInt * 12)+50; if(모터 속도> 254) { 모터 속도 =254; } motoryon.setSpeed(모터 속도); motoryon.run(뒤로); 문자열 motorSpeedStr =문자열(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } else if(ReceivedDataInt>=5 ) { ReceivedDataInt =ReceivedDataInt -5; int motorSpeed ​​=(ReceivedDataInt * 12)+50; if(모터 속도> 254) { 모터 속도 =254; } motoryon.setSpeed(모터 속도); motoryon.run(앞으로); 문자열 motorSpeedStr =문자열(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } } }/* 이 함수는 RPi2가 이 I2C 슬레이브에서 데이터를 요청할 때 자동으로 호출됩니다. */void I2CRequest(){ //Serial.println("DataToBeSend"); /*WinIoT에 데이터 보내기 */ //Wire.write(DataToBeSend,1);}
    안드로이드 조종기C#
    Android 조종기
    미리보기 없음(다운로드만 가능).
    Windows IOT 웹 서버C#
    Windows IOT 웹 서버
    미리보기 없음(다운로드만 가능).

    맞춤형 부품 및 인클로저

    Arduino에서 라즈베리로의 핀 다이어그램

    회로도

    자세한 내용:https://www.hackster.io/AnuragVasanwala/home-automation-0dcefc

    제조공정

    1. Raspberry Pi를 사용한 모션 센서
    2. Raspberry Pi 및 Bridge Shield를 사용하는 로봇
    3. Bluetooth를 통해 제어되는 Raspberry Pi Robot
    4. Arduino 및 Raspberry Pi로 인터넷 제어 비디오 스트리밍 로봇 구축
    5. Raspberry Pi를 사용한 제스처 제어 로봇
    6. Android 스마트폰으로 제어되는 RASPBERRY PI WIFI 로봇
    7. 라즈베리 파이를 사용하는 Wi-Fi 제어 로봇
    8. Arduino Uno를 사용한 인간 감지 로봇 시스템
    9. Arduino 스파이봇
    10. Arduino, 1Sheeld 및 Android를 사용한 범용 원격 제어