Pull to refresh

Arduino на производстве*

Reading time3 min
Views15K
Со школьного возраста меня всегда интересовало устройство заводов и фабрик. Сейчас я очень жалею, что школьных экскурсий на действующие промышленные предприятия было так мало. Поэтому, чтобы занять время по вечерам и расширить кругозор, я решил построить собственную фабрику.

Фабрика будет игрушечная, что-то вроде макета. И на этом макете я смогу попробовать свои силы в разработке алгоритмов управления различными технологическими процессами. Кто-то строит макеты железных дорог, а я построю макет небольшой фабрики.

На Хабре уже было много замечательных постов, в которых авторы рассказывают о конструировании и программировании роботов на базе микропроцессорной платформы-конструктора Arduino. В основном это статьи про мобильных роботов на колесном или гусеничном шасси, автономных или с дистанционным управлением. Про промышленное применение почти ничего нет. В связи с этим предлагаю свои «пять копеек» в виде описания процесса конструирования и программирования небольшой автоматизированной системы, которой управляет Arduino.


* — не настоящем.

Транспортируй это


С чего-то наша фабрика должна начинаться? Умные люди говорят, что правильная логистика на производстве определяет успех всего предприятия.
«Высокопроизводительная работа любого современного предприятия невозможна без правильно организованных и работающих средств перемещения грузов – подъемно-транспортных машин. По принципу действия эти машины разделяются на две группы: машины периодического и непрерывного действия. К первым относятся краны и т.п., а ко вторым конвейеры различных типов».

Итак, первая автоматическая машина нашей фабрики — простой ленточный конвейер, который будет использоваться для транспортировки штучных грузов.

01. Образцы грузов, которые будут перемещаться по конвейеру.


Конструкция


Конвейер собран из деталей конструктора fischertechnik. Ленту приводит в движение мотор M1. Система управления построена на базе контроллера Arduino UNO. Питание всей электроники от БП на 9В.

02. Конвейер в собранном виде.


Для питания двигателя используется плата расширения DFRobot Motor Shield c силовыми ключами. Сигналы управления этими ключами поступают от выводов контроллера Arduino с функцией ШИМ. В моем случае используется только один канал из двух существующих на этой плате.

03. Схема нарисована с помощью fritzing.

Алгоритм


Для начала я реализовал простое ручное управление конвейером. На пульте управления находятся 3 кнопки – S1, S2 и S3. Кнопка S1 включает движение ленты в одну сторону, кнопка S2 в другую сторону, ну и кнопка S3 останавливает конвейер.

04. Пульт управления с кнопками.


Вот что у меня получилось (скетч для Arduino UNO, версия IDE 1.0):
	/*
	Conveyor control system
	 */
	 
	// Привязка входов
	int S1Pin = 8;
	int S2Pin = 9;
	int S3Pin = 10;

	// Привязка выходов
	int M1PWMPin = 5;
	int M1DIRPin = 4;

	// Константы скорости
	int motorSlowSpeed = 50;
	int motorNormSpeed = 130;
	int motroFastSpeed = 255;

	// Константы направления
	int motorFwd = LOW;
	int motorRev = HIGH;

	int S1,S2,S3 = 0; // Состояние входов

	int M1PWM = 0; // Скорость мотора М1
	int M1DIR = 0; // Направление вращения мотора М1

	int State = 0; 
	  
	void M1Fwd() {
	  M1PWM = motorNormSpeed;  
	  M1DIR = motorFwd;
	}

	void M1Rev() {
	  M1PWM = motorNormSpeed;  
	  M1DIR = motorRev;
	}  

	void M1Stop() {
	  M1PWM = 0;  
	}

	void readInputs() {
	  S1 = digitalRead(S1Pin);
	  S2 = digitalRead(S2Pin);
	  S3 = digitalRead(S3Pin);  
	}

	void writeOutputs() {
	  analogWrite(M1PWMPin, M1PWM);  
	  digitalWrite(M1DIRPin, M1DIR);
	}

	void setup()  { 
	  // Дискретные каналы 4 и 5 выходы
	  pinMode(M1PWMPin, OUTPUT);
	  pinMode(M1DIRPin, OUTPUT);

	  // Дискретные каналы 8,9 и 10 входы с включенным pullup
	  pinMode(S1Pin, INPUT);     // set pin to input
	  digitalWrite(S1Pin, HIGH);  // turn on pullup resistors

	  pinMode(S2Pin, INPUT);
	  digitalWrite(S2Pin, HIGH);    

	  pinMode(S3Pin, INPUT);
	  digitalWrite(S3Pin, HIGH);
	  
	  Serial.begin(57600);  
	} 

	void loop()  {

	  
	  readInputs();
	  
	  if (S1 == LOW) {
	    M1Rev();
	  } 
	  if (S2 == LOW) {
	    M1Fwd();
	  }
	  if (S3 == HIGH) {
	    M1Stop();
	  }
	  
	  writeOutputs();
	  
	  Serial.println(State, DEC);
	  
	}
	


05. Процесс сборки.


Движемся дальше


На следующем этапе мне предстоит оснастить конвейер датчиками, которые позволят включать движение ленты только при наличии грузов для перемещения.
Tags:
Hubs:
+37
Comments42

Articles