3 сервопривода на одном Arduino. Помогите кто чем может)

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Требуется написать программу для управления 3-мя сервоприводами с компа.Если не сложно, выложите программу сюда, а я попробую разобраться. И как надо подключать сервоприводы(напрямую к пинам или надо ещё что-нибудь добавить?).
С мк ни разу до этого не работал, надеюсь вы поможете вступить в ваши ряды:)

Zaliv
Offline
Зарегистрирован: 05.03.2011

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

noonv
Offline
Зарегистрирован: 29.03.2011

подключать можно напрямую к пинам, но питание лучше брать от отдельного источника (5В)

kikia99
Offline
Зарегистрирован: 22.03.2011

import oscP5.*; // Load OSC P5 library
import netP5.*; // Load net P5 library
import processing.serial.*;

OscP5 oscP5;// Set oscP5 as OSC connection
Serial myPort; // The serial port:

int servo1 = 0;
int servo2 = 0;
int servo3 = 0;
int serialBegin = 255;

float X,Y

void setup() {
size(600,600);

myPort = new Serial(this, Serial.list()[1], 115200);

frameRate(100);
noCursor();

}

void oscEvent(OscMessage theOscMessage) { // This runs whenever there is a new OSC message

String addr = theOscMessage.addrPattern(); // Creates a string out of the OSC message
// if(addr.indexOf("/1/toggle") !=-1){ // Filters out any toggle buttons
X=theOscMessage.get(0).floatValue();
Y=theOscMessage.get(1).floatValue();

}
}

void draw() {

background(255);

triangle(width/2, height, 0, 200, width, 200);

servo1 = 100-int(dist(width/2,0,X,Y)/6);
servo2 = 100-int(dist(0,height,X,Y)/6);
servo3 = 100-int(dist(width,height,X,Y)/6);
strokeWeight(3);
line(300,200,X,Y);
line(150,400,X,Y);
line(450,400,X,Y);

println("X "+X);
println("Y "+Y);

if (servo1 < 0){
servo1=0;
}

if (servo2 <0){
servo2=0;
}

if (servo3 <0){
servo3=0;
}

if (mousePressed && (mouseButton == LEFT)) {
servo1 -= 20;
servo2 -= 20;
servo3 -= 20;
}
if (mousePressed && (mouseButton == RIGHT)) {
servo1 += 40;
servo2 += 40;
servo3 += 40;
}

//println("servo1 "+servo1);
//println("servo2 "+servo2);
//println("servo3 "+servo3);
//Serial.write
myPort.write(255);
//delay(10);
myPort.write(servo1+30);
//delay(10);
myPort.write(254);
//delay(10);
myPort.write(servo2+30);
//delay(10);
myPort.write(253);
//delay(10);
myPort.write(servo3+30);
//delay(10);

}
 
 
потом скачай тут http://www.sojamo.de/libraries/oscP5/download/oscP5-0.9.6.zip
 
потом скачай  тут http://processing.org/
папку oscP5-0.9.6 распакуй в каталог процесинга 
где в проге написанно ардуино код это зашить в ардуино 
часть процессинга запустить на компе  
ну и играться 

Смиирняга
Offline
Зарегистрирован: 08.04.2011

kikia99 пишет:

import oscP5.*; // Load OSC P5 library
import netP5.*; // Load net P5 library
import processing.serial.*;

OscP5 oscP5;// Set oscP5 as OSC connection
Serial myPort; // The serial port:

int servo1 = 0;
int servo2 = 0;
int servo3 = 0;
int serialBegin = 255;

float X,Y

void setup() {
size(600,600);

myPort = new Serial(this, Serial.list()[1], 115200);

frameRate(100);
noCursor();

}

void oscEvent(OscMessage theOscMessage) { // This runs whenever there is a new OSC message

String addr = theOscMessage.addrPattern(); // Creates a string out of the OSC message
// if(addr.indexOf("/1/toggle") !=-1){ // Filters out any toggle buttons
X=theOscMessage.get(0).floatValue();
Y=theOscMessage.get(1).floatValue();

}
}

