Un coche wifi basado en Arduino
por demandar a openWRT
Objetivo: DIY un coche sin hilos basado en Arduino. Mediante el control del coche, puede ver las otras cosas en la ubicación remota, o puede supervisar la seguridad.
Efecto de imagen:
Principio de:
l cepillo openWRT en router inalámbrico (como WR703N) e instale mjpeg - el streamer y ser2net software.
l Mjpeg se utiliza para tratar los datos de vídeo de la cámara y luego enviarlo mediante el protocolo Http al tercero.
l el tercero como el teléfono móvil a través de routers de acceso wifi, enviar instrucciones de control de la conexión TCP
l después de recibir instrucciones a través de ser2net, router enviará instrucciones para la Unión de un puerto serie, se trata de Arduino UNO.
l después de recibir instrucciones, Arduino puede controlar la Junta de expansión (o protector), y luego la pantalla de control motor, sensores, servos y otros componentes electrónicos. Por último, el motor y el engranaje de manejo a ejecutar instrucciones.
Conexión:
Accesorios principales:
Cámara: chasis: http://www.smartarduino.com/wifi-web-camera-car-t...
Chasis de automóvil:
http://www.smartarduino.com/car-chassis_d005005002...
Arduino: http://www.smartarduino.com/arduino-compatible_d0...
Arduino shield: http://www.smartarduino.com/arduino-shields_d0010...
Código:
1. #include
2. #include
3.
4. //UART PROTOCOLO / / /
5. #define UART_FLAG 0XFF
6. //Moto////////////////////////////////
7. / / PROTO: BANDERA DEV DIRECCIÓN BANDERA VACÍO
8. #define MOTO 0 x 00
9. #define hacia adelante 0 x 01 //MOTO comando
10. #define hacia atrás 0 x 02
11. #define izquierda 0 x 03
12. #define TURNRIGHT 0 x 04
13. #define CARSTOP 0 x 00
14. //Servo///////////////////////////////
15. / / PROTO: BANDERA DEV SERVONUM POS BANDERA
16. #define SERVO 0 x 01
17. //Moto velocidad / / /
18. / / PROTO: BANDERA DEV MOTOSIDE VELOCIDAD BANDERA
19. #define MOTOSPEED 0 x 02
20. //////////////////////////////////////
21. int n = 1;
22. int flagCount = 0;
23. tempData int = 0;
24. int UARTReveived = 0;
25. int rxData [5];
26. //-------------------define motor----------------------------------------------//
27. AF_DCMotor motorL(3,MOTOR12_8KHZ); conectar a M3
28. AF_DCMotor motorR(4,MOTOR12_8KHZ); conectar a M4
29. int motor_speed = 200; velocidad del motor [modifid] 150-200---min:100; max: 255
30. int motor_delay = 400; [modifid] tiempo de retardo en el paso
31.
32. //-------------------define servo----------------------------------------------//
33. servo hand_t_servo; crear objeto servo para controlar un servo
34. servo hand_d_servo; crear objeto servo para controlar un servo
35. int hand_t_pos = 90; //
36. int hand_d_pos = 90; //
37. int hand_delay = 1; [modifid] velocidad de la mano
38.
39. //------------------main program-----------------------------------------------//
40. void loop()
41. {}
42. if(Serial.available())
43. {}
44. tempData = Serial.read();
45. delay(3);
46. if(tempData == UART_FLAG && flagCount < 2)
47. {}
48. rxData [0] = tempData;
49. flagCount ++;
50.}
51. más
52. {}
53. rxData [n] = tempData;
54. n ++;
55.}
56. if(flagCount == 2)
57. {}
58. rxData [4] == UART_FLAG;
59. UARTReveived = 1;
60. n = 1;
61. flagCount = 0;
62. tempData = 0;
63. Serial.flush();
64.}
65.}
66. if(UARTReveived == 1)
67. {}
68. Serial.print("rxData:");
69. Serial.print(rxData[0]);
70. Serial.println(rxData[1]);
71. if(rxData[1] == MOTO)
72. {}
73. switch(rxData[2])
74. {}
75. caso hacia adelante:
76. carGoFwd();
77. rotura;
78. el caso al revés:
79. carGoBwd();
80. rotura;
81. el caso izquierda:
82. carTurnL();
83. rotura;
84. caso TURNRIGHT:
85. carTurnR();
86. rotura;
87. caso CARSTOP:
88. carStop();
89. rotura;
90.}
91. UARTReveived = 0;
92.}
93. else if (rxData [1] == SERVO)
94. {}
95. servoSet(rxData[2], rxData[3]);
96. UARTReveived = 0;
97.}
98. else if (rxData [1] == MOTOSPEED)
99. {}
100. CHNSpeed(rxData[2], rxData[3]);
101. UARTReveived = 0;
102.}
103.}
104.}
105.
106. //CAR MOVIMIENTOS
107. anular carGoFwd()
108. {}
109. motorL.setSpeed(motor_speed);
110. motorR.setSpeed(motor_speed);
111. motorL.run(FORWARD);
112. motorR.run(FORWARD);
113. Serial.print("forward");
114. delay(motor_delay);
115.}
116. anular carGoBwd()
117. {}
118. motorL.setSpeed(motor_speed);
119. motorR.setSpeed(motor_speed);
120. motorL.run(BACKWARD);
121. motorR.run(BACKWARD);
122. Serial.print("Backward");
123. delay(motor_delay);
124.}
125. anular carTurnL()
126. {}
127. motorL.setSpeed(motor_speed);
128. motorR.setSpeed(motor_speed);
129. motorL.run(BACKWARD);
130. motorR.run(FORWARD);
131. delay(motor_delay);
132. Serial.print("TurnL");
133.}
134. anular carTurnR()
135. {}
136. motorL.setSpeed(motor_speed);
137. motorR.setSpeed(motor_speed);
138. motorL.run(FORWARD);
139. motorR.run(BACKWARD);
140. delay(motor_delay);
141. Serial.print("TurnR");
142.}
143. anular carStop()
144. {}
145. b_motor_stop();
146. Serial.print("carStop");
147. delay(5);
148.}
149. //CAR VELOCIDAD
150. void CHNSpeed (int wheelDIR, int wheelSpeed)
151. {}
152. if(wheelDIR == 0X01) //LEFT rueda
153. {}
154. motorL.setSpeed(wheelSpeed);
155.}
156. otra if(wheelDIR == 0X02) //RIGHT rueda
157. {}
158. motorR.setSpeed(wheelSpeed);
159.}
160.}
161. //SERVO VUELTA
162. void servoSet (int servoNum, int pos)
163. {}
164. if(pos > 180) pos = 160;
165. else if (pos < 0) pos = 0;
166. switch(servoNum)
167. {}
168. caso 0X07:
169. hand_t_servo.write(pos);
170. Serial.print("X");
171. Serial.print(pos);
172. rotura;
173. caso 0X08:
174. hand_d_servo.write(pos);
175. Serial.print("Y");
176. Serial.print(pos);
177. rotura;
178.}
179.}
180. void setup()
181. {}
182. Serial.begin(9600);
183. b_motor_stop();
184. b_servo_ini();
185. / / delay(2000); tiempo de espera
186. Serial.println("Hello! WiFi coche");
187.}
188.
189. void b_motor_stop() {}
190. motorL.run(RELEASE);
191. motorR.run(RELEASE);
192.}
193.
194. void b_servo_ini() {}
195. hand_t_servo.attach(9); se fija el servo en el pin 9 al objeto servo
196. hand_d_servo.attach(10); se fija el servo en el pin 10 al objeto servo
197. hand_t_servo.write(hand_t_pos);
198. hand_d_servo.write(hand_d_pos);
199.}