1i7 (1i7) wrote,
1i7
1i7

Category:

Робот Машинка - Робот Таракан

Теперь, когда у нас есть Робот Машинка собственного производства, пришло время учить его делать разные непривычные для обычного куска пластика вещи. А именно - наделять его возможностями взаимодействовать с внешним миром через электронные органы чувств и писать программы для его микроконтроллерной нервной системы, которые будут определять его поведение.

Начнем с азов: наделим Робота Машинку однобитным слухом и превратим ее в Робота Таракана, который боится громких хлопков и убегает, когда их слышит. Хотя наш Робот Таракан научился определять угрозу, у него пока еще нет других органов чувств, чтобы находить для себя безопасное место, поэтому он будет убегать только вперед или назад.

Робот Машинка: Таракан from 1i7 on Vimeo.





В дополнению к Роботу Машинке нужно купить простой датчик звука, который совместим с платформой Arduino

soundsens-jpg.jpg

например за 130 рублей на ardunn.ru или за 190 рублей на fixled.ru или где-нибудь ещё.

У датчика всего 3 ножки - 5 Вольт питание, GND земля и OUT - актуальное значение датчика: 0 - звук есть, 1 - звука нет.

Подключаем датчик к Роботу Машинке - у нас еще осталось достаточно свободного места на макетной плате:

Робот Машинка - Робот Таракан-03.jpg

Подключаем провода:

Робот Машинка - Робот Таракан-06.jpg

Красный: питание 5В - в ряд с питанием 5 Вольт от платы;
Синий: GND земля - в общий ряд с остальными GND;
Зеленый: OUT значение сенсора - на порт 28 на плате.

Пишем код в MPIDE, прошиваем Робота Машинку, проверяем, какой из Машинки Таракан.

Замечание: если датчик не реагирует на звук, или наоборот, все время беспрерывно на него реагирует, можно немного подкрутить регулятор чувствительности - внутри синего кубика на датчике.

Робот Машинка/прошивки/robot_roach/robot_roach.pde


// Робот Машинка в роли Таракана: убегает и прибегает на звук


// Ножки для моторов
#define MOTOR_LEFT_1 8
#define MOTOR_LEFT_2 9
#define MOTOR_LEFT_EN 11
#define MOTOR_RIGHT_1 4
#define MOTOR_RIGHT_2 3
#define MOTOR_RIGHT_EN 6

/**
 * Сенсор звука: сенсор подключен к входной ножке и 
 * подает на нее сигнал:
 * 0, если сенсор обнаружил звук,
 * 1, если сенсор звук не слышит.
 */
#define SOUND_SENSOR_PIN 28

boolean run_forward = false;

void mleft_forward() {
    // задать направление
    digitalWrite(MOTOR_LEFT_1, HIGH);
    digitalWrite(MOTOR_LEFT_2, LOW);
    
    // включить моторы
    digitalWrite(MOTOR_LEFT_EN, HIGH);
}

void mleft_backward() {
    // задать направление
    digitalWrite(MOTOR_LEFT_1, LOW);
    digitalWrite(MOTOR_LEFT_2, HIGH);
    
    // включить моторы
    digitalWrite(MOTOR_LEFT_EN, HIGH);
}

void mleft_stop() {
    // выключить моторы
    digitalWrite(MOTOR_LEFT_EN, LOW);
}

void mright_forward() {
    // задать направление
    digitalWrite(MOTOR_RIGHT_1, HIGH);
    digitalWrite(MOTOR_RIGHT_2, LOW);
    
    // включить моторы
    digitalWrite(MOTOR_RIGHT_EN, HIGH);
}

void mright_backward() {
    // задать направление
    digitalWrite(MOTOR_RIGHT_1, LOW);
    digitalWrite(MOTOR_RIGHT_2, HIGH);
    
    // включить моторы
    digitalWrite(MOTOR_RIGHT_EN, HIGH);
}

void mright_stop() {
    // выключить моторы
    digitalWrite(MOTOR_RIGHT_EN, LOW);
}

void setup() {
    pinMode(MOTOR_LEFT_1, OUTPUT);
    pinMode(MOTOR_LEFT_2, OUTPUT);
    pinMode(MOTOR_LEFT_EN, OUTPUT);
    
    pinMode(MOTOR_RIGHT_1, OUTPUT);
    pinMode(MOTOR_RIGHT_2, OUTPUT);
    pinMode(MOTOR_RIGHT_EN, OUTPUT);
    
    // пин сенсора в режим ввода
    pinMode(SOUND_SENSOR_PIN, INPUT);
    
    // остановить моторы при старте
    mleft_stop();
    mright_stop();
}

void loop() {
    // Слышим звук - 2 секунды "бежим" назад, потом встаём;
    // на следующий звук бежим вперед, потом встаём и тп.
   
    // проверяем значение сенсора
    if(digitalRead(SOUND_SENSOR_PIN) == 0) {
        // сенсор сработал - бежим 2 секунды
        if(run_forward) {
            // вперед
            mleft_forward();
            mright_forward();
        } else {
            // назад
            mleft_backward();
            mright_backward();
        }
        // в следующий раз побежим обратно
        run_forward = !run_forward;
        
        // бежим 2 секунды
        delay(2000);
        
        // остановились       
        mleft_stop();
        mright_stop();
    
        // подождем секунду стоя, чтобы сенсор не сработал
        // от звука моторов
        delay(1000);
    }
}





Какой из Машинки Таракан?

ок
0(0.0%)
так себе
0(0.0%)
у тараканов нет ушей
1(100.0%)


исходники занятия, подсветка синтаксиса.
Tags: arduino, chipkit, Робот Машинка, популярная робототехника, роботы
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments