Робот-погрузчик на arduino uno
- Войдите на сайт для отправки комментариев
Пт, 06/04/2018 - 10:04
Привет всем. Нужна помощь в создании робота.
Задача робота: Робот должен ехать по прямой линии до объекта. После того как он увидел перед собой ультразвуковым дальномером объект (на расстоянии < 3см), робот должен использовать сервопривод для захвата объекта. После захвата объекта робот возвращается на базу (база вся чёрная) и потом датчиком линии который стоит на подъёмном механизме определяет цвет объекта (чёрный или белый) и в зависимости от цвета ставить объек на лево или на право относительно себя.
#include <Servo.h> Servo servo1; byte my_speed = 140; int delta = 80; int cm, duration; void setup() { pinMode(4, OUTPUT); //выход мотора A1 pinMode(5, OUTPUT); //выход мотора A2 pinMode(6, OUTPUT); //выход мотора B1 pinMode(7, OUTPUT); //выход мотора B2 servo1.attach(3); // привязываем сервопривод к аналоговому выходу 3 //pinMode(13, OUTPUT); //питание датчика 1 pinMode(8, INPUT); //сигнал датчика левый pinMode(9, INPUT); //сигнал датчика правый pinMode(10, INPUT); //сигнал датчика кубов //digitalWrite(13, HIGH); //включить датчик 2 Serial.begin (9600); // подключаем монитор порта pinMode(11, OUTPUT); // назначаем trigPin (Pin11), как выход pinMode(12, INPUT); // назначаем echoPin (Pin12), как вход } void loop() { // ========== УЛЬТРАЗВУКОМ НАЧИНАЕМ ИЗМЕРЯТЬ РАССТОЯНИЕ analogWrite(11, LOW); delayMicroseconds(2); digitalWrite(11, HIGH); delayMicroseconds(10); digitalWrite(11, LOW); duration = pulseIn(12, HIGH); cm = duration / 58; Serial.println(cm); if (cm < 2) CUBE_UP(); // КОМАНДА ОСТАНОВКИ И ПОДНЯТИЯ ЗАХВАТА else if (!digitalRead(9) && digitalRead(8)) SPIN_RIGHT(); else if (!digitalRead(8) && digitalRead(9)) SPIN_LEFT(); else if (digitalRead(8) && digitalRead(9)) FORWARD(); } void FORWARD() { digitalWrite(4, LOW); digitalWrite(6, LOW); analogWrite(5, my_speed); analogWrite(7, my_speed); } void SPIN_LEFT() { digitalWrite(4, LOW); digitalWrite(6, LOW); analogWrite(5, my_speed - delta); analogWrite(7, my_speed + delta); } void SPIN_RIGHT() { digitalWrite(4, LOW); digitalWrite(6, LOW); analogWrite(5, my_speed + delta); analogWrite(7, my_speed - delta); } void CUBE_UP() { if (cm < 2) { servo1.write(0); delay(1500); } else servo1.write(90); if (cm < 2){ digitalWrite(4, LOW); analogWrite(6, my_speed); analogWrite(5, my_speed); digitalWrite(7, LOW); } if (!digitalRead(8) && !digitalRead(9) && !digitalRead(10)) { digitalWrite(4, LOW); analogWrite(6, HIGH); digitalWrite(5, LOW); analogWrite(7, HIGH); delay(500); digitalWrite(4, LOW); digitalWrite(6, LOW); analogWrite(5, HIGH); analogWrite(7, HIGH); delay(750); servo1.write(90); digitalWrite(4, LOW); analogWrite(6, HIGH); analogWrite(5, HIGH); digitalWrite(7, LOW); delay(750); analogWrite(4, HIGH); digitalWrite(6, LOW); analogWrite(5, HIGH); digitalWrite(7, LOW); } else if (!digitalRead(8) && !digitalRead(9) && digitalRead(10)) { analogWrite(4, HIGH); digitalWrite(6, LOW); analogWrite(5, HIGH); digitalWrite(7, LOW); delay(500); digitalWrite(4, LOW); digitalWrite(7, LOW); analogWrite(5, HIGH); analogWrite(6, HIGH); delay(750); servo1.write(90); digitalWrite(4, LOW); analogWrite(6, HIGH); analogWrite(5, HIGH); digitalWrite(7, LOW); delay(750); analogWrite(6, HIGH); digitalWrite(4, LOW); analogWrite(7, HIGH); digitalWrite(5, LOW); } }
Бедный кот.
Бедный кот.
кот??
Покажу своему 11-летнему сыну, пусть поржет. Если захочет поделиться - выложу его программу, так и быть, спрошу.
То что Вы выложили ни разу не рабочее.