Сортировщик Распаковщик Вкусностей — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
(Arduino прошивка)
Строка 43: Строка 43:
  
 
==Arduino прошивка==
 
==Arduino прошивка==
 +
<syntaxhighlight lang="С" line start="1" enclose="div">
 +
 +
#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();
 +
  }
 +
 +
}
 +
</syntaxhighlight>
  
 
==Литература и ссылки==
 
==Литература и ссылки==

Версия 01:13, 24 мая 2018

Описание

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

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

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

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

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

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

Срок Задача Возникающие проблемы Что сделано к сроку
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 прошивка"