Сортировщик Распаковщик Вкусностей

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск

Описание

Актуальность

Данный проект был интересен с точки зрения реализации (опробовать оборудование в Фаб-Лабе и поработать с микроконтроллерами).

Проектная команда

Поставленные цели

Создать полуавтоматическую машину, которая будет открывать упаковки с вкусностями и делить поровну на заданное количество человек.

Работа по проекту

Срок Задача Возникающие проблемы Что сделано к сроку
23.03.18 Ознакомление с Arduino На данном этапе проблем не возникло Собран "скелет" Arduino и написана прошивка[1]
30.04.18 Работа с 3D принтером На данном этапе проблем не возникло Смоделированы две шестеренки
07.05.18 Сборка механического каркаса Выяснилось, что мощности имеющегося двигателя не хватает для того, чтобы крутить шестеренки с натянутой лентой Решено отказаться от использования двигателя постоянного тока (в связи с доровизной более мощного)
14.05.18 - 28.05.18 Сборка корпуса со всеми составляющими Заместо автоматического "открытия" упаковки было решено использовать механическое Корпус собран

Результаты по проекту

Arduino прошивка

#include <Servo.h>          // Библиотека для сервопривода
Servo servo1;               // Объявление переменных
int timestep;
int timestep1;
boolean flag = 0;
boolean flag1 = 0;
boolean battle;
byte i;
byte j;
byte v;
byte c;
void setup() {
  servo1.attach(4);         // Задание пинов на вход и выход
  pinMode(3,INPUT_PULLUP);
  pinMode(2,INPUT);
  pinMode(9,OUTPUT);
  Serial.begin(9600);
  servo1.write(0);
  // digitalWrite(9,LOW);  
}

void loop() {
  v = !digitalRead(2);
  battle = !digitalRead(3);
  if (battle==1 && flag==0 && (millis()-timestep)>300){  // Отрабатываем нажатие кнопки..
    flag = 1;
    i++;
    Serial.println(i);
    timestep = millis();
  }
  if (battle==0 && flag==1){  // ..и отжатие
    flag = 0;
  }
  if ((millis()-timestep)>2500 && i>1){ // Через 2.5 секунды после последнего нажатия кнопки запускается дальнейший скрипт
    j = i;
  }
  //if (j>0 && (millis()-timestep)>5000 && (millis()-timestep)<6000){    Прошивка для двигателя (не использовалась)
  //  digitalWrite(9,HIGH);
  //} else {
  //  digitalWrite(9,LOW);
  //}
  if (j>0 && v==HIGH && flag1==0 && c<180 && (millis()-timestep1)>1000){ // Снятие показания с датчика препятствий и 
    flag1 = 1;
    timestep1 = millis();
    c += 180/j;
    servo1.write(c);                                                     // подача сигнала на сервопривод
  }
  if (j>0 && v==LOW && flag1==1 && (millis()-timestep1)>300){
    flag1 = 0;
    timestep1 = millis();
  }

}

Литература и ссылки

  1. Прошивка "Arduino прошивка"