СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до 22.06.2025

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Танцующий робот-игрушка «ОТТО». ARDUINO.

Категория: Информатика

Нажмите, чтобы узнать подробности

Робот — автоматическое устройство, созданное по принципу живого организма, предназначенное для осуществления производственных и других операций, которое действует по заранее заложенной программе и получает информацию о внешнем мире от датчиков (аналогов органов чувств живых организмов), робот самостоятельно осуществляет производственные и иные операции. При этом робот может как иметь связь с оператором (получать от него команды), так и действовать автономно.

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

Было решено создать простейшего робота с функцией передвижения без колёс и функцией преодоления препятствий.

Тема представляемой работы – «Изготовление устройства робота с функцией передвижения без колёс и функцией преодоления препятствий»

Цель исследования: изучение механизмов движения с помощью ног. Изучение работы ультразвуковых датчиков. Программирование движения и реакций на состояние датчиков.

Объект исследования: механическое устройство с множеством моторов, датчиком и микроконтроллером для автономной работы.

Актуальность: Робототехника – современное направление с повсеместным изучением и применением в жизни.

Показать полностью

Просмотр содержимого документа
«Танцующий робот-игрушка «ОТТО». ARDUINO.»

муниципальное бюджетное учреждение дополнительного образования Ворошиловского района города Ростова-на-Дону

«Центр детского творчества»








Технический проект

Робот-игрушка «ОТТО»

Internet of Things, IoT














Автор работы:

Тимошенко Марина

9 кл. МБУ ДО ЦДТ

Ворошиловского района

Г. Ростова-на-Дону

Руководитель:

Филатова Наталья Михайлова

Педагог дополнительного образования

МБУ ДО ЦДТ Ворошиловского района



г. Ростов-на-Дону

2019 год

Содержание:



1. Введение

Цель проекта

Задачи

Реализация поставленной цели

Область применения

Решаемая проблема

Новизна

2. Основная часть

Материалы и инструменты

Технологическая карта

Поэтапное выполнение

Экономическая оценка изделия

3. Выводы.

4. Литература.















  1. Введение

Робот — автоматическое устройство, созданное по принципу живого организма, предназначенное для осуществления производственных и других операций, которое действует по заранее заложенной программе и получает информацию о внешнем мире от датчиков (аналогов органов чувств живых организмов), робот самостоятельно осуществляет производственные и иные операции. При этом робот может как иметь связь с оператором (получать от него команды), так и действовать автономно.

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

Было решено создать простейшего робота с функцией передвижения без колёс и функцией преодоления препятствий.

Тема представляемой работы – «Изготовление устройства робота с функцией передвижения без колёс и функцией преодоления препятствий»

Цель исследования: изучение механизмов движения с помощью ног. Изучение работы ультразвуковых датчиков. Программирование движения и реакций на состояние датчиков.

Объект исследования: механическое устройство с множеством моторов, датчиком и микроконтроллером для автономной работы.

Актуальность: Робототехника – современное направление с повсеместным изучением и применением в жизни.

Практическая значимость: веселье и удовольствие, а в перспективе усложнение возможностей (транспортировка, звуковое сопровождение, помощь в бытовых работах).

Цель проекта: освоение таких современных направлений, как программирование, конструирование, основы инженерии, 3D печать.





Задачи:

1. Определить какими средствами для реализации поставленных проблем мы располагаем.

2. Создать список предстоящих работ и продумать технологии их осуществления.

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

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

Программирование – область деятельности, направленная на разработку программного обеспечения, которое в свою очередь, направлено на улучшение и облегчение человеческого быта («умный дом»), промышленной деятельности, среды услуг и технологического прогресса.

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



II. Основная часть

Материалы и инструменты

Материалы: филамент (катушки с пластиком для принтера), резисторы, кнопки, тумблер, проводники, микроконтроллеры Arduino, регуляторы напряжения, сервоприводы, ультразвуковой датчик расстояния.


Инструменты: 3D принтер, наждачная бумага, натфили, паяльник, сверла, программатор, клеящий пистолет, компьютер с необходимым программным обеспечением.





Комплектующие:

Сервоприводы (4шт). Ультразвуковой датчик расстояния. Buzzer. Тумблер. Микроконтроллер Ардуино. Плата распределения питания. Провода.

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

Ультразвуковой датчик отправляет и принимает звуковые импульсы и определяет расстояние до препятствия измеряя временную задержку между импульсами. Программа использует эти данные для решения по развороту от препятствия.

Ардуино управляет моторами, принимает сигналы с датчиков, выполняет программу.

