Сортировщик Распаковщик Вкусностей — различия между версиями
Материал из Department of Theoretical and Applied Mechanics
Bars-ik98 (обсуждение | вклад) |
Bars-ik98 (обсуждение | вклад) (→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();
}
}
Литература и ссылки
- ↑ Прошивка "Arduino прошивка"