Укупно 200 рубаља да купи добру основу за једноставну посао. Пројекат је завршен са страним колегама Адруино чл. За његову имплементацију мора знати основне принципе роботике, електронике и разумеју мало програмирање.
У видео клипу аутор говори и показује да би смо добили резултат.
Поред лампи морамо скуп Грове - Тои Кит. Ордер онлине можете купити по цени 79.9 $.
Основна идеја - дефиниција статичког или динамичког стања објекта на покрет. Ако је одговор позитиван, онда покренути једну од погонима и репродукцију унапред снимљену поруку. У супротном, активира 2. серво, и другачија звучни запис.
Одређивање иде кроз неки облик улаза. Тако смо добили резултат у бинарном коду 0 или 1.
Рекордер може да репродукује снимљеног звука само 4 преко екстерног сигнала. За снимање (свака 15 сец.), Потребно је укључити дугме «игра» да «Рекорд». Након снимања дугме поново требало пребацити. Ово се може урадити путем код (функција игра ()). У серво кабл је 3 "плус", "минус", а дигитални подаци. Први 2 обезбедити храну за серво (мак 7) и 3. повезује са дигиталним излазом, који прима информације о стању прекидача и по кода.
Први обрађени лампу. Не треба нам електричне компоненте, али треба да раде саме темеље. Такође, треба неке реквизите и пратеће елементе.
Направите рупу у цеви за повезивање нашег дизајна.
Прототип робота је спреман!
Корак 1: Глов
Користећи ЛЕД лампе ИКЕА ОЛЕБИ (Храна соларни).
Прекидач ради само у дигиталном апарату, и због тога зависи од тренутног мрежу. Ако смо се пребацили подсоединим Паи Сееедуино, можете подесити дигитални излаз ЛОВ, а онда ће бити струја. Када стављајући висок, то се поново појављује.
Чак и унутар лампе и ми прикључити отпорник за заштиту ЛЕД.
Подесите светла елемент у металном основом.
Корак 2: Принцип
Имамо серво управљач детектора лампе у прилогу, троструку убрзања оса, диктафон и играју 4 различите звукове.
Основни принцип лампе је следећи:
Испоставило се бука (звука)
Лампа укључен
Ради запис №3
Ручни Лампа даје приједлог (лево-десно-лево)
Серво остаје на 90 °
Завршен трансакција
Ако постоји бука, онда:
Лампа укључен
Серво са Ламп потезом напустио
Ради запис №2
Лампа врати у позицију 90 °
Завршен трансакција
Ако метални рука достигну одређену (висок) положај, затим играју рекорд №4.
Корак 3: Побољшање
У пројектовања може направити нека побољшања као уграђивање контролну таксе Сееедуино, да контролише извршење кода користећи редован циклус ИФ. Ако прекидач укључен - старт моде ауто, ако не - мод за употребу.
Ауто-мод укључује стандардну код кад лампа реагује на звук.
Ручно-режим обезбеђује даљинско управљање преко троструког акцелерометру осе, мења положај оса Кс и И.
Можете направити заокрет светла 360 °, додајући јој посебан серво. Могу Поставио сам за повезивање преко Ви-Фи / Етхернет.
Корак 4: Цоде
Аутор код (МрЛднр) могу се наћи испод.
[Спојлер]
#инцлуде
цонст инт буттонПин = 4; // Прекидач Позиција
инт буттонСтате = 0; // Променљива за читање дугмад позиције
// Серво Сетуп
Серво мисерво2;
Серво мисерво; // Креира за серво управљач
инт пос = 0; // Променљиве да сачувате серво позицију
инт пос2 = 0; // Променљиве да сачувате серво позицију
инт вал1;
инт вал2;
// ЛЕД Сетуп
цонст инт ледПин2 = 5; // Главни светло
цонст инт ледПин = 12; // Тубе светлост
инт цоунтламп2 = 0;
// Бука Сетуп
цонст инт тхресхолдвалуе = 300; // одговор на звук
// Сет акселеометра
инт истате;
инт кстате;
#инцлуде
#дефине ММА766ддр 0к4ц
#дефине ММА7660_Кс 0к00
#дефине ММА7660_И 0к01
#дефине ММА7660_З 0к02
#дефине ММА7660_ТИЛТ 0к03
#дефине ММА7660_СРСТ 0к04
#дефине ММА7660_СПЦНТ 0к05
#дефине ММА7660_ИНТСУ 0к06
#дефине ММА7660_МОДЕ 0к07
#дефине ММА7660_СР 0к08
#дефине ММА7660_ПДЕТ 0к09
#дефине ММА7660_ПД 0к0А
Убрзање класа
{
јавна:
Чар х;
цхар и;
Чар З;
};
Чар индекс;
Чар контрола;
Чар држава;
инт аудиоделаи = 1000;
воид мма7660_инит (воид)
{
Вире.бегин ();
Вире.бегинТрансмиссион (ММА766ддр);
Вире.сенд (ММА7660_МОДЕ);
Вире.сенд (0к00);
Вире.ендТрансмиссион ();
Вире.бегинТрансмиссион (ММА766ддр);
Вире.сенд (ММА7660_СР);
Вире.сенд (0к07); // Узорци / Друго Ацтиве Моде и Ауто-сна
Вире.ендТрансмиссион ();
Вире.бегинТрансмиссион (ММА766ддр);
Вире.сенд (ММА7660_МОДЕ);
Вире.сенд (0к01); // активан режим
Вире.ендТрансмиссион ();
}
воид сетуп ()
{
мма7660_инит (); // Придружите И2Ц (адреса селективна мајстор уређаја)
Сериал.бегин (9600);
// Мотион Сенсор
пинМоде (6 УЛАЗ); // користи 2 ноге за екстерног сигнала
// Лампа светло и база светло
пинМоде (ледПин, ИЗЛАЗ);
пинМоде (ледПин2 ИЗЛАЗ);
// Сервос
// АУДИО
ДДРД | = 0к0Ц; // Д2 и Д3 писати у режиму;
ПОРТД & = 0кФ3; // Д2 и Д3 постављен на ниска;
// Сензор буке на Аналог 0
// СВИТЦХ
пинМоде (буттонПин, ИНПУТ);
}
воид рец_2_бегин ()
{
ПОРТД = (ПОРТД | 0б00000100) & 0б11110111;
}
воид рец_2_стоп ()
{
ПОРТД & = 0кФ3;
}
воид плаи_2 ()
{
ПОРТД = (ПОРТД | 0б00000100) & 0б11110111;
кашњење (аудиоделаи);
ПОРТД & = 0кФ3;
}
////////////////////////////////////////////////// ////////////////////
////////////////////////////////////////////////// /////
// Функција за контролу сегмент_3
воид рец_3_бегин ()
{
ПОРТД = (ПОРТД | 0б00001000) & 0б11111011;
}
воид рец_3_стоп ()
{
ПОРТД & = 0кФ3;
}
воид плаи_3 ()
{
ПОРТД = (ПОРТД | 0б00001000) & 0б11111011;
кашњење (аудиоделаи);
ПОРТД & = 0кФ3;
}
////////////////////////////////////////////////// ///
////////////////////////////////////////////////
// Функција за контролу сегмент_4;
воид рец_4_бегин ()
{
ПОРТД = ПОРТД | 0б00001100;
}
воид рец_4_стоп ()
{
ПОРТД & = 0кФ3;
}
воид плаи_4 ()
{
ПОРТД = ПОРТД | 0б00001100;
кашњење (аудиоделаи);
ПОРТД & = 0кФ3;
}
//////////////////////
воид цхецк_мове ()
{
инт сенсорВалуе = дигиталРеад (6);
ако (сенсорВалуе == 1)
{
// ДигиталВрите (ледПин, висок);
//Сериал.принтлн(сенсорВалуе, ДЕЦ); // излаз сигнала положај на монитору.
// Серво1 ();
}
друго
{
// ДигиталВрите (ледПин, ЛОВ);
//Сериал.принтлн(сенсорВалуе, ДЕЦ); // излаз сигнала положај на монитору.
// Серво2 ();
}
}
воид серво1_ригхт ()
{
мисерво.аттацх (9);
за (п = 90; п = 90; поседовање = 1) // иде од 0 до 180 степени
{
мисерво.врите (пос); // Показује серво позицију кроз променљивог '' поз
забаване (10); // Ваитс 15 мс до серво управљач заузима позицију
} * /
}
воид серво1_лефт ()
{
мисерво.аттацх (9);
фор (пос = 90; поз & гт; 1; Поз - = 1) // иде од 0 до 180 степени
{// Корацима од 1 степена
мисерво.врите (пос); // Показује серво позицију кроз променљивог '' поз
забаване (10); // Ваитс за 15 мс, а серво управљач не заузима став
} / *
плаи_2 ();
кашњење (1000);
за (п = 1; пос90) {
фор (пос = посацт; поз & гт; 90; Поз - = 1) // враћа 90 степени
{// Корацима од 1 степена
мисерво.врите (пос); // Показује серво позицију кроз променљивог '' поз
забаване (10); // Ваитс за 15 мс, а серво управљач не заузима став
}
}
друго {
фор (пос = посацт; пос 60; Поз - = 1) // иде од 0 до 180 степени
{// Корацима од 1 степена
мисерво2.врите (пос); // Показује серво позицију кроз променљивог '' поз
забаване (10); // Ваитс за 15 мс, а серво управљач не заузима став
} / *
плаи_2 ();
кашњење (1000);
за (п = 1; пос90) {
фор (пос = посацт; поз & гт; 90; Поз - = 1) // враћа позицију 90 степени
{// Корацима од 1 степена
мисерво2.врите (пос); // Показује серво позицију кроз променљивог '' поз
забаване (10); // Ваитс за 15 мс, а серво управљач не заузима став
}
}
друго {
фор (пос = посацт; поз<=90 ;="" pos="" +="1)" goes="" from="" 0="" degrees="" to="" 180="">=90>
{// Корацима од 1 степена
мисерво2.врите (пос); // Показује серво позицију кроз променљивог '' поз
забаване (10); // Ваитс за 15 мс, а серво управљач не заузима став
}
}
}
воид серво1_но ()
{
мисерво.аттацх (9);
за (п = 90; п = 90; поседовање = 1) // иде од 180 до 0 степени
{
мисерво.врите (пос); // Показује серво позицију кроз променљивог '' поз
забаване (10); // Ваитс за 15 мс, а серво управљач не заузима став
}
}
воид серво2 ()
{
мисерво2.аттацх (10);
фор (пос2 = 110; пос2< 140;="" pos2="" +="1)" ="" 0="" ="" 180="">
{//
мисерво2.врите (пос2); // Показује серво позицију кроз променљивог '' поз
забаване (15); // Ваитс за 15 мс, а серво управљач не заузима став
}
}
воид серво1Р ()
{
мисерво.врите (90);
мисерво.детацх ();
}
воид серво2Р ()
{
мисерво2.врите (90);
мисерво2.детацх ();
}
воид лампблинк ()
{
// Инт сенсорВалуе = дигиталРеад (6);
// Ако (сенсорВалуе = 1) {
дигиталВрите (ледПин, висок);
// Делаи (1);
// ДигиталВрите (ледПин, ЛОВ);
// Делаи (1);
//}
// Елсе
// ДигиталВрите (ледПин, ЛОВ);
}
воид ламптест ()
{
фор (инт и = 0; и<100;>100;>
{
дигиталВрите (12 ХИГХ);
забаване (50);
дигиталВрите (12 ЛОВ);
забаване (50);
}
}
воид лампофф ()
{
// Делаи (2000);
дигиталВрите (ледПин, ЛОВ);
}
// Акселеометр
воид еЦом ()
{
грозен Чар вал [3];
инт број = 0;
вал [0] = вал [1] = вал [2] = 64;
Вире.рекуестФром (0к4ц, 3); // Пита 3 бајтова са апарата у роб-мод 0к4ц
док (Вире.аваилабле ())
{
иф (цоунт 63) // поновних
{
вал [датотека] = Вире.рецеиве ();
}
цоунт ++;
}
// Конверзија сигнала од 7 бита 8 бита
Убрзање рет;
рет.к = ((цхар) (вал [0] 2)) / 4;
рет.и = ((цхар) (вал [1] 2)) / 4;
рет.з = ((цхар) (вал [2] 2)) / 4;
истате = рет.и;
кстате = рет.к;
Сериал.принт ("к =");
Сериал.принтлн (рет.к, ДЕЦ); //
Сериал.принт ("и =");
Сериал.принтлн (рет.и, ДЕЦ); //
Сериал.принт ("з =");
Сериал.принтлн (рет.з, ДЕЦ); //
}
Чар читање = 0;
воид петља ()
{
Ецом (); // Проверите статус акцелометар
дигиталВрите (ледПин2ХИГХ);
буттонСтате = дигиталРеад (буттонПин); // Позиција читање прекидач
ако (буттонСтате == ХИГХ)
{
лампблинк (); // довело на:
мисерво.аттацх (9);
мисерво2.аттацх (10);
вал1 = истате;
вал1 = мапа (вал130 -300179);
мисерво2.врите (вал1);
вал2 = кстате;
вал2 = мапа (вал2 -30300 179);
мисерво.врите (вал2); // Поставља серво позицију према вредности ранзхируемым
ако (истате тхресхолдвалуе)
{
Сериал.принтлн ("ДА");
// ДигиталВрите (ледНоисе, висок);
плаи_4 ();
// Лампофф ();
лампблинк ();
серво1_но ();
серво1_но ();
серво1Р ();
кашњење (1000);
}
друго
{
лампофф ();
}
// Провера за кретањем
инт сенсорВалуе = дигиталРеад (6); // Детектор
ако (сенсорВалуе == 1)
{
Сериал.принтлн ("Мове");
// Мовестате = 1;
лампблинк ();
// Серво2 ();
серво2_ригхт ();
серво1_ригхт ();
плаи_2 ();
кашњење (1000);
серво2_ретурн ();
серво1_ретурн ();
серво1_лефт ();
серво2_лефт ();
плаи_2 ();
кашњење (1000);
серво2_ретурн ();
серво1_ретурн ();
// Делаи (1000);
}
друго
{
// ДигиталВрите (ледНоисе, ЛОВ);
// Серво2 ();
серво1Р ();
серво2Р ();
лампофф ();
// Плаи_2 ();
// Мовестате = 0;
}
}
}