void draw() {

background(255);

triangle(width/2, height, 0, 200, width, 200);

servo1 = 100-int(dist(width/2,0,X,Y)/6);
servo2 = 100-int(dist(0,height,X,Y)/6);
servo3 = 100-int(dist(width,height,X,Y)/6);
strokeWeight(3);
line(300,200,X,Y);
line(150,400,X,Y);
line(450,400,X,Y);

println("X "+X);
println("Y "+Y);

if (servo1 < 0){
servo1=0;
}

if (servo2 <0){
servo2=0;
}

if (servo3 <0){
servo3=0;
}

if (mousePressed && (mouseButton == LEFT)) {
servo1 -= 20;
servo2 -= 20;
servo3 -= 20;
}
if (mousePressed && (mouseButton == RIGHT)) {
servo1 += 40;
servo2 += 40;
servo3 += 40;
}

//println("servo1 "+servo1);
//println("servo2 "+servo2);
//println("servo3 "+servo3);
//Serial.write
myPort.write(255);
//delay(10);
myPort.write(servo1+30);
//delay(10);
myPort.write(254);
//delay(10);
myPort.write(servo2+30);
//delay(10);
myPort.write(253);
//delay(10);
myPort.write(servo3+30);
//delay(10);

}
 
 
потом скачай тут http://www.sojamo.de/libraries/oscP5/download/oscP5-0.9.6.zip


 
Спасибо большое)Только это для компа?Я просто для самого мк не мог программу написать)
Это-же с?
 
 
Там разве не servo библиотека?

kikia99
Offline
Зарегистрирован: 22.03.2011

Arduino code:

#include <SoftwareServo.h>

SoftwareServo servo1;
SoftwareServo servo2;
SoftwareServo servo3;
int servo1Pos = 90;
int servo2Pos = 90;
int servo3Pos = 90;
int servo1Afwijking = -2;
int servo2Afwijking = 8;
int servo3Afwijking = 8;

int data = 0;

void setup(){
pinMode(13, OUTPUT);

servo1.attach(10);

servo2.attach(11);

servo3.attach(12);
//pinmode
Serial.begin(115200);
}

void loop(){
if (Serial.available() > 0) {
// read the incoming byte:
data = Serial.read();

if (data == 255){
delay(7);
if (Serial.available() > 0) {
servo1Pos = Serial.read();
}
}

if (data == 254){
delay(7);
if (Serial.available() > 0) {
servo2Pos = Serial.read();
}
}

if (data == 253){
delay(7);
if (Serial.available() > 0) {
servo3Pos = Serial.read();
}
serialTeller = 0;

} else {
serialTeller++;

}
if (serialTeller >1000){
servo1Pos = 90;
servo2Pos = 90;
servo3Pos = 90;
}

if (serialTeller < 2000){
SoftwareServo::refresh();
}
}
if (servo1Pos < 30){
servo1Pos = 30;
}
if (servo2Pos < 30){
servo2Pos = 30;
}
if (servo3Pos < 30){
servo3Pos = 30;
}
if (servo1Pos > 130){
servo1Pos = 130;
}
if (servo2Pos > 130){
servo2Pos = 130;
}
if (servo3Pos > 130){
servo3Pos = 130;
}
servo1.write(servo1Pos-servo1Afwijking);
servo2.write(servo2Pos-servo2Afwijking);
servo3.write(servo3Pos-servo3Afwijking);
}

-------------------------------------------------------------------------

Precessing code:

import processing.serial.*;

Serial myPort; // The serial port:

int servo1 = 0;
int servo2 = 0;
int servo3 = 0;
int serialBegin = 255;

void setup() {
size(600,600);

myPort = new Serial(this, Serial.list()[1], 115200);

frameRate(100);
noCursor();

}

void draw() {

background(255);

triangle(width/2, height, 0, 200, width, 200);

servo1 = 100-int(dist(width/2,0,mouseX,mouseY)/6);
servo2 = 100-int(dist(0,height,mouseX,mouseY)/6);
servo3 = 100-int(dist(width,height,mouseX,mouseY)/6);
strokeWeight(3);
line(300,200,mouseX,mouseY);
line(150,400,mouseX,mouseY);
line(450,400,mouseX,mouseY);

println("X "+mouseX);
println("Y "+mouseY);

if (servo1 < 0){
servo1=0;
}

if (servo2 <0){
servo2=0;
}

if (servo3 <0){
servo3=0;
}

if (mousePressed && (mouseButton == LEFT)) {
servo1 -= 20;
servo2 -= 20;
servo3 -= 20;
}
if (mousePressed && (mouseButton == RIGHT)) {
servo1 += 40;
servo2 += 40;
servo3 += 40;
}

//println("servo1 "+servo1);
//println("servo2 "+servo2);
//println("servo3 "+servo3);
//Serial.write
myPort.write(255);
//delay(10);
myPort.write(servo1+30);
//delay(10);
myPort.write(254);
//delay(10);
myPort.write(servo2+30);
//delay(10);
myPort.write(253);
//delay(10);
myPort.write(servo3+30);
//delay(10);

}
 
