Программное обеспечение к инженерному проекту "РОБОТ-ТЕХНИК ПО ОПРЕДЕЛЕНИЮ ТЕМПЕРАТУРЫ ОБЪЕКТА И РАССТОЯНИЯ ДО НЕГО"
материал по информатике и икт (8 класс) на тему

Низохина Марина Петровна

Программное обеспечение к прототипу робота-техника разработано в среде Arduino/

Скачать:


Предварительный просмотр:

 Программное обеспечение робота-техника

Программирование робота было осуществлено в среде Arduino.

// определяем контакты управления левым мотором

#define PinMotorL  10

#define PinMotorL1 9

#define PinMotorL2 8

// определяем контакты управления правым мотором

#define PinMotorR1 7

#define PinMotorR2 6

#define PinMotorR  5

// определяем контакты с подключенными датчиками отслеживания линии

#define PinSensorA0 17

#define PinSensorA 16

#define PinSensorB 15

#define PinSensorC 14

#define PinSensorC0 4

#define PinEcho 3  // Контакты для ультразвукового датчика расстояния

#define PinTrig 2

#include > // Библиотека для дисплея

#include

LiquidCrystal_I2C lcd(0x3F,16,2);

#include "MLX90615.h" // библиотека для инфракрасного датчика температуры

#include

#define SDA_PIN 11

#define SCL_PIN 12

SoftI2cMaster i2c(SDA_PIN, SCL_PIN);

MLX90615 mlx90615(0x5B, &i2c);

byte Sensor  = B000; // переменные состояния датчиков (определение линии)

byte Sensor0 = B00; // крайние датчики для определения перекрестков

boolean LS1 = LOW; // переменные для включения поиска линии

boolean RS1 = LOW;

unsigned int cm = 255; // переменная для хранения расстояния до объекта

unsigned int cm_0 = 0;

int num1  = 0;

int Stop  = 0; // переменная которая определяет где мы находимся

int Point = 0;

//int k1 = 0;

//int k2 = 0;

//int k3 = 0;

float Temp1 = 0.0; // переменная для хранения значения температуры

char inChar=-1; // переменная для хранения символа принатого с терминала

