Программное обеспечение к инженерному проекту "РОБОТ-ТЕХНИК ПО ОПРЕДЕЛЕНИЮ ТЕМПЕРАТУРЫ ОБЪЕКТА И РАССТОЯНИЯ ДО НЕГО"
материал по информатике и икт (8 класс) на тему
Программное обеспечение к прототипу робота-техника разработано в среде Arduino/
Скачать:
Вложение | Размер |
---|---|
Программное обеспечение к прототипу робота-техника | 18.57 КБ |
Предварительный просмотр:
Программное обеспечение робота-техника
Программирование робота было осуществлено в среде 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 класса. Тема: «Программное обеспечение компьютера. Системное программное обеспечение», «Системы программирования и прикладное программное обеспечение»
Тема: «Программное обеспечение компьютера. Системное программное обеспечение», «Системы программирования и прикладное программное обеспечение»...