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

모든 예의 바른 운전자에게 감사 인사

구성품 및 소모품

Arduino MKR1000
× 1
SparkFun 블루투스 모뎀 - BlueSMiRF 실버
× 1
Adafruit 4채널 I2C 안전 양방향 논리 레벨 변환기 - BSS138
× 1
Adafruit Flexible Adafruit DotStar Matrix 8x32 - 256 RGB LED 픽셀
× 1
Adafruit 4핀 JST SM 플러그 + 콘센트 케이블 세트
× 1
DC 2.1mm 배럴 커넥터
× 1
AC 전원 어댑터 5V @ 4A
× 1
남성 헤더 4 위치(0.1")
× 1
브레드보드(일반)
× 1
프로젝트 상자
모든 것을 담을 수 있을 만큼 충분히 큰 것을 선택하고 Bluetooth 높이를 추가합니다.
× 1
1/4" x 4.5" x 15" 발트해 자작나무 합판
× 1
목공 테이프, 1" x 50'
× 1

필요한 도구 및 기계

납땜 인두(일반)
뜨거운 글루건(일반)
포레스트너 비트
드릴
사포
날카로운 모서리를 제거하기 위한 120 그릿.

앱 및 온라인 서비스

Arduino IDE
Arduino용 가상 실드
Adafruit DotStar

이 프로젝트 정보

운전을 하는 한 주변의 무작위 운전자들과 더 의미 있는 소통을 하고 싶었다. 번쩍이는 불빛, 한 손의 손짓, 손의 손짓 이상의 의미를 지닌 제스처, 경적 소리 또는 브레이크를 세게 밟는 소리는 모두 결국 매우 조잡한 의사소통 메커니즘이 된 것 같았습니다.

이것에 대한 영감은 오프닝 장면에서 그가 그의 Austin Martin의 뒷창에 표시되었던 약간의 텍스트가 있었던 James Bond 영화였습니다. 나는 (흔들리는 손으로 표현하는 것이 아니라) 상대방 차량의 운전자에게 내가 생각하고 있는 것을 정확히 말할 수 있다고 생각했습니다.

다음은 벤치 데모입니다.

그리고 준 라이브 액션 데모:

다음은 개념 스케치입니다.

이 프로젝트는 MKR1000이 시험판 보드이고 공식적인 문서가 없기 때문에 추가적인 문제가 있었습니다. Hackster에는 아주 좋은 출발점이 있습니다.

https://www.hackster.io/charifmahmoudi/arduino-mkr1000-getting-started-08bb4a

따라서 프로젝트의 첫 번째 단계에서:

MKR1000 이야기하기

저는 운이 좋게도 http://arduino.cc가 후원하는 포럼에 참가했습니다. 이 포럼에는 릴리스별 보드 소유자를 위한 비공개 포럼이 있었습니다. 든든한 토요일을 보낸 후 저는 보드를 프로그래밍하고 모든 구성 요소를 작동시킬 수 있었습니다.

현재 설정에는 Arduino IDE 버전 1.6.9 시간별 빌드가 포함됩니다. 당신이 나와 같다면 프로젝트에서 "시간별" 빌드를 사용하면 최소한 "불편"하게 만듭니다.

IDE를 설치한 후 IDE의 보드 관리자를 사용하여 보드용 드라이버를 다운로드했습니다. 또한 IDE 라이브러리 관리자를 사용하여 Adafruit DotStar, Adafruit DotStarMatrix, Adafruit GFX, ArduinoJson 및 Arduino용 Windows Virtual Shields 라이브러리를 로드했습니다.

이 보드가 공식적으로 출시되면 프로세스가 훨씬 더 간단해질 것입니다. 그래서 여기서 자세히 설명하지 않겠습니다. 기사 마지막 부분에 이를 수행하는 데 도움이 되는 프로젝트에 대한 참조가 있습니다.

전자제품 제작의 규칙 1번:절대 마법이 회로에서 연기를 내도록 내버려 두지 마세요!

MKR100은 3v3 기반 보드입니다. 내가 원하는 모든 문서가 없기 때문에 문서가 5볼트를 허용하는지 알 수 없었습니다. 일부 구성 요소는 적절한 논리 1과 0을 설정하기 위해 5볼트를 사용하기를 원할 뿐만 아니라

이로 인해 Adafruit의 4채널 양방향 레벨 전환이 필요했습니다. 블루투스 카드와 특히 DotStar 매트릭스는 모두 5볼트를 정말 좋아합니다. 따라서 이러한 것들을 연결할 때 주의하십시오.

구성요소가 작동하는지 확인

모든 것이 함께 작동하는지 걱정하기 전에 모든 구성 요소가 작동하는지 확인하고 싶습니다.

나는 Adafruit 8x32 DotStar 매트릭스로 시작했습니다. 나는 내가 가진 연결이 약간 불안정하다는 것을 알았습니다. 이것이 문제가 되지 않도록 하기 위해, 저는 주변에 있던 헤더 핀을 사용하고 그냥 납땜했습니다.

헤더 핀이 단단히 부착된 상태에서. 데이터 및 클록 입력을 MKR1000의 SDA 및 SCL로 표시된 SPI 핀에 연결했습니다.

헤더 핀이 단단히 부착된 상태에서. 데이터 및 클록 입력을 MKR1000의 SDA 및 SCL로 표시된 SPI 핀에 연결했습니다.

예제 스케치 "파일> 예제> Adafruit DotStarMatric> matrixtest"를 IDE에 로드했습니다. 코드에서 DATAPIN을 11로, CLOCKPIN을 12로 조정했습니다. 솔루션을 구축 및 배포했습니다. 매트릭스에 대한 약간의 옵션이 있는 후 나는 작동하는 디스플레이로 끝났습니다.

다음은 Bluetooth 어댑터를 통해 작동하는 Virtual Shield를 가져오는 것이었습니다. 정말 직설적이었습니다. github 저장소 https://github.com/ms-iot/virtual-shields-arduino에 언급된 지침을 따랐습니다. 내가해야했던 유일한 변경은 TX 및 RX 핀이었습니다. 내 보드에 표시된 핀 14와 13입니다.

이전 버전에서는 새 스케치를 업로드하기 위해 TX/RX 핀을 분리해야 했습니다. 더 이상 그렇지 않음을 알려드리게 되어 기쁩니다.

코드 살펴보기

이제 모든 것이 작동하므로 잠시 시간을 내어 이 프로젝트와 관련된 코드를 살펴보겠습니다.

모든 기능에 액세스하려면 다음을 포함해야 합니다.

#include #include #include #include #include #include #include #include #include #include  

처음 5개는 꽤 설명적이어야 합니다.

VirtualShield.h에는 블루투스 어댑터를 통한 통신을 위한 기본 기능이 포함되어 있습니다. 액세스하려는 센서에 관계없이 이것은 필수입니다.

Text.h 파일은 더 나은 텍스트, 즉 문자열 처리를 가져옵니다.

Graphics.h, Recognition.h 및 Colors.h에는 가상 화면에 액세스하고 음성 인식을 활성화하는 데 필요한 기능이 포함되어 있습니다. 비록 이 챌린지에서 끝나지 않았지만 앞으로 음성 기능을 코딩할 것입니다.

다음으로 중요한 코드 줄 목록에서 DotStar 매트릭스를 초기화하고 Shield 개체를 초기화합니다.

Adafruit_DotStarMatrix 행렬 =Adafruit_DotStarMatrix( 32, 8, DATAPIN, CLOCKPIN, DS_MATRIX_TOP + DS_MATRIX_LEFT + DS_MATRIX_COLUMNS + DS_MATRIX_ZIGZAG, 색상) Color(0, 255, 0), matrix.Color(0, 0, 255), matrix.Color(255, 0, 255), matrix.Color(255, 0, 106), matrix.Color( 255, 255, 255) };VirtualShield 방패;그래픽 화면 =그래픽(방패);인식 음성 =인식(방패); 

첫 번째 줄은 DotStar 라이브러리에 행렬의 크기와 레이아웃을 알려줍니다. 다양한 옵션은 matrixtest 예제 또는 Adafruit_DotStarMatrix.h 파일을 참조하십시오.

색상은 DotStar 라이브러리용입니다.

마지막 3줄은 실드를 작동시키고 전화기의 센서와 작동하기 위해 개체를 초기화합니다.

다음으로 모든 Arduino 스케치와 마찬가지로 setup() 메서드를 처리해야 합니다.

<사전><코드> 무효 setup() { matrix.begin(); matrix.setTextWrap(거짓); matrix.setBrightness(40); matrix.setTextColor(색상[0]); DisplayText("초기화 중...", 4, 10); // 가상 쉴드 이벤트 설정:shield.setOnRefresh(refresh); Speech.setOnEvent(onSpeech); screen.setOnEvent(스크린 이벤트); // 쉴드 통신을 시작합니다(refresh()도 호출). 쉴드.begin(); //115200 블루투스 전송 속도를 가정합니다. DisplayText("Initializing...finished", 3, 10);}

"매트릭스" 행은 꽤 자명하며 이 행을 실행하면 이제 매트릭스에 정보 메시지를 표시할 수 있습니다.

"shield" 라인은 이제 콜백 메소드를 설정합니다. 이러한 메서드는 이벤트가 발생할 때 필요에 따라 호출됩니다.

이제 전체 스케치의 가장 복잡한 방법에 대해

void loop() { // checkSensors()는 반환 이벤트를 확인하고 처리합니다(콜백 호출). 이것은 VirtualShield의 단일 루프() 메서드입니다. 방패.checkSensors();} 

네, 알겠습니다. 우리는 센서 중 하나가 작동했는지, 그리고 처리해야 하는 이벤트가 발생했는지 지속적으로 확인합니다.

이제 실제로 일부 이벤트를 처리해 보겠습니다. 첫 번째는 새로 고침() 메서드입니다. 다양한 이벤트가 발생할 때 호출됩니다. 현재 우리가 관심을 갖는 한 가지 이벤트는 블루투스가 연결될 때입니다. 화면을 다시 그릴 수 있도록 이벤트가 필요합니다.

void refresh(ShieldEvent* shieldEvent){ // 여기에 새로 고침 코드를 입력합니다. // 블루투스가 연결될 때마다, shield.begin()이 실행될 때마다 또는 앱에서 '새로고침' 버튼을 누를 때마다 실행됩니다. screen.clear(ARGB(123,86,204)); screen.drawAt(0,0, ""); ThankId =screen.addButton(10, 50, ".감사합니다."); welcomeId =screen.addButton(10, 100, ". 환영합니다."); turnLeftId =screen.addButton(10, 150, ".왼쪽 ."); stopingId =screen.addButton(175, 50, ".중지 중입니다."); startingId =screen.addButton(175, 100, ".시작 중 ."); turnRightId =screen.addButton(175, 150, ".오른쪽 ."); backoffId =screen.addButton(10, 225, ".백오프 ."); Calling911Id =screen.addButton(10, 290, ". 911 호출 중.");} 

이 방법은 밝은 보라색 배경으로 화면을 지우고 화면에 다양한 버튼을 배치합니다. 단어 주위의 간격을 확인하십시오. 이것은 가상 실드 기능의 현재 제한 사항입니다. 제가 정말 멋지게 보이도록 중앙에 배치하고 싶었기 때문입니다.

그러면 그 버튼 중 하나를 터치하면 어떻게 될까요? 이벤트가 발생하고 다음 코드에서 처리됩니다.

void screenEvent(ShieldEvent* shieldEvent) { if(screen.isPressed(thanksId)) { DisplayText("감사합니다", 5, 100); } if(screen.isPressed(welcomeId)) { DisplayText("천만에요", 2, 100); } if(screen.isPressed(backoffId)) { DisplayText("백오프하세요", 4, 100); } if(screen.isPressed(stoppingId)) { DisplayText("...중지 중...", 0, 100); } if(screen.isPressed(startingId)) { DisplayText("...시작 중...", 1, 100); } if(screen.isPressed(turnLeftId)) { DisplayText("좌회전", 3, 100); } if(screen.isPressed(turnRightId)) { DisplayText("우회전", 3, 100); } if(screen.isPressed(calling911Id)) { DisplayText("911 호출", 0, 100); }} 

이벤트가 발생하면 코드에서 어떤 버튼이 눌렸는지 확인하고 표시할 항목과 함께 DisplayText 메서드를 호출합니다.

그리고 마지막으로 어떻게 텍스트가 매트릭스로 나오나요? DisplayText 메서드가 이를 처리합니다.

void DisplayText(문자열 메시지, int colorIndex, int currDelay){ int x =matrix.width(); int maxX =-1 * (message.length() * 5 + message.length()); matrix.setTextColor(색상[색상인덱스]); while( x> maxX) { matrix.fillScreen(0); matrix.setCursor(x, 0); matrix.print(메시지); --엑스; matrix.show(); 지연(currDelay); }} 

이 메서드는 이 문자열이 실제로 얼마나 넓은지 알아냅니다. 문자열이 완전히 스크롤되어 보이지 않는지 확인하려면 알아야 합니다. 글자의 너비는 5 + 글자 사이의 공백은 1입니다.

인클로저 구축

빌드는 상당히 직선적이었습니다. 매트릭스 풋프린트보다 더 큰 적당한 크기의 상자를 찾았습니다. 필요한 것보다 더 큰 1/4" 발트산 자작나무 조각을 가져와 크기에 맞게 자릅니다.

테이블 톱과 동일한 기술을 사용합니다. 합판에 매트릭스를 깔아 시작합니다. 위치를 지정한 다음 연결의 수평 및 수직 중심을 표시합니다(보조 전원 연결 포함). 지금 해야 할 일은 선을 연결하여 뚫을 구멍의 중심을 찾는 것입니다.

예, '드릴'이 아니라 '보어'라고 말했습니다. 마지막으로 플라스틱에 구멍을 "드릴" 때 정말 불만족스러운 결과를 얻었습니다. 이번에는 Forestner 비트를 사용했습니다. . 아래 사진이 있습니다. 가장자리는 자르기 위한 것이고 중앙에는 불필요한 나무를 퍼낼 수 있는 스크레이퍼가 있습니다. 훨씬 더 멋진 "구멍"을 만듭니다. 이제 '보링'으로 넘어가서 서스펜션 구멍을 뚫고 싶을 것입니다.

120방 사포로 전체를 가볍게 샌딩합니다. 보드의 가장자리가 방금 만든 모든 구멍을 포함하는지 확인하십시오. 보드에 다른 "물건"의 톱밥이 묻지 않도록 보드를 닦아주세요.

이제 플라스틱 상자를 작업할 차례입니다.

상자의 양쪽 끝에 두 개의 구멍을 뚫습니다. 전원 커넥터 및 매트릭스 연결용입니다. 아직 매트릭스 보조 전원 구멍을 뚫지 마십시오.

이제 상자 뒷면에 양면 테이프 몇 조각을 붙이고 상자를 합판에 붙입니다. 이것은 "재배치 가능" 테이프이기 때문에 이것이 잘 붙기를 정말로 원했습니다. 나는 그 위에 무거운 책 몇 권을 올려놓고 24시간 동안 그대로 두었다. 왜 24시간인가? 테이프 지침에는 하지 말라고 되어 있습니다. 그것이 나에게 충분한 이유가 되었습니다.

마지막 홀을 위한 시간입니다. 이제 보조 전원 연결 구멍에 대한 정확한 위치가 있어야 합니다. 지루하지 않게 '정확한' 작업을 즐기십시오.

스마트한 제품을 상자에 넣으세요

브레드보드가 상자에 딱 맞는 크기인 것 같지만 MKR1000에서 USB 커넥터를 꽂거나 뽑을 수 있기를 원했습니다. 그래서 브레드보드를 ​​더 짧게 만들어야 했습니다.

그 외상 후, 브레드 보드의 뒷면을 벗겨서 붙이십시오. 보조전원 연결구멍은 피해주세요.

구멍을 통해 연결을 스레딩하는 합판 전면에 매트릭스를 부착합니다. 뜨거운 접착제로 매트릭스를 고정하십시오.

말의 힘

밝기를 40%로 설정했지만 256픽셀을 모두 비추면 최대 전류는 약 7.5A입니다. MKR1000이 제공할 수 있는 것보다 훨씬 더 많습니다. 운 좋게도 디스플레이가 고정되어 있지 않으며 전체 매트릭스 근처에서 조명을 비추지 않습니다. 보조 전원 연결이 구출됩니다. 4A까지 공급하고 있습니다. 나는 그것이 지속되지 않고 정적이 아니기 때문에 전원 공급이 좋아야한다고 생각합니다.

또한 여분의 벽 사마귀가 있어서 차량에서 전원을 켤 때 MKR1000에 전원을 공급하기 위해 끝부분을 사용했습니다.

나는 12V 자동차 전원을 가져와 프로젝트에 5V를 전달하기 위해 프로젝트에 전력 변환기를 구축하는 것에 대해 생각하고 있었습니다. 많은 생각 끝에 $5.00에 5V 4A AC 어댑터를 구입하고 이미 가지고 있는 AC 컨버터를 사용하는 것이 모든 면에서 더 좋았습니다. 이 문제에 관해서는 일반적으로 단순한 것이 더 좋습니다.

표지판 걸기

나는 이것을 뒷유리창에 고정하기 위해 "볼 스트레치 코드"와 일부 흡입 컵을 사용할 계획이었습니다. 이 지역에서 해야 할 일이 더 많다고 가정해 보겠습니다.

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

코드

감사합니다 코드
https://github.com/pulcher/mkr1000_challenge

회로도

MKR1000은 실제 MKR1000이 아직 출시되지 않았기 때문에 마이크로일 뿐입니다.

제조공정

  1. UnifiedWater v1
  2. 모바일 투표함
  3. Arduino101 / tinyTILE BLE:매치메이킹 선글라스
  4. Whac-A-Mole(버튼 에디션)
  5. 최신 주크박스
  6. Arduino Apple Watch
  7. 수제 Arduino, Si4730 전 대역 수신기(LW, MW, SW, FM)
  8. PCB 마감재에 관한 모든 것, 설명
  9. EDM 스파크 침식:모든 것이 무엇입니까?
  10. 모든 종류의 플랜지 베어링 설명