void setup() {

  delay(10000);

  //pinMode(PinMotorL, OUTPUT); // определяем функционал выводов ардуино

  pinMode(PinMotorL1, OUTPUT);

  pinMode(PinMotorL2, OUTPUT);

  //pinMode(PinMotorR, OUTPUT);

  pinMode(PinMotorR1, OUTPUT);

  pinMode(PinMotorR2, OUTPUT);

  pinMode(PinSensorA0, INPUT);

  pinMode(PinSensorA, INPUT);

  pinMode(PinSensorB, INPUT);

  pinMode(PinSensorC, INPUT);

  pinMode(PinSensorC0, INPUT);

  pinMode(PinTrig, OUTPUT);

  pinMode(PinEcho, INPUT);

  digitalWrite(PinTrig, LOW); // запускаем для теста определение расстояния при запуске робота

  delayMicroseconds(2);

  digitalWrite(PinTrig, HIGH);

  delayMicroseconds(10);

  digitalWrite(PinTrig, LOW);

  cm = pulseIn(PinEcho, HIGH);

  cm /= 58;

  Temp1 = mlx90615.getTemperature(MLX90615_OBJECT_TEMPERATURE); // считываем температуру

    lcd.init();  // выводим данные на дисплей                   

  lcd.backlight();// Включаем подсветку дисплея

  lcd.print("Robot_2:"); // выводим информацию на дисплей

  lcd.print(cm,DEC);lcd.print(":");lcd.print(Temp1,DEC);

      Serial.begin(9600); // инициализируем терминал

  Serial.println("Robot_2"); // отправляем данные на терминал

  Serial.println(Temp1); Serial.println("");

  Serial.println(cm,DEC);Serial.println("");

  Stop = 10; // }

void loop() {

    ReadSensors(); // процедура считывания информации с датчиков

  if ( Sensor > 0 & Sensor0 > 0 & Sensor0 != B01 & Stop == 0 ) { // != B01 т.к. это нам не надо то и тратить время не будм

    Speed(PinMotorL,1,0); // запускаем движение прямо чтобы исключить поворот

    Speed(PinMotorR,1,0);

    delay(12); // чтобы исключить ошибочное срабатывание через некоторое время производим повторное считывание датчиков

    ReadSensors();

    if ( Sensor > 0 & Sensor0 == B10 ) { Stop = 6; Stop1();

    } else if ( Sensor0 == B11 ) {

      Speed(PinMotorL,1,0);

      Speed(PinMotorR,1,0);

      Stop = 1;

      delay(90);

      ReadSensors();

      if ( Sensor == B000 & Sensor0 == B00 & Stop == 1 ) { Stop = 2; delay(90); }

      ReadSensors();

      if ( Sensor == B111 & Sensor0 == B11 & Stop == 1 ) { Stop = 3; } // База

      ReadSensors();

      if ( Sensor == B111 & Sensor0 == B11 & Stop == 2 ) { Stop = 4; } // Цель

      Stop1();

      ReadSensors();

      if ( Sensor == B000 & Sensor0 == B00 & Stop == 2 ) { Stop = 5; } // Т перектесток

    }

    lcd.setCursor(1, 1); lcd.print(Stop,DEC);

    delay(500);

  }

    if ( Stop == 0 ) {

  if (Sensor == B010)                       { Speed(PinMotorL,1,0);  Speed(PinMotorR,1,0); LS1 = LOW;  RS1 = LOW;

  } else if (Sensor == B110)                { Speed(PinMotorL,0,0);  Speed(PinMotorR,1,0); LS1 = HIGH; RS1 = LOW;

  } else if (Sensor == B100 | LS1 == HIGH ) { Speed(PinMotorL,0,0);  Speed(PinMotorR,1,0); LS1 = HIGH; RS1 = LOW;

  } else if (Sensor == B011)                { Speed(PinMotorL,1,0);  Speed(PinMotorR,0,0); RS1 = HIGH; LS1 = LOW;

  } else if (Sensor == B001 | RS1 == HIGH ) { Speed(PinMotorL,1,0);  Speed(PinMotorR,0,0); RS1 = HIGH; LS1 = LOW;

  } else if (Sensor == B000 & Sensor0 == B10) { LS1 = HIGH;

  } else if (Sensor == B000 & Sensor0 == B01) { RS1 = HIGH;

  } } else if ( Stop == 4 ) {

    Point ++; // увеличиваем значение переменной Point на 1 для определения в какой точке мы находимся

    digitalWrite(PinTrig, LOW);  // измеряем расстояние до объекта

    delayMicroseconds(2);

    digitalWrite(PinTrig, HIGH);

    delayMicroseconds(10);

    digitalWrite(PinTrig, LOW);

    cm = pulseIn(PinEcho, HIGH);

    cm /= 58; // сохраняем расстояние в переменную

    Temp1 = 0.0;

    if ( cm < 10 ) { // если до объекта меньше 10 см то измеряем температуру объекта и выводим данные на терминал и дисплей(если это 1-я или 2-я точка т.к. на дисплее только 2 строки)

      Temp1 = mlx90615.getTemperature(MLX90615_OBJECT_TEMPERATURE);

      Serial.print("Point: "); Serial.print(Point);   Serial.println("");

      Serial.print("Dist: ");  Serial.print(cm, DEC); Serial.println("");

      Serial.print("Temp: ");  Serial.print(Temp1);   Serial.println("");

      lcd.setCursor(1, Point - 1); lcd.print("Point: "); lcd.print(Point); lcd.print(":"); lcd.print(cm, DEC); lcd.print(":"); lcd.print(Temp1);

    } else { // если расстояние до объекта больше 10 см то выводим ошибку, т.е. объекта нет

      Serial.print("Point: "); Serial.print(Point);    Serial.println(" error.");

      lcd.setCursor(1, Point - 1); lcd.print("Point: "); lcd.print(Point); lcd.print("error.");

    }

    delay(500); // делаем паузу

    Speed(PinMotorL,0,1); // отезжаем, чтобы не задеть объект

    Speed(PinMotorR,0,1);

    delay(1000); // движемся 1 сек.

    Stop1(); // останавливаемся

    delay(500); // делаем паузу чтобы полностью остановиться

    Back(); // запускаем процедуру разворота

  } else if ( Stop == 5 | Stop == 6 ) { // мы на перекрестке

    Serial.println("Left");

    Left1(); // запускаем процедуру поворота налево

  } else if ( Stop == 3 ) { // мы на базе делаем Stop=10 для ожидания команды с терминала

    Serial.println("Base");

    Stop = 10;

  } else if ( Stop == 10 ) { // ожидаем команду с терминала

    if (Serial.available() > 0) {  //если есть доступные данные

       inChar = Serial.read(); // считываем в переменную inChar

       if ( (char)inChar == 's' ) { // если s начинаем движение

          Stop = 0;

       } else if ( (char)inChar == 'n' ){ // если n разворачиваемся и начинаем движение

          Back();

          Stop = 0;

          Point = 0;     }

void ReadSensors() // процедура считывания состояния датчиков определения линии

{

  if ( digitalRead(PinSensorA) == HIGH ) {

    Sensor |= (1 << 2); // устанавливаем бит 1 в 1 (пример: установка в 1 битов 3 и 5 Var |= (1 << 3) | (1 << 5);)

  } else {

    Sensor &= ~(1 << 2); // пример: сброс в 0 битов 2 и 6 Var &= ~((1 << 2) | (1 << 6));

  }

  if ( digitalRead(PinSensorB) == HIGH ) {

    Sensor |= (1 << 1);

  } else {

    Sensor &= ~(1 << 1);

  }

  if ( digitalRead(PinSensorC) == HIGH ) {

    Sensor |= (1 << 0);

  } else {

    Sensor &= ~(1 << 0);

  }

  if ( digitalRead(PinSensorA0) == HIGH ) { // датчики определения перекрестка

    Sensor0 |= (1 << 1);

  } else {

    Sensor0 &= ~(1 << 1);

  }

  if ( digitalRead(PinSensorC0) == HIGH ) {

    Sensor0 |= (1 << 0);

  } else {

    Sensor0 &= ~(1 << 0);

  }

}

// определяем процедуру управления моторами

// в переменную

void Speed(int Motor, int Course1, int Course2) // процедура управления двигателями

{

  int pin1, pin2;

  if (Motor == PinMotorL){

    pin1 = PinMotorL2;

    pin2 = PinMotorL1;

  } else {

    pin1 = PinMotorR2;

    pin2 = PinMotorR1;

  }

   digitalWrite(pin1, Course1);

   digitalWrite(pin2, Course2);

}

void Stop1() // процедура остановки

{

  Speed(PinMotorL,0,0);

  Speed(PinMotorR,0,0);

}

void Left1() // поворота налево

{

  Speed(PinMotorL,0,0);

  Speed(PinMotorR,1,0);

  delay(800);

  Stop = 0;

  LS1 = HIGH; RS1 = LOW;

void Back() // остановки

{

  Speed(PinMotorL,0,1);

  Speed(PinMotorR,1,0);

  delay(600);

  Stop1();

  Stop = 0;

  LS1 = HIGH; RS1 = LOW;

}


По теме: методические разработки, презентации и конспекты

План-конспект урока информатики по теме: Программное обеспечение. Классификация программного обеспечения", 9 класс

Данный план-конспект урока составлян с ипользованием электронных образовательных ресурсов (ЭОР)....

Презентация по физике 10 класс Температура и тепловое равновесие. Определение температуры. Абсолютная температура- мера средней кинетической энергии молекул.

Презентация по физике 10 класс по теме "Температура и тепловое равновесие. Определение температуры. Абсолютная температура- мера средней кинетической энергии молекул". Учебник Г,Я, Мякишев, Б.Б....

Методическая разработка урока физики в 10 классе по теме: « Температура и тепловое равновесие. Определение температуры».

Цель урока – формирование современных представлений о температуре как мере равновесного состояния системы Задачи: Образовательная – дать представление о тепловом равновесии системы, сформировать ...

Открытый урок по теме "Программное обеспечение. Прикладное программное обеспечение".

Урок создан для изучения по теме "Программное обеспечение" в 7 классе с углубленным изучением информатики. Может пригодится в 8 и 9 классах, при изучении данной темы....

Использование свободного программного обеспечения в ходе разработки прикладного программного обеспечения для нужд образовательного учреждения

В ходе процесса информатизации образовательного процесса школы в итоге сталкиваешься с ситуацией, что для решения определенного круга управленческих задач не подобрать готовое программное обеспечение....

Практикум для педагогов: "Использование комплекса свободного программного обеспечения в проектной деятельности инженерно-технической направленности"

Материал, предоставленный в данном практикуме, тесно переплетается с информатикой, развивая ИКТ компетентности учеников, знакомит с функциональными навыками профессий дизайнера,  инженера,  ...

Раздаточный материал по информатике для 7 класса. Тема: «Программное обеспечение компьютера. Системное программное обеспечение», «Системы программирования и прикладное программное обеспечение»

Тема: «Программное обеспечение компьютера. Системное программное обеспечение», «Системы программирования и прикладное программное обеспечение»...