ком с ардуино общаются через виртуальный ком порт  ты мышкой упровляеш тремя сервами 
библиотеку включай ту которая тебе ближе  можно и servo.h

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Arduino code-это то что загрузить в мк,а Precessing code это что?

kikia99
Offline
Зарегистрирован: 22.03.2011

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

kikia99
Offline
Зарегистрирован: 22.03.2011

 ну или забить на все и через терминал кидать в ком порт данные от руки  
 
вот библиотека http://arduino.cc/playground/uploads/ComponentLib/SoftwareServo.zip

Смиирняга
Offline
Зарегистрирован: 08.04.2011

А язык какой?
 

kikia99
Offline
Зарегистрирован: 22.03.2011

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

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Кстати если в коде для ардуино написать не #include <SoftwareServo.h>, а #include <Servo.h>, то больше ничего не надо будет менять?

kikia99
Offline
Зарегистрирован: 22.03.2011

проще скачай библиотеку я там ссылку оставил в серво библиотеке помойму нет начального позичионирования  ну вы пробуйте  беды не будет  если что вместе разберемся  

Смиирняга
Offline
Зарегистрирован: 08.04.2011

А куда её кидать?

kikia99
Offline
Зарегистрирован: 22.03.2011

в папку либс  

Modular
Offline
Зарегистрирован: 05.03.2011

Библиотека Servo включена в дистрибутив, она уже лежит в папке \libraries\Servo

kikia99
Offline
Зарегистрирован: 22.03.2011

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

Смиирняга
Offline
Зарегистрирован: 08.04.2011

 
sketch_apr09f.cpp: In function 'void loop()':
sketch_apr09f:50: error: 'serialTeller' was not declared in this scope
sketch_apr09f:53: error: 'serialTeller' was not declared in this scope
sketch_apr09f:56: error: 'serialTeller' was not declared in this scope
sketch_apr09f:62: error: 'serialTeller' was not declared in this scope
 

Что делать?

kikia99
Offline
Зарегистрирован: 22.03.2011

 
import oscP5.*; // Load OSC P5 library
import netP5.*; // Load net P5 library
import processing.serial.*;

OscP5 oscP5;// Set oscP5 as OSC connection
Serial myPort; // The serial port:
 
 
проверить есть ли эта часть  код процессинга  
 
после установки или изменений в библиотеках программу нужно презапустить иначе не подключется  новая библиотека

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Блин(
Я чё-то подзапутался...
Какой ЦЕЛЫЙ код для копирования в саму среду?

Смиирняга
Offline
Зарегистрирован: 08.04.2011

А какой адруино лучше купить, чтобю небыло не использованных портов и дёшево?

kikia99
Offline
Зарегистрирован: 22.03.2011

так на чем же ты эксперементируешь ? ты задачу формулируй определенно  если три сервы и все то самый простой и дешевый и то еше запас огромный будет 

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Только 3 сервы)
Чем дешевле-тем лучше)
Название не подскажешь?

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Только 3 сервы)
Чем дешевле-тем лучше)
Название не подскажешь?

kikia99
Offline
Зарегистрирован: 22.03.2011

я не спец по ценам  но думаю рублей 600 фридуино какой нибудь  типа мини 
там есть наборы и печатки http://freeduino.ru/arduino/order.html

Смиирняга
Offline
Зарегистрирован: 08.04.2011

А ты не можешь магазин какой-нибудь посоветовать в питере, пожалуйста?
 

kikia99
Offline
Зарегистрирован: 22.03.2011

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

Смиирняга
Offline
Зарегистрирован: 08.04.2011

А можешь дать название САМОГО дешёгого устройства?Я его гуглить буду

Смиирняга
Offline
Зарегистрирован: 08.04.2011
kikia99
Offline
Зарегистрирован: 22.03.2011

 да вполне подойдет только стоит космически но это вообще магазин для космонавтов 

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Урааа)Я космонавт)
Arduino Nano v5 - самая дешевая там(1200)
http://neotoy.ru/arduino-nano-v5
http://duino.ru/arduino-nano-v5
У меня на Атмеге 168
 

Смиирняга
Offline
Зарегистрирован: 08.04.2011

http://images.yandex.ru/yandsearch?rpt=simage&ed=1&text=Arduino%20Nano%2...
Я заметил, что там 4 светодиода есть, ими можно управлять?
И что за интересная белая кнопочка там чернеется?
 

kikia99
Offline
Зарегистрирован: 22.03.2011

мутный ты типан то тебе адрес то у тебя уже есть то код теперь кнопка ты определись  

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Я ездил в магазин только-что(помотри на время сообщений(16:52-19:00).Я около 2-х часов ездил).В чип и дип.Купил Arduino Nano v5.
На счёт кнопки-просто интересно.
Я просто хочу не просто в тупую код перекопировать чей-нибудь, а разобраться. Пока я хочу научиться основам, например управлением светодиодами.Не раскроешь тайну их управления, пожалуйста?

kikia99
Offline
Зарегистрирован: 22.03.2011

начни тогда с этого сайта внимательно изучи тут я думаю тебе на месяц хватит http://arduino.ru/Reference/PinMode пример 

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Спасибо)Я почти уверен, что задаю тупой вопрос, но как узнать какой вход\выход встроенного светодиода?

kikia99
Offline
Зарегистрирован: 22.03.2011

найти схему своей платы в гугле
написав программу и менять пин вывода 
ну и для космоновтов еще можно тестером пины и диоды прозвонить 

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Там 13 пин.Тут какая-то ошибка
Компиляция ошибок не выдаёт, но при загрузке в сам Arduino выписывается ошибка:
 
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
Как исправить?
Код:

int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
 

kikia99
Offline
Зарегистрирован: 22.03.2011

проштудируй конкретно этот сайт  тут все есть с избытком для тебя не ленись  

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Я посмотрел про загрузку в него программ.Настроил боард и сериал порт.
На счёт этой ошибки погуглил и наткнулся на форум, в котором спрашивали на счёт этой-же ошибки и там сказали, что проблема в самом ардуино(Получается в сервис идти менять?Просто перед тем как мотаться на другой конец города я хочу уточнить, это у меня руки кривые или ардуино палёный?

kikia99
Offline
Зарегистрирован: 22.03.2011

это у тебя руки 
 

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Спасибо))Прям от сердца отлегло)
Я по этому сайту полазил- нового ничего не нашел(
Из-за чего может быть ошибка, как ты думаешь?
 

kikia99
Offline
Зарегистрирован: 22.03.2011

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

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Давай я тогда буду задавать вопросы с бинарным ответом(да/нет), тогда я и сам научусь и не спалю ардуино)
В тулс>боард для arduino nano v5 168 atmega мне выбрать пункт: "Arduino Diecimila, Duemilanove or Nano w/ ATmega 168"?

Zaliv
Offline
Зарегистрирован: 05.03.2011

 Насчет упомянутых выше дешевых nano, это просто охренеть можно, какое неуважение к создателям Arduino, они и так отдают в свободный доступ исходники и разрешают делать копии, только просят не называть Arduino. А наши умельцы, мало того, что даже по фотками видно плохую пайку, так еще и без зазрения совести называют Arduino Nano, как будто так надо.

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Zaliv, помоги, пожалуйста)
Я 3 часа назад купил Arduino nano v.5.
Попытался скачать на ардуино код:
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
 
Компиляция проходит нормально, но когда нажимаю на upload-адруино 3 раза мигает(иногда 5) и вылезает ошибка:
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
Как исправить???Я уже всё перечитал, ничего не помогает!!(

Zaliv
Offline
Зарегистрирован: 05.03.2011

Проверь, что выбран правильный контроллер.  Tools->board
Проверь, что выбран правильный порт
Перезагрузи Arduino кнопкой перед заливкой скетча.
Перезагрузи сам IDE

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Первые 3 делал, а что такое IDE?Это среда программирования?

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Не помогло(((
Что щё может быть?

Смиирняга
Offline
Зарегистрирован: 08.04.2011

Не помогло(((
Что щё может быть?

Modular
Offline
Зарегистрирован: 05.03.2011

 Я там оставил сообщение в отдельной теме, которую ты создал по проблеме с nano. Наверно лучше туда обсуждение перенести.