3 сервопривода на одном Arduino. Помогите кто чем может)
- Войдите на сайт для отправки комментариев
Пт, 08/04/2011 - 22:48
Требуется написать программу для управления 3-мя сервоприводами с компа.Если не сложно, выложите программу сюда, а я попробую разобраться. И как надо подключать сервоприводы(напрямую к пинам или надо ещё что-нибудь добавить?).
С мк ни разу до этого не работал, надеюсь вы поможете вступить в ваши ряды:)
Тебе надо для начала почитать описание к библиотеке по работе с сервоприводами на Arduino
подключать можно напрямую к пинам, но питание лучше брать от отдельного источника (5В)
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 распакуй в каталог процесинга
где в проге написанно ардуино код это зашить в ардуино
часть процессинга запустить на компе
ну и играться
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 библиотека?
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
Arduino code-это то что загрузить в мк,а Precessing code это что?
это часть которая будет ловить движения мышки со стороны компа и посылать их в ком порт она запускается на компе
ну или забить на все и через терминал кидать в ком порт данные от руки
вот библиотека http://arduino.cc/playground/uploads/ComponentLib/SoftwareServo.zip
А язык какой?
язык называется процессинг ну это типо как многие говорят кастрированный си перемешанный с вордом ну в принципе все работает да и это родной так сказать язык ардуино но только там по ссылке которую я дал выше его надо скачать и установить на комп у ардуины он сильно урезан ардуиновскую часть компилируй в ардуино процессенге а компьютерную часть в полном процессенге ну как то так
Кстати если в коде для ардуино написать не #include <SoftwareServo.h>, а #include <Servo.h>, то больше ничего не надо будет менять?
проще скачай библиотеку я там ссылку оставил в серво библиотеке помойму нет начального позичионирования ну вы пробуйте беды не будет если что вместе разберемся
А куда её кидать?
в папку либс
Библиотека Servo включена в дистрибутив, она уже лежит в папке \libraries\Servo
ну вот туда же и распакуйте еще одну библиотеку я просто уже столько их наставил что и не знаю какая там изночально поставка идет
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
Что делать?
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:
проверить есть ли эта часть код процессинга
после установки или изменений в библиотеках программу нужно презапустить иначе не подключется новая библиотека
Блин(
Я чё-то подзапутался...
Какой ЦЕЛЫЙ код для копирования в саму среду?
А какой адруино лучше купить, чтобю небыло не использованных портов и дёшево?
так на чем же ты эксперементируешь ? ты задачу формулируй определенно если три сервы и все то самый простой и дешевый и то еше запас огромный будет
Только 3 сервы)
Чем дешевле-тем лучше)
Название не подскажешь?
Только 3 сервы)
Чем дешевле-тем лучше)
Название не подскажешь?
я не спец по ценам но думаю рублей 600 фридуино какой нибудь типа мини
там есть наборы и печатки http://freeduino.ru/arduino/order.html
А ты не можешь магазин какой-нибудь посоветовать в питере, пожалуйста?
все что я знаю о питере что там есть чип и дип на площаде востания но думаю это самый дорогой магаз ты поиском по гугли этих плат выпускают кому не лень наборы конструкторы с рук на рынках ищи пару дней и попадется ну в край купи плату и распаяй хотя для тебя это наверно не вариан
А можешь дать название САМОГО дешёгого устройства?Я его гуглить буду
http://www.chipdip.ru/product/arduino-nano-v4.aspx
Этот подойдет?
да вполне подойдет только стоит космически но это вообще магазин для космонавтов
Урааа)Я космонавт)
Arduino Nano v5 - самая дешевая там(1200)
http://neotoy.ru/arduino-nano-v5
http://duino.ru/arduino-nano-v5
У меня на Атмеге 168
http://images.yandex.ru/yandsearch?rpt=simage&ed=1&text=Arduino%20Nano%2...
Я заметил, что там 4 светодиода есть, ими можно управлять?
И что за интересная белая кнопочка там чернеется?
мутный ты типан то тебе адрес то у тебя уже есть то код теперь кнопка ты определись
Я ездил в магазин только-что(помотри на время сообщений(16:52-19:00).Я около 2-х часов ездил).В чип и дип.Купил Arduino Nano v5.
На счёт кнопки-просто интересно.
Я просто хочу не просто в тупую код перекопировать чей-нибудь, а разобраться. Пока я хочу научиться основам, например управлением светодиодами.Не раскроешь тайну их управления, пожалуйста?
начни тогда с этого сайта внимательно изучи тут я думаю тебе на месяц хватит http://arduino.ru/Reference/PinMode пример
Спасибо)Я почти уверен, что задаю тупой вопрос, но как узнать какой вход\выход встроенного светодиода?
найти схему своей платы в гугле
написав программу и менять пин вывода
ну и для космоновтов еще можно тестером пины и диоды прозвонить
Там 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);
}
проштудируй конкретно этот сайт тут все есть с избытком для тебя не ленись
Я посмотрел про загрузку в него программ.Настроил боард и сериал порт.
На счёт этой ошибки погуглил и наткнулся на форум, в котором спрашивали на счёт этой-же ошибки и там сказали, что проблема в самом ардуино(Получается в сервис идти менять?Просто перед тем как мотаться на другой конец города я хочу уточнить, это у меня руки кривые или ардуино палёный?
это у тебя руки
Спасибо))Прям от сердца отлегло)
Я по этому сайту полазил- нового ничего не нашел(
Из-за чего может быть ошибка, как ты думаешь?
повторяй все раз за разом если тебе всегда говорить ты так и не научишся
Давай я тогда буду задавать вопросы с бинарным ответом(да/нет), тогда я и сам научусь и не спалю ардуино)
В тулс>боард для arduino nano v5 168 atmega мне выбрать пункт: "Arduino Diecimila, Duemilanove or Nano w/ ATmega 168"?
Насчет упомянутых выше дешевых nano, это просто охренеть можно, какое неуважение к создателям Arduino, они и так отдают в свободный доступ исходники и разрешают делать копии, только просят не называть Arduino. А наши умельцы, мало того, что даже по фотками видно плохую пайку, так еще и без зазрения совести называют Arduino Nano, как будто так надо.
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
Как исправить???Я уже всё перечитал, ничего не помогает!!(
Проверь, что выбран правильный контроллер. Tools->board
Проверь, что выбран правильный порт
Перезагрузи Arduino кнопкой перед заливкой скетча.
Перезагрузи сам IDE
Первые 3 делал, а что такое IDE?Это среда программирования?
Не помогло(((
Что щё может быть?
Не помогло(((
Что щё может быть?
Я там оставил сообщение в отдельной теме, которую ты создал по проблеме с nano. Наверно лучше туда обсуждение перенести.