Миниробот для нанесения рисунка аэрографом на поверхности плитки
Год 2002.
Владелец строительного магазина обратился ко мне с просьбой:
-
Мы планируем открыть цех по производству плиток из гипса с рисунками. Нам нужен автомат для нанесения рисунка. Сможешь ли сделать?
-
Вы покажите как вручную рисуете картинки.
-
Хорошо приходи вечером. Покажем.
Собрались я, Сергей и однокласник Олег. Они залили гипс водой. Достали аэрограф, подключив сжатый воздух с краской.
Худодники они, как мягче сказать, любители. На поверхности плитки получился “совремнный авангард”. Ясное дело, что такой рисунок никогда и никому не продать.
- Вот видишь! Не можем мы красиво рисунок положить на поверхность плитки. Сможешь нам робота сделать.
Я ответил: “Шанс есть. У меня остался старый матричный принтер для большой широкой бумаги. Можно использовать механизм позиционирования и сделать макет управления шаговыми двигателями.
Подключим компьютер и постараемся управлять аэрографом”.
Мне выдали рубли для покупки микроконтроллеров AVR Atmel Corporation 8-bit. У меня был опыт написания программ на ассемблере Intel 8035.
В проекте “Миниробот для нанесения рисунка аэрографом” впервые использовал язык программирования Си, а также применил технологию для программного обеспечения на основе “Автоматного программирования”, “SWITCH-технологии”.
Проектная документация (фрагмент)
Введение
С появлением новых пребований покупателей к разнообразию дизайна облицовочной, гипсовой плитки возникла необходимость автоматизации процесса нанесения рисунков на поверхность. В процессе изготовления плитки необходимо грунтовать поверхность лаком, затем краскораспылителем нанести тонкий фоновый слой. Аэрографом наносится выбранный из каталога рисуннок.
В настоящем проекте предложено решение на основе микроконтроллеров серии AVR, которые обеспечивают управление исполнительными механизмами и цикл нанесения рисунка на поверхность плитки.
Эту задачу целесообразно решать с использованием технологии автоматов. Для ее алгоритмизации и программирования оказалось удобным применить SWITCH-технологию
Настоящая работа призвана автоматизировать этап нанесения рисунка на поверхность плитки, уменьшить брак при произвостве и увеличить производительность производства.
- Постановка задачи
Целью настоящего проекта является изготовление макета миниробота для нанесения рисунка аэрографом на поверхности облицовочной плитки.
Миниробот состоит из следующих частей:
- Исполнительный механизм для перемещения аэрографа шаговыми двигателями;
- Модули управления шаговыми двигателями по осям X, Y, Z;
- Устройство управления подачей краски для аэрографа;
- Модуль управления, который формирует задания для остальных модулей (шаговые двигатели, индикации, пульт управления оператором). Модуль управления подключается к персональному компьютеру через интерфейс RS-232C.
Миниробот состоит из связанных автоматов с явным выделением состояний. Создается схема связи и граф переходов автоматов.
Алгоритмы автоматов реализованы на языках программирования ASM, C микроконтроллера AVR. На ассемблеры реализованы функции, которые критичны к времени выполнения. Язык программирования С позволяет ускорить проектирование, отладку программных модулей автоматов.
Для макетирования и отладки программы использовался набор AVR Starter Kit STK500.
Приложение 2 'Программный код UART0_A1x.c'
/*********************************************
* Programm:
UART0_A1x.c
*
*
*
* Note: For projekt MINIROBIT BUILDING *
*
*
* Name: Module Code adapted from Atmel AVR *ЧП Васильев В.И., эл. почта: vvasiyev@gmail.com,
сайт: www.robot-ivan.narod.ru
*
Application for Amega161
*
*
Interrupt mode driver for UART0. *
*
*
* Edit data: 28.08.2002
*
* Last data: 1.10.2002
*
* Version:
0.02
*
**********************************************/
#include "iom161.h"
#include "uart0_A1x.h"
#include "uart0_A1x_decl.h"
#include "stdio.h"
#include "ctype.h"
/* Debug test UART0 for module */
// #define TEST_UART0
/*---------------------*/
/* Start Rx/Tx UART0 */
void Enb_UART0(void)
// Enable Rx/Tx
{
UCSR0B = UCSR0B | (1<<TXEN0); // TXEN0 = 1
UCSR0B = UCSR0B | (1<<RXEN0); // RXEN0 = 1
UCSR0B = UCSR0B | (1<<RXCIE0); // RXCIE0= 1
}
/*-------------------*/
/* Start Rx UART0 */
void Enb_Rx_UART0(void)
// Enable Rx
{
UCSR0B = UCSR0B | (1<<RXEN0); // RXEN0 = 1
UCSR0B = UCSR0B | (1<<RXCIE0); // RXCIE0= 1
}
/*-------------------*/
/* Start Tx UART0 */
void Enb_Tx_UART0(void)
// Enable Tx
{
UCSR0B = UCSR0B | (1<<TXEN0); // TXEN0 = 1
}
/*--------------------*/
/* Stop Rx/Tx UART0 */
void Dis_UART0(void)
// Disable Rx/Tx
{
UCSR0B = UCSR0B & ~(1<<TXEN0); // TXEN0 = 0
UCSR0B = UCSR0B & ~(1<<RXEN0); // RXEN0 = 0
UCSR0B = UCSR0B & ~(1<<RXCIE0); // RXCIE0 = 0
}ЧП Васильев В.И., эл. почта: vvasiyev@gmail.com,
сайт: www.robot-ivan.narod.ru
/*------------------*/
/* Stop Rx UART0 */
void Dis_Rx_UART0(void)
// Disable Rx
{
UCSR0B = UCSR0B & ~(1<<RXEN0); // RXEN0 = 0
UCSR0B = UCSR0B & ~(1<<RXCIE0); // RXCIE0 = 0
}
/*--------------------*/
/* Stop Tx UART0 */
void Dis_Tx_UART0(void)
// Disable Tx
{
UCSR0B = UCSR0B & ~(1<<TXEN0); // TXEN0 = 0
}
Проект “Миниробот для нанесения рисунка аэрографом” (rus.). — Russian, 2002.