Arduped-робот за один вечер

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

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

Для сборки понадобится:

Первое что необходимо сделать — это напечатать на 3D-принтере детали корпуса робота. Печатать можно из ABS или PLA пластика, соплом 0.4 и высотой слоя 0.2. Плотность заполнения — 70% и выше, так как уголки могут поломаться при первой же игре с ним.

Готовые детали
Подготовленная электроника
Сервоприводы в сборе

Сборку начинаем с, так скажем, лап нашегоробота. С помощью двухстороннего скотча приклеиваем к ним сервомоторы SG90.

С помощью маленьких болтиков устанавливаем сервомоторы в тело робота.

Так же собираем крепление для датчика препятствий

Все тем же скотчем приклеиваем датчик расстояния HC-SR04.

Сборка завершена.

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

Сервомоторы sg90 подключаем так как на схеме, смотря на робота спереди.

Модуль расширения для Arduino Nano к раме так же приклеиваем с помощью двухстороннего скотча.

Собранный робот в виде лягушонка.

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

#include <Servo.h> 
#include <NewPing.h>
#define IRsensorPin  13
#define TRIGGER_PIN  12  
#define ECHO_PIN     11  
#define LEFTLEG       7
#define RIGHTLEG     10
#define LEFTFOOT      8
#define RIGHTFOOT     9
#define	HEAD          6
#define MAX_DISTANCE 200 
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); 
Servo Lleg;  			
Servo Rleg;
Servo Lfoot;
Servo Rfoot;
Servo Head;
int Hcenter = 70;      	
int RLcenter = 100;
int RFcenter = 65;     
int LLcenter = 90;
int LFcenter = 75;
int tAngle = 30; 		
int uAngle = 35; 		
int sAngle = 35; 		
int hAngle = Hcenter;  
void setup() {
	Serial.begin(19200);
	Serial.println("Bipedino setup is running.");
	Lleg.attach(LEFTLEG);
	Rleg.attach(RIGHTLEG);  
	Lfoot.attach(LEFTFOOT);  
	Rfoot.attach(RIGHTFOOT);  
	Head.attach(HEAD); 
	CenterServos(); 
	delay(500);
	for (int i = 0; i < 5; ++i) {
		GetSonar();
		delay(1000);
	}
	Serial.println("Bipedino is ready.");
} // setup()

void loop() {
	unsigned int cmCenter = MAX_DISTANCE;
	unsigned int cmLeft   = MAX_DISTANCE;
	unsigned int cmRight  = MAX_DISTANCE;
	HeadCenter();
	cmCenter = GetSonar();
	if (cmCenter < 20) {
		HeadRight();
		cmRight = GetSonar();
		HeadCenter();
		if (cmRight > 20) {
			TurnRight(1, 30);
		} else {
			HeadLeft();
			cmLeft = GetSonar();
			HeadCenter();
			if (cmLeft > 20) {
				TurnLeft(1, 30);
			}
		} 
	} else {
		int nSteps = cmCenter / 5;

		if (nSteps > 5) {
			nSteps = 5;
		}
		else {
			nSteps = 1;
		}
		Serial.print("Steps <");
		Serial.print(nSteps); 
		Serial.println(">");  
		for (int n = 0; n < nSteps; n++) {
		Forward(1, 30); 
		}
	}
} 
int GetSonar() {
	unsigned int uS = sonar.ping(); 
	Serial.print("Ping: ");
	Serial.print(uS / US_ROUNDTRIP_CM); 
	Serial.println("cm");  
	return uS / US_ROUNDTRIP_CM;
} 
void CenterServos() { 
	Lleg.write(LLcenter);              
	Rleg.write(RLcenter);              
	Lfoot.write(LFcenter);              
	Rfoot.write(RFcenter);              
	Head.write(Hcenter);              
	delay(1000);                     
} // CenterServos()

После загрузки скетча, робот сразу начинает работать (при условии что все правильно собрано и подключено).

В общем, воспитатели и дети в садике довольны!

Работает
0

Изменено: