![]() |
|
|
#391 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Лечить нужно хардверно. Я думаю электролит должен устранить проблему
|
|
|
|
|
|
#392 |
|
Senior Member
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0 ![]() |
|
|
|
|
|
|
#393 |
|
Senior Member
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0 ![]() |
Вот обновленный код, замените в шапке если можно, реализовал плавный старт колес:
Код:
/*
This sketch is for arduino nano/mini pro,
to be used for building 2 motor wheeled robots,
equipped with 2 servo actuators for camera control,
buzzer and lights.
For more details please visit this article:
http://cyber-place.ru/showthread.php?t=1896&page=14
and for detailed instructions on how to build and circuit diagram:
http://www.voltrans.az/?p=1340
Updated:
20July2016 - added soft start for H-bridge motors
15Sep2015 - added charging monitor/LEDs.
12Sep2015 - added voltage reading, start bug fixed (use library Arduino_Vcc-master)
3Sep2015 - added CyberBot3 support.
Author: Elik745i
Site: www.voltrans.az for cyber-place.ru
*/
#include <Servo.h> // Подключаем библиотеку сервоприводов
#include <Vcc.h>
// // Подключаем H-Bridge HG7881
#define HG7881_A_IA 9 // D9 --> Motor A Input A --> MOTOR A +
#define HG7881_A_IB 10 // D10 --> Motor A Input B --> MOTOR A -
#define HG7881_B_IA 11 // D11 --> Motor B Input A --> MOTOR B +
#define HG7881_B_IB 12 // D12 --> Motor B Input B --> MOTOR B -
// functional connections
#define MOTOR_A_PWM HG7881_A_IB // Motor A PWM Speed
#define MOTOR_A_DIR HG7881_A_IA // Motor A Direction
#define MOTOR_B_PWM HG7881_B_IA // Motor B PWM Speed
#define MOTOR_B_DIR HG7881_B_IB // Motor B Direction
#define DIR_DELAY 100 // brief delay for abrupt motor changes
#define tiltServopin 7 //tilt servo attached to pin 7
#define panServopin 8 //pan servo attached to pin 8
#define serialReceive 13 //Serial Receive Message indicator LED
#define moveLed 4 //LED indicating tank movement
#define light 5 //
#define full 2 //Fully charge LED
#define charging 3 //Charging LED
#define softStart 4 //motors soft start - otherwise drowback will affect wifi and canera!!!
#define moveDelay 100
#define moveDelayturn 100
Servo tiltServo;
Servo panServo;
int val1 = 90;
const int servoAngle = 20;
const int minAngle = 0;
const int maxAngle = 180;
int lightState=0;
int i;
const float VccMin = 3.2; // Minimum expected Vcc level, in Volts.
const float VccMax = 4.2; // Maximum expected Vcc level, in Volts.
const float VccCorrection = 1.0/1.0; // Measured Vcc by multimeter divided by reported Vcc
Vcc vcc(VccCorrection);
uint8_t inByte, packid;
const int SKR=12; //speaker pin
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change :
const long interval = 5000; // interval at which to alarm battery level (milliseconds)
void setup()
{
Serial.begin( 57600 );
pinMode(serialReceive,OUTPUT);
pinMode(moveLed,OUTPUT);
pinMode(full,OUTPUT);
pinMode(charging,OUTPUT);
pinMode( MOTOR_A_DIR, OUTPUT );
pinMode( MOTOR_A_PWM, OUTPUT );
digitalWrite( MOTOR_A_DIR, LOW );
digitalWrite( MOTOR_A_PWM, LOW );
pinMode( MOTOR_B_DIR, OUTPUT );
pinMode( MOTOR_B_PWM, OUTPUT );
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
}
void loop()
{
float p = vcc.Read_Perc(VccMin, VccMax);
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
if(p<5){
for(i=1000;i>50;i--){
tone(SKR, i, 10);
}
}
}
if (Serial.available()) //Еесли что то пришло
{
digitalWrite(serialReceive,HIGH);
//tone(SKR, 1440, 200);
inByte = Serial.read();
if ( packid == 16 )
{
//Serial.println(inByte); //for debug, feedback will not work!
packid=0;
switch (inByte) // Смотрим какая команда пришла
{
case 'x': // Остоновка робота
robot_stop();
break;
case 'W': // Движение вперед
robot_go();
break;
case 'D': // Поворот вправо
robot_right();
break;
case 'A': // Повопорт влево
robot_left();
break;
case 'S': // Движение назад
robot_back();
break;
case 'J': // Серво поднимается
if(val1<maxAngle){
tiltServo.attach(tiltServopin); // attaches the servo on pin 2
for(int i=0;i<servoAngle;i++){
tiltServo.write(val1+i); // sets the servo position according to the scaled value
delay(servoAngle);
}
val1=val1+servoAngle;
tiltServo.detach(); // detaches the servo on pin 2
}
break;
case 'U': // Серво опускается
if(val1>minAngle){
tiltServo.attach(tiltServopin); // attaches the servo on pin 2
for(int i=0;i<servoAngle;i++){
tiltServo.write(val1-i); // sets the servo position according to the scaled value
delay(servoAngle);
}
val1=val1-servoAngle;
tiltServo.detach(); // detaches the servo on pin 2
}
break;
case 'K': // Серво поворачивается влево
panServo.attach(panServopin); // attaches the servo on pin 2
panServo.write(180); // sets the servo position according to the scaled value
delay(200);
panServo.detach(); // detaches the servo on pin 2
break;
case 'H': // Серво поворачивается вправо
panServo.attach(panServopin); // attaches the servo on pin 2
panServo.write(0); // sets the servo position according to the scaled value
delay(200);
panServo.detach(); // detaches the servo on pin 2
break;
case 'B': // Бластер
break;
case 'C': // Клаксон
for(i=100;i<5000;i++){
tone(SKR, i, 50);
}
for(int i=5000;i>100;i--){
tone(SKR, i, 10);
}
break;
case ']': // запрос состояния аналоговых датчиков
sendAnalog();
break;
case 'V': // Включить/Выключить фары
if (lightState==0){
digitalWrite(light,HIGH);
lightState=1;
}else{
digitalWrite(light,LOW);
lightState=0;
}
break;
}
}else packet_id(inByte);
digitalWrite(serialReceive,LOW);
}
}
void robot_stop()
{
digitalWrite( MOTOR_A_DIR, LOW );
digitalWrite( MOTOR_A_PWM, LOW );
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
}
void robot_go(){
digitalWrite( MOTOR_A_DIR, LOW ); // direction = forward
digitalWrite( MOTOR_B_DIR, LOW ); // direction = forward
for(byte i=0;i<=150;i++){
analogWrite( MOTOR_A_PWM, i );
analogWrite( MOTOR_B_PWM, i ); // PWM speed = slow
delay(softStart);
}
delay(moveDelay);
}
void robot_back(){
digitalWrite( MOTOR_A_DIR, HIGH ); // direction = forward
digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward
for(byte i=150;i>=50;i--){
analogWrite( MOTOR_A_PWM, i );
analogWrite( MOTOR_B_PWM, i ); // PWM speed = slow
delay(softStart);
}
delay(moveDelay);
}
void robot_left(){
digitalWrite( MOTOR_A_DIR, HIGH ); // direction = forward
digitalWrite( MOTOR_B_DIR, LOW ); // direction = forward
for(byte i=0;i<=150;i++){
analogWrite( MOTOR_A_PWM, 150-i );
analogWrite( MOTOR_B_PWM, i ); // PWM speed = fast
delay(softStart-3);
}
delay(moveDelayturn);
}
void robot_right(){
digitalWrite( MOTOR_A_DIR, LOW ); // direction = forward
digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward
for(byte i=0;i<=150;i++){
analogWrite( MOTOR_A_PWM, i );
analogWrite( MOTOR_B_PWM, 150-i ); // PWM speed = slow
delay(softStart-3);
}
delay(moveDelayturn);
}
void sendAnalog(){
float v = vcc.Read_Volts();
//float p = vcc.Read_Perc(VccMin, VccMax);
float k = analogRead(A0)*0.0047; //measure battery voltage on A0 while charging
if (k>4.15){
digitalWrite(full,HIGH);
digitalWrite(charging,LOW);
}else{
digitalWrite(full,LOW);
digitalWrite(charging,HIGH);
}
Serial.write("{\"dat1\":\"");
//Serial.print(v);
Serial.print(k); //charge voltage shown on the left
//Serial.print(" V");
Serial.write("\",\"dat2\":\"");
Serial.print(v); //Actual system voltage on the right of the screen
//Serial.print(f);
Serial.write("\"}");
}
void packet_id(uint8_t inbyte) //проверяем идентификатор пакета "cm="
{
switch (inbyte)
{
case 'c':
packid=2;
break;
case 'm':
packid*=2;
//packid=packid<<1;
break;
case '=':
packid*=4;
//packid=packid<<2;
break;
default:
packid=0;
}
}
|
|
|
|
|
|
#394 |
|
Member
Регистрация: 01.03.2016
Сообщений: 38
Вес репутации: 0 ![]() |
Здравствуйте.
Пытаюсь собрать робота. Изменил скетч под L298 драйвер. Установил модуль "usb драйверы". Суть проблемы: когда на Arduino мониторе посылаю cm=W то моторы крутятся, если на веб странице нажимаю- ничего. Только диоды на Nano горят. Через терминал смотрел,транзитом: роутор- нано-usb ttl. модуль посылает тоже самое почти: cm=W или если отпустить кнопку cm=Wcm=x Нужно ли заблокировать программный сброс, вроде не перезагружается? Скорости менял и на 9600 и на 57600 и в скетче и в модуле(в модуле кстати не меняет). Последний раз редактировалось lsar; 19.09.2016 в 05:20. |
|
|
|
|
|
#395 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
какая у Вас ардуина? Какой на ней USB мост?
|
|
|
|
|
|
#396 |
|
Member
Регистрация: 01.03.2016
Сообщений: 38
Вес репутации: 0 ![]() |
nano китай СР341 мост.
через FTDI драйвер не пошел, установил "Драйвера USB Serial". если ttl подцепить к nano то в терминале видно что роутер отправляет. только вот скорость 57600 в скетче поставить или 9600, разницы нет все равно терминал понимает только на скорости 9600. Попробую CyberBot-2 и в скетче убрать идентификацию. |
|
|
|
|
|
#397 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
с CH341 работать не будет
|
|
|
|
|
|
#398 |
|
Member
Регистрация: 01.03.2016
Сообщений: 38
Вес репутации: 0 ![]() |
Работает!!! отлично работает. только надо было соединить вывод RESET и GND конденсатором 10 мкФ.
|
|
|
|
|
|
#399 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
И уменьшить скорость порта до 9600
|
|
|
|
|
|
#400 |
|
Member
Регистрация: 01.03.2016
Сообщений: 38
Вес репутации: 0 ![]() |
Да. Правда, скорость через интерфейс все равно не регулировался у меня.
|
|
|
|
![]() |
| Здесь присутствуют: 5 (пользователей: 0 , гостей: 5) | |
|
|