Плата распределения питания понижает входящее напряжение до 5 вольт и питает все электронные компоненты.

Источником питания могут служить любые батарейки/аккумуляторы от 5 до 12В с высокой токоотдачей. (мы используем LiPo аккумулятор на 7.4В).



Детали на 3D печать:



















Подготовка головы робота к печати:

















Подготовка ног к печати:



Сборка:





































#include

#include

#include


#define N_SERVOS 4

#define EEPROM_TRIM false

// Activate to take callibration data from internal memory

#define TRIM_RR 7

#define TRIM_RL 4

#define TRIM_YR 4

#define TRIM_YL -7

//OTTO.setTrims(-7,-4,-4,7);


#define PIN_RR 5

#define PIN_RL 4

#define PIN_YR 3

#define PIN_YL 2


#define INTERVALTIME 10.0


Oscillator servo[N_SERVOS];


void goingUp(int tempo);

void drunk (int tempo);

void noGravity(int tempo);

void kickLeft(int tempo);

void kickRight(int tempo);

void run(int steps, int T=500);

void walk(int steps, int T=1000);

void backyard(int steps, int T=3000);

void backyardSlow(int steps, int T=5000);

void turnLeft(int steps, int T=3000);

void turnRight(int steps, int T=3000);

void moonWalkLeft(int steps, int T=1000);

void moonWalkRight(int steps, int T=1000);

void crusaito(int steps, int T=1000);

void swing(int steps, int T=1000);

void upDown(int steps, int T=1000);

void flapping(int steps, int T=1000);


void setup()

{

Serial.begin(19200);

servo[0].attach(PIN_RR);

servo[1].attach(PIN_RL);

servo[2].attach(PIN_YR);

servo[3].attach(PIN_YL);

//EEPROM.write(0,TRIM_RR);

//EEPROM.write(1,TRIM_RL);

//EEPROM.write(2,TRIM_YR);

//EEPROM.write(3,TRIM_YL);

int trim;

if(EEPROM_TRIM){

for(int x=0;x

trim=EEPROM.read(x);

if(trim128)trim=trim-256;

Serial.print("TRIM ");

Serial.print(x);

Serial.print(" en ");

Serial.println(trim);

servo[x].SetTrim(trim);

}

}

else{

servo[0].SetTrim(TRIM_RR);

servo[1].SetTrim(TRIM_RL);

servo[2].SetTrim(TRIM_YR);

servo[3].SetTrim(TRIM_YL);

}

for(int i=0;i

}


// TEMPO: 121 BPM

int t=495;

double pause=0;


void loop()

{

// if(Serial.available()){

// char init = Serial.read();

// if (init=='X'){

// delay(4000); //3000 - 4500

dance();



//for(int i=0;i


for(int i=0;i

// }

// }

}


void dance(){

primera_parte();

segunda_parte();

moonWalkLeft(4,t*2);

moonWalkRight(4,t*2);

moonWalkLeft(4,t*2);

moonWalkRight(4,t*2);

primera_parte();

crusaito(1,t*8);

crusaito(1,t*7);


for (int i=0; i

flapping(1,t/4);

delay(3*t/4);

}

moonWalkRight(4,t*2);

moonWalkLeft(4,t*2);

moonWalkRight(4,t*2);

moonWalkLeft(4,t*2);


drunk(t*4);

drunk(t*4);

drunk(t*4);

drunk(t*4);

kickLeft(t);

kickRight(t);

drunk(t*8);

drunk(t*4);

drunk(t/2);

delay(t*4);


drunk(t/2);


delay(t*4);

walk(2,t*2);

backyard(2,t*2);

goingUp(t*2);

goingUp(t*1);

noGravity(t*2);

crusaito(1,t*2);

crusaito(1,t*8);

crusaito(1,t*2);

crusaito(1,t*8);

crusaito(1,t*2);

crusaito(1,t*3);


delay(t);

primera_parte();

for (int i=0; i

flapping(1,t/2);

delay(t/2);

}

for(int i=0;i

}


void oscillate(int A[N_SERVOS], int O[N_SERVOS], int T, double phase_diff[N_SERVOS]){

for (int i=0; i

servo[i].SetO(O[i]);

servo[i].SetA(A[i]);

servo[i].SetT(T);

servo[i].SetPh(phase_diff[i]);

}

double ref=millis();

for (double x=ref; x

for (int i=0; i

servo[i].refresh();

}

}

}


unsigned long final_time;

unsigned long interval_time;

int oneTime;

int iteration;

float increment[N_SERVOS];

int oldPosition[]={90,90,90,90};


void moveNServos(int time, int newPosition[]){

for(int i=0;i

final_time = millis() + time;

iteration = 1;

while(millis()

interval_time = millis()+INTERVALTIME;

oneTime=0;

while(millis()

if(oneTime

for(int i=0;i

servo[i].SetPosition(oldPosition[i] + (iteration * increment[i]));

}

iteration++;

oneTime++;

}

}

}


for(int i=0;i

oldPosition[i] = newPosition[i];

}

}


void goingUp(int tempo){

pause=millis();

for(int i=0;i

delay(tempo);

servo[0].SetPosition(80);

servo[1].SetPosition(100);

delay(tempo);

servo[0].SetPosition(70);

servo[1].SetPosition(110);

delay(tempo);

servo[0].SetPosition(60);

servo[1].SetPosition(120);

delay(tempo);

servo[0].SetPosition(50);

servo[1].SetPosition(130);

delay(tempo);

servo[0].SetPosition(40);

servo[1].SetPosition(140);

delay(tempo);

servo[0].SetPosition(30);

servo[1].SetPosition(150);

delay(tempo);

servo[0].SetPosition(20);

servo[1].SetPosition(160);

delay(tempo);

while(millis()


}


void primera_parte(){

int move1[4] = {60,120,90,90};

int move2[4] = {90,90,90,90};

int move3[4] = {40,140,90,90};

for(int x=0; x

for(int i=0; i

lateral_fuerte(1,t/2);

lateral_fuerte(0,t/4);

lateral_fuerte(1,t/4);

delay(t);

}

pause=millis();

for(int i=0;i

moveNServos(t*0.4,move1);

moveNServos(t*0.4,move2);

while(millis()

}

for(int i=0; i

lateral_fuerte(1,t/2);

lateral_fuerte(0,t/4);

lateral_fuerte(1,t/4);

delay(t);

}

pause=millis();

for(int i=0;i

crusaito(1,t*1.4);

moveNServos(t*1,move3);

for(int i=0;i

while(millis()

}


void segunda_parte(){

int move1[4] = {90,90,80,100};

int move2[4] = {90,90,100,80};

int move3[4] = {90,90,80,100};

int move4[4] = {90,90,100,80};

int move5[4] = {40,140,80,100};

int move6[4] = {40,140,100,80};

int move7[4] = {90,90,80,100};

int move8[4] = {90,90,100,80};

int move9[4] = {40,140,80,100};

int move10[4] = {40,140,100,80};

int move11[4] = {90,90,80,100};

int move12[4] = {90,90,100,80};

for(int x=0; x

for(int i=0; i

pause=millis();

moveNServos(t*0.15,move1);

moveNServos(t*0.15,move2);

moveNServos(t*0.15,move3);

moveNServos(t*0.15,move4);

while(millis()

}

pause=millis();

moveNServos(t*0.15,move5);

moveNServos(t*0.15,move6);

moveNServos(t*0.15,move7);

moveNServos(t*0.15,move8);

while(millis()

}

for(int i=0; i

pause=millis();

moveNServos(t*0.15,move9);

moveNServos(t*0.15,move10);

moveNServos(t*0.15,move11);

moveNServos(t*0.15,move12);

while(millis()

}

}


void lateral_fuerte(boolean side, int tempo){

for(int i=0;i

if (side) servo[0].SetPosition(40);

else servo[1].SetPosition(140);

delay(tempo/2);

servo[0].SetPosition(90);

servo[1].SetPosition(90);

delay(tempo/2);


}


void drunk (int tempo){

pause=millis();

int move1[] = {60,70,90,90};

int move2[] = {110,120,90,90};

int move3[] = {60,70,90,90};

int move4[] = {110,120,90,90};

moveNServos(tempo*0.235,move1);

moveNServos(tempo*0.235,move2);

moveNServos(tempo*0.235,move3);

moveNServos(tempo*0.235,move4);

while(millis()


}



void noGravity(int tempo){

int move1[4] = {120,140,90,90};

int move2[4] = {140,140,90,90};

int move3[4] = {120,140,90,90};

int move4[4] = {90,90,90,90};

for(int i=0;i

for(int i=0;i

moveNServos(tempo*2,move1);

moveNServos(tempo*2,move2);

delay(tempo*2);

moveNServos(tempo*2,move3);

moveNServos(tempo*2,move4);



}


void kickLeft(int tempo){

for(int i=0;i

delay(tempo);

servo[0].SetPosition(50); //pie derecho

servo[1].SetPosition(70); //pie izquiero

delay(tempo);

servo[0].SetPosition(80); //pie derecho

servo[1].SetPosition(70); //pie izquiero

delay(tempo/4);

servo[0].SetPosition(30); //pie derecho

servo[1].SetPosition(70); //pie izquiero

delay(tempo/4);

servo[0].SetPosition(80); //pie derecho

servo[1].SetPosition(70); //pie izquiero

delay(tempo/4);

servo[0].SetPosition(30); //pie derecho

servo[1].SetPosition(70); //pie izquiero

delay(tempo/4);

servo[0].SetPosition(80); //pie derecho

servo[1].SetPosition(70); //pie izquiero

delay(tempo);

}


void kickRight(int tempo){

for(int i=0;i

delay(tempo);

servo[0].SetPosition(110); //pie derecho

servo[1].SetPosition(130); //pie izquiero

delay(tempo);

servo[0].SetPosition(110); //pie derecho

servo[1].SetPosition(100); //pie izquiero

delay(tempo/4);

servo[0].SetPosition(110); //pie derecho

servo[1].SetPosition(150); //pie izquiero

delay(tempo/4);

servo[0].SetPosition(110); //pie derecho

servo[1].SetPosition(80); //pie izquiero

delay(tempo/4);

servo[0].SetPosition(110); //pie derecho

servo[1].SetPosition(150); //pie izquiero

delay(tempo/4);

servo[0].SetPosition(110); //pie derecho

servo[1].SetPosition(100); //pie izquiero

delay(tempo);

}


void walk(int steps, int T){

int A[4]= {15, 15, 30, 30};

int O[4] = {0, 0, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(0), DEG2RAD(90), DEG2RAD(90)};

for(int i=0;i

}


void run(int steps, int T){

int A[4]= {10, 10, 10, 10};

int O[4] = {0, 0, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(0), DEG2RAD(90), DEG2RAD(90)};

for(int i=0;i

}


void backyard(int steps, int T){

int A[4]= {15, 15, 30, 30};

int O[4] = {0, 0, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(0), DEG2RAD(-90), DEG2RAD(-90)};

for(int i=0;i

}


void backyardSlow(int steps, int T){

int A[4]= {15, 15, 30, 30};

int O[4] = {0, 0, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(0), DEG2RAD(-90), DEG2RAD(-90)};

for(int i=0;i

}



void turnLeft(int steps, int T){

int A[4]= {20, 20, 10, 30};

int O[4] = {0, 0, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(0), DEG2RAD(90), DEG2RAD(90)};

for(int i=0;i

}


void turnRight(int steps, int T){

int A[4]= {20, 20, 30, 10};

int O[4] = {0, 0, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(0), DEG2RAD(90), DEG2RAD(90)};

for(int i=0;i

}


void moonWalkRight(int steps, int T){

int A[4]= {25, 25, 0, 0};

int O[4] = {-15 ,15, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(180 + 120), DEG2RAD(90), DEG2RAD(90)};

for(int i=0;i

}


void moonWalkLeft(int steps, int T){

int A[4]= {25, 25, 0, 0};

int O[4] = {-15, 15, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(180 - 120), DEG2RAD(90), DEG2RAD(90)};

for(int i=0;i

}


void crusaito(int steps, int T){

int A[4]= {25, 25, 30, 30};

int O[4] = {- 15, 15, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(180 + 120), DEG2RAD(90), DEG2RAD(90)};

for(int i=0;i

}


void swing(int steps, int T){

int A[4]= {25, 25, 0, 0};

int O[4] = {-15, 15, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(0), DEG2RAD(90), DEG2RAD(90)};

for(int i=0;i

}


void upDown(int steps, int T){

int A[4]= {25, 25, 0, 0};

int O[4] = {-15, 15, 0, 0};

double phase_diff[4] = {DEG2RAD(180), DEG2RAD(0), DEG2RAD(270), DEG2RAD(270)};

for(int i=0;i

}


void flapping(int steps, int T){

int A[4]= {15, 15, 8, 8};

int O[4] = {-A[0], A[1], 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(180), DEG2RAD(90), DEG2RAD(-90)};

for(int i=0;i

}


void test(int steps, int T){

int A[4]= {15, 15, 8, 8};

int O[4] = {-A[0] + 10, A[1] - 10, 0, 0};

double phase_diff[4] = {DEG2RAD(0), DEG2RAD(180), DEG2RAD(90), DEG2RAD(-90)};

for(int i=0;i

}


Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!