Технический форум по робототехнике.
slom писал(а):сейчас ребенок спит, не могу жужжать, а то 6 моторов не хуже дрели работают
но постараюсь сегодня сделать.
возник еще вопрос а как задействовать энкодеры и акселерометр на плате. по идее энкодеры могут дать точный угол поворота телеги, а акселерометром можно отключать питание при резком столкновении, например если врезалась, то чтоб моторы не палить и не грести понапрасну, раз и выкл...
elmot писал(а):А с энкодерами я чот не понял, они должны быть на мотороах, а не на плате
elmot писал(а):и что там за энкодеры?
#include "Servo.h"
#include "IRremote.h"
IRrecv irrecv(7);
decode_results results;
Servo servoMain;
int servPoz = 90; //Начальное положение сервы
int lastPoz = 0;
void setup()
{
Serial.begin(9600); // Выставляем скорость COM порта
irrecv.enableIRIn(); // Запускаем прием
irrecv.enableIRIn();
servoMain.attach(8); // Servo присоединен к 10 выводу
servoMain.write(servPoz);
}
void loop() {
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX); // Отправляем полученную данную в консоль
int res = results.value;
Serial.println(res, HEX);
if(res==0xFFA857)// Если нажата кнопка "+"
{
lastPoz=res;
servPoz++;
servoMain.write(servPoz);
}
else if(res==0xFFE01F)// Если нажата кнопка "-"
{
servPoz--;
lastPoz=res;
servoMain.write(servPoz);
}
else if(res==0xFFFFFFFF)// Если кнопку удерживают
{
if(lastPoz==0xFFA857) servPoz++;// Удерживают "+"
if(lastPoz==0xFFE01F) servPoz--;// Удерживают "-"
servoMain.write(servPoz);
}
irrecv.resume();
delay(100);
}
}
#include<Ultrasonic.h> /*включить установленную пользователем библиотеку*/
Ultrasonic ultrasonic(12,13); /*создать экземпляр УЗ датчика и определить выводы*/
void setup() {
Serial.begin(9600); /*начать передачу данных на скорости 9600 bps */
}
void loop()
{
Serial.print(ultrasonic.Ranging(INC)); /* INC для дюймов, CM для сантиметров */
Serial.println("in");
delay(100);
}
0in
0in
0in
0in
4in
4in
4in
4in
4in
4in
4in
4in
4in
и тд...
#include<Ultrasonic.h> /*включить установленную пользователем библиотеку*/
Ultrasonic ultrasonic(12,13); /*создать экземпляр УЗ датчика и определить выводы*/
#define DirM1 2
#define PwmM1 3
#define DirM2 10
#define PwmM2 11
#define BrakeM1 4
#define BrakeM2 9
void setup()
{
pinMode (PwmM1, OUTPUT);
pinMode (DirM1, OUTPUT);
pinMode (BrakeM1, OUTPUT);
pinMode (PwmM2, OUTPUT);
pinMode (DirM2, OUTPUT);
pinMode (BrakeM2, OUTPUT);
digitalWrite (BrakeM1, LOW);
digitalWrite (BrakeM2, LOW);
Serial.begin(9600); /*начать передачу данных на скорости 9600 bps */
}
void loop() {
Serial.print(ultrasonic.Ranging(INC)); /* INC для дюймов, CM для сантиметров */
Serial.println(" inc ");
if(ultrasonic.Ranging(INC) < 30) {
rotateLeft();
}
else {
goForward();
}
delay(0);
}
void goForward ()
{
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 100);
digitalWrite (DirM2, HIGH);
analogWrite (PwmM2, 100);
Serial.println("GO ");
}
void rotateLeft ()
{
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 130);
digitalWrite (DirM2, LOW);
analogWrite (PwmM2, 130);
Serial.println("to left");
}
void startUp ()
{
}
#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED
int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}
void loop() {
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
//Calculate the distance (in cm) based on the speed of sound.
distance = duration/58.2;
if (distance >= maximumRange || distance <= minimumRange){
/* Send a negative number to computer and Turn LED ON
to indicate "out of range" */
// Serial.println("-1");
digitalWrite(LEDPin, HIGH);
}
else {
/* Send the distance to the computer using Serial protocol, and
turn LED OFF to indicate successful reading. */
Serial.println(distance);
digitalWrite(LEDPin, LOW);
}
//Delay 50ms before next reading.
//delay(50);
}
#include <IRremote.h>
int RECV_PIN = 7;
#define DirM1 2
#define PwmM1 3
#define DirM2 10
#define PwmM2 11
#define BrakeM1 4
#define BrakeM2 9
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Запуск приемника
pinMode (PwmM1, OUTPUT);
pinMode (DirM1, OUTPUT);
pinMode (BrakeM1, OUTPUT);
pinMode (PwmM2, OUTPUT);
pinMode (DirM2, OUTPUT);
pinMode (BrakeM2, OUTPUT);
digitalWrite (BrakeM1, LOW);
digitalWrite (BrakeM2, LOW);
}
void loop() {
if (irrecv.decode(&results)) {
if (results.value == 16736925){ //вперед
Serial.println("/|");
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 120);
digitalWrite (DirM2, HIGH);
analogWrite (PwmM2, 120);
delay(500);
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 0);
digitalWrite (DirM2, HIGH);
analogWrite (PwmM2, 0);
}
if (results.value == 16712445){ //назад
Serial.println("|/");
digitalWrite (DirM1, LOW);
analogWrite (PwmM1, 120);
digitalWrite (DirM2, LOW);
analogWrite (PwmM2, 120);
delay(500);
digitalWrite (DirM1, LOW);
analogWrite (PwmM1, 0);
digitalWrite (DirM2, LOW);
analogWrite (PwmM2, 0);
}
if (results.value == 16754775){ //Стоп
Serial.println("STOP");
digitalWrite (DirM1, LOW);
analogWrite (PwmM1, 0);
digitalWrite (DirM2, LOW);
analogWrite (PwmM2, 0);
}
irrecv.resume(); // Получаем следующее значение
}
}
/|
/|
/|
/|
|/
|/
|/
STOP
STOP
STOP
STOP
Angel71 писал(а):как переделали? что значит почти также? что значит не работает? с чего вы взяли, что не работает? и т.д.
потому, что этот код пишите вы. и пока вы не измените своё отношение, не начнёте прислушивать, эта фигня с кодом будет продолжаться.
#include <AFMotor.h>
#include <IRremote.h>
int RECV_PIN = 9;
AF_DCMotor motor_a(1, MOTOR12_64KHZ);
AF_DCMotor motor_b(2, MOTOR12_64KHZ);
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
motor_a.setSpeed(255);
motor_b.setSpeed(255);
}
void loop() {
if (irrecv.decode(&results)){
/*
Serial.println(results.value);
Serial.println(results.value, HEX);
Serial.println("====");
*/
if (results.value == 0xFF18E7) { //вперед
Serial.println("/|");
motor_a.run(FORWARD);
motor_b.run(FORWARD);
delay(100);
motor_a.run(RELEASE);
motor_b.run(RELEASE);
}
if (results.value == 0xFF4AB5) { //назад
Serial.println("|/");
motor_a.run(BACKWARD);
motor_b.run(BACKWARD);
delay(100);
motor_a.run(RELEASE);
motor_b.run(RELEASE);
}
if (results.value == 0xFF10EF) { //налево
Serial.println("<--");
motor_b.run(BACKWARD);
motor_a.run(FORWARD);
delay(100);
motor_a.run(RELEASE);
motor_b.run(RELEASE);
}
if (results.value == 0xFF5AA5) { //направо
Serial.println("-->");
motor_b.run(FORWARD);
motor_a.run(BACKWARD);
delay(100);
motor_a.run(RELEASE);
motor_b.run(RELEASE);
}
irrecv.resume(); // Receive the next value
}
}
#define DirM1 2
#define PwmM1 3
#define DirM2 10
#define PwmM2 11
#define BrakeM1 4
#define BrakeM2 9
void setup()
{
pinMode (PwmM1, OUTPUT);
pinMode (DirM1, OUTPUT);
pinMode (BrakeM1, OUTPUT);
pinMode (PwmM2, OUTPUT);
pinMode (DirM2, OUTPUT);
pinMode (BrakeM2, OUTPUT);
digitalWrite (BrakeM1, LOW);
digitalWrite (BrakeM2, LOW);
}
//
void loop()
{
// вперед
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 200);
digitalWrite (DirM2, HIGH);
analogWrite (PwmM2, 200);
delay (500); // задержка в течении которой крутит
// стоп
analogWrite (PwmM1, 0);
analogWrite (PwmM2, 0);
delay (2000); // вперед время в течении которого не крутит