Делаем простого робота. Часть вторая


Сегодня мы продолжим делать простого трехколесного робота из того что есть.
В прошлой статье мы сделали аппаратную часть, а сегодня будем писать и заливать программу.
Для этого нам понадобится Platfromio IDE. Это открытый редактор, который позволяет работать с самыми популярными и не очень платами на разных микроконтроллерах.

Итак скачиваем. Устанавливаем. Тут трудностей возникнуть не должно.
Далее переходим к инициализации проекта.

Для этого выбираем нашу плату TI Launchpad msp430g2553 и жмем кнопку «Инициализировать»

Далее в папке src создаем файл main.c
И теперь начинаем писать программу.
Начнем с инициализации пинов и переменных.
Укажем выходы моторов и подключение ультразвукового сенсора

#include <msp430g2553.h>
#define LEFT_MOTOR_ENABLE BIT0
#define LEFT_MOTOR_PIN1   BIT1
#define LEFT_MOTOR_PIN2   BIT2
#define RIGHT_MOTOR_ENABLE BIT3
#define RIGHT_MOTOR_PIN1  BIT4
#define RIGHT_MOTOR_PIN2  BIT5
#define MOTOR_PORT        P2OUT
#define MOTOR_PORT_DIR    P2DIR
#define LED               BIT6
//UART
#define TXLED BIT6
#define RXLED BIT0
#define TXD BIT2
#define RXD BIT1
const char string[] = { "Hello World\r\n" };
//ultrasound sensor
#define TRIGGER_PIN BIT4
#define ECHO_PIN    BIT5
volatile unsigned int echo_flag = 0;

Проведем инициализацию моторов

void motor_init(void)
{
  MOTOR_PORT_DIR |=(LEFT_MOTOR_ENABLE +RIGHT_MOTOR_ENABLE + LEFT_MOTOR_PIN1 + LEFT_MOTOR_PIN2 + RIGHT_MOTOR_PIN1 +RIGHT_MOTOR_PIN2);
  MOTOR_PORT = 0x00;
  MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
}

Первая строчка указывает какие пины микроконтроллера работают на выход.
Вторая — записывает нулевое значение, чтобы робот никуда не уехал раньше времени.
Третья — записывает единички в Enable на L293 и таким образом «активируем» моторы.

Далее напишем пару базовый функций для движения нашего робота

 void motor_stop(void)
 {
    MOTOR_PORT = 0x00;
 }

 void move_forward(void)
 {
   MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
   MOTOR_PORT |=(LEFT_MOTOR_PIN2 + RIGHT_MOTOR_PIN1);
 }

 void move_back(void)
 {
   MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
   MOTOR_PORT |=(LEFT_MOTOR_PIN1 + RIGHT_MOTOR_PIN2);
 }
void right(void)
{
	MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
	MOTOR_PORT|=RIGHT_MOTOR_PIN1 + LEFT_MOTOR_PIN1;
}
void left(void)
{
	MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
	MOTOR_PORT|=RIGHT_MOTOR_PIN2 + LEFT_MOTOR_PIN2;
}

Влево, вправо, вперед, назад и стоп.
Так например если в правый мотор на пин 1 ,а в левый в пин 2 запишем единицы, то робот будет поворачивать налево.
Тут есть простор для экспериментов.
Далее напишем тестовую программу и зальем ее в нашего робота

int main(void) {
  WDTCTL = WDTPW + WDTHOLD;
  P1DIR |= LED;
  motor_init();
  while(1)
  {

    delay_ms(50);
   move_forward();
   right();
   delay_ms(100);
   motor_stop();
   move_back();
   delay_ms(100);
   motor_stop();
  }
  return 0;
}

Далее жмем Build и Upload

И робот поехал.
В следующей части будем добавлять драйвер ультразвукового сенсора.


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение