Historia de la creación de otro robot. La segunda parte, «está vivo!»

Continúa la serie sobre la creación de una sencilla ruedas ATmega16A microcontrolador robot.
En segundo i> de mi post, voy a describir cómo crear y construir su robot. Vamos a empezar con la fabricación de placa de circuito impreso y acabado como los primeros pasos (correcto decir - Rueda de desplazamiento) de nuestro dispositivo. También debe darse a la primera experiencia de la programación bajo PC a Qt, a saber, la creación de una bolsa de gestión y datos de programa con el robot a través de Bluetooth.
Si lo desea, puede leer la primera publicación y aprender cómo empezó todo, bueno, todo el mundo pidiendo un gato.




La última parte terminó en que delante de nosotros llevaba un diseño de PCB terminado, y entonces es el momento de crear y transferir nuestra idea de la versión electrónica del mundo real y tangible, no es el deseo de grabar en la mente de cada radioaficionado, ingeniero, inventor?! En mis brazos sólo era de 1 mm PCB, así que no estoy pensando comencé el proceso de transferencia para el botín estándar pistas del tablero de dibujo.

Pido disculpas por la calidad de las fotos, pero no tengo un teléfono barato ...




El siguiente paso fue grabar! Probamos una nueva forma de ataque químico utilizando peróxido de hidrógeno y ácido cítrico, el método de la caja fuerte y muy barato por supuesto, pero parecía demasiado sensible a las proporciones de los componentes. Después de una hora de la manipulación mágica de contenedores con el proceso de solución comenzó con potencia decente (hay que decir que era posible cambiar la placa patrón y entonces todo sería corroer mucho más rápido).





80-90% de las pistas en el tablero para conseguir un bien, sino porque básicamente pistas eran de 0,2 mm, atrapados mordiente, que quité con soldadura y alambres finos, porque de ellos hicieron las mismas vías. En general, todo el proceso se llevó a 15:00 soldadura.





Los motores tenían que ser trasladado a la parte inferior del tablero, cuando me di cuenta de que necesitaba una separación máxima entre la placa y la superficie sobre la que quieres ir, pero aún así el robot volví a la baja altura.
Y una vez que nos acordamos de los motores, el recuerdo y la idea con el codificador, como los imanes que pedí eran de diámetro, literalmente, en el piso de un milímetro más pequeño que las ranuras de la rueda, que tenían que arreglarlo de alguna manera, y sabemos El concepto es simple - Acabo de recoger a los cuales eché de nuevo a la bahía, al mismo tiempo de la pistola de pegamento no es muy estético, pero rápido y práctico. Lo principal es no invertir la polaridad, y será hasta las jambas, y ella tan pequeña - 12 imanes en la rueda, es decir, 6 de activación, a su vez, y con un diámetro de 43mm ruedas conseguir sobre 22mm trayectoria de la rueda atravesado en una sola operación.



La junta, a su vez, con un pequeño ajuste espaciamiento poner sensores Hall que podría comprender en qué dirección de movimiento.



Para la fijación de la batería, servos y telémetro ultrasónico se ha impreso en una impresora 3D es apenas detalles.

Soporte de la batería.


Siervos soporte.


El titular de la telémetro ultrasónico.


Un poco afinando el archivo de datos y todo cayó en su lugar, al final resultó como este robot.





Y sí, es sólo una perla, perla en un alambre grueso, y es hasta ahora el único diseño sin resolver "el problema". De hecho, no abordar la cuestión de la tercera rueda en el fuego para las ruedas giran podrygat Servais, etc.
Desde el uso de robot PCB 1mm parece hlyupkim, pero ya que tenemos una pequeña masa que no afecta a su fuerza y ​​agilidad.
Bueno, en primer lugar quería montar en la línea, por así decirlo primera experiencia con controles automatizados.
Debo decir que no soy un programador de profesión y este es probablemente mi punto más débil en la afición, así que por favor no criticar tanto código, en cualquier caso, estoy seguro de que vamos a tener que volver a escribir todo el programa en el futuro.

Fue escrito un programa de prueba que implementa el algoritmo PD. Se componía de un ADC manejador de interrupciones y el trabajo bucle principal real con los datos.

El controlador de interrupción
 & lt; código de & gt; #define FIRST_ADC_INPUT 2 #define LAST_ADC_INPUT 7 unsigned int real_adc [8] = {0, 0, 0, 0, 0, 0, 0, 0}; sample_adc unsigned char; volátil adc_ready unsigned char = 0; leds unsigned char [8] = {0x21, 0x41, 0x61, 0x63, 0x23, 0x43}; adc_inputs unsigned char [8] = {0, 1, 2, 4, 6, 7, 3, 5}; interrumpir [ADC_INT] vacío adc_isr (void) ////////////// ADC_INT {unsigned char estática input_index = 0; si (== adc_ready 0) {if (sample_adc == 0) {real_adc [input_index] = (firmado int) (ADCW); si (input_index & lt; LAST_ADC_INPUT-FIRST_ADC_INPUT) {input_index ++; } Else {input_index = 0; PORTB = leds [input_index]; sample_adc = 1; } ADMUX = (ADC_VREF_TYPE & amp; 0xff) + adc_inputs [(FIRST_ADC_INPUT + input_index)]; ADCSRA | = 0x40; } Else {if (== adc_ready 0) {if (ADCW & gt; real_adc [input_index]) {real_adc [input_index] = (firmado int) (ADCW); } Else {real_adc [input_index] = (firmado int) (real_adc [input_index]); } Si (input_index & lt; (LAST_ADC_INPUT-FIRST_ADC_INPUT)) {input_index ++; PORTB = leds [input_index]; } Else {input_index = 0; adc_ready = 1; PORTB & amp; = ~ (1 & lt; & lt; 0); } ADMUX = (ADC_VREF_TYPE & amp; 0xff) + adc_inputs [(FIRST_ADC_INPUT + input_index)]; } Si (== adc_ready 0) {ADCSRA | = 0x40; }}}} & Lt; / Código & gt;  pre> 
Implementación de PID
 & lt; código de & gt; si (== adc_ready 1) {adc_l = (real_adc [1] + real_adc [2]); adc_r = (real_adc [3] + real_adc [4]); error = (adc_l-adc_r); delta_error = Error - old_error; // Sum_error + = error; PID = Kp * Error + Kd * delta_error + Ki * sum_error; old_error = error; si (PID & gt; 0) {pwr_l + = (firmado int) PID; pwr_r - = (int firmado) PID; } Else {pwr_l + = (firmado int) PID; pwr_r - = (int firmado) PID; } For (i = 0; i & lt; (LAST_ADC_INPUT-FIRST_ADC_INPUT) 1; i ++) {real_adc [i] = 0; } ADCSRA | = 0x40; adc_ready = 0; sample_adc = 0; } & Lt; / Código & gt;  pre> 

Como yo estaba contento de ver que el robot realiza las funciones que tiene encomendadas, no es tan seguro vídeos cómo escarpadas con linefolower'ami absolutamente suave y rápido, pero para mí, aunque este resultado estaba alcanzando.



Luego me calmé un poco con una parte de la programación del microcontrolador y me di cuenta de que en el futuro tendrán que poner en práctica un programa para controlar el robot desde un ordenador y comencé el estudio de Qt, así como el software más reciente para el PC, escribí sólo en la universidad (en Pascal), y era un poco -Que Informática estándar de laboratorio, mi conocimiento era casi cero.

offtopic, sobre mi grandes planes de control del robot con su smartphone y cómo me di por vencido y marqué en la idea En realidad, yo inicialmente sintió el impulso de escribir un programa para un teléfono móvil con Android, pero no querían aprender Java, o más bien no quería lejos de C, y tengo un amigo que perdió el balón en Qt y podría ser mucho pedir. Al principio traté de entender a sí mismo con Zen Qbluetooth e intenta acoplarse con la HC-05 con la ayuda de mi g3 Jiayu chino, pero cada vez que me encontré con un problema que no permitía los HC-05 y Jiayu amigos. En primer pecado en Qbluetooth y el hecho de que él no percibe HC-05, pero en Internet se encontró información que la gente comienza comunicación por línea a través del módulo Bluetooth HC utilizando QBluetooth o escribir su biblioteca después de quejarse a un amigo sobre su dura vida, uno un día escribió un programa y se las arregló para comunicarse con el robot, pero lamentablemente a través de la tableta. Como resultado, lo que justifica todos aquellos que mi chino no se admite rfcomm, me rendí y decidí escribir todo el PC.


El programa tuvo que cambiar de modo de robot (el seguir adelante, el control del teclado, sin conexión) y emisión (set) de datos de todos los sensores de interés (servos, sensores, línea, telémetro ultrasónico, motores, encoders).
Después de un par de semanas, escribió la primera versión del panel de control controla el robot. Muy contentos de trabajar con GUI en Qt -. Conveniente



Programa code'd lugar no incrusta, así que no fue prohibido por la burla de Cu. En resumen, diría que el programa simplemente para indicar la disponibilidad de datos en QSerialPort los lleva y empujar en las etiquetas y widgets, en respuesta a un contador de tiempo, si es necesario, envía un dato predeterminadas tales como posición y velocidad servomotores. Campo verde en el programa es en los sueños - el futuro mapa de la ubicación frente al robot
.
El programa acepta todos los datos disponibles y temporalmente actúa como un depurador. Aún no se ha implementado el control del teclado, y fuera de línea es muy crudo y sólo ver el robot hasta que el obstáculo se ha fijado en un ángulo predeterminado y tratando de ir en una nueva dirección. En general, como ya he dicho, todo el proyecto hasta que la humedad en la parte de software.

En el futuro sería deseable implementar planes ambiciosos que son un poco de comprensión tapón que es necesario modificar el programa, tanto en el MC y el PC por completo, ya que hice un gran error y empecé a escribir ambos programas como pastel de capas hinchada en un módulo de prueba se encuentra junto a otro, en lugar de como una estricta sistema estructurado. Pero lo más importante es no darse por vencido y trabajar hasta que lo que tiene en mente en la cabeza no se hará realidad en el mundo material, porque este es el significado de un hobby.

PS En el futuro, voy a tratar de escribir otra parte de la publicación, por así decirlo medida que avanzamos en la parte de software.

Fuente: habrahabr.ru/post/256209/