Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > CyberWrt

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.07.2016, 11:08   #391
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Модуль "CyberBot-3"

Лечить нужно хардверно. Я думаю электролит должен устранить проблему
Admin вне форума   Ответить с цитированием
Старый 23.07.2016, 22:18   #392
elik745i
Senior Member
 
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0
elik745i is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

Цитата:
Сообщение от Admin Посмотреть сообщение
Лечить нужно хардверно. Я думаю электролит должен устранить проблему
электролит стоит, думаю проблема в блоке защиты литийионных батарей, они сбрасывают питание при скачках тока...буду копать дальше....
elik745i вне форума   Ответить с цитированием
Старый 23.07.2016, 22:23   #393
elik745i
Senior Member
 
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0
elik745i is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

Вот обновленный код, замените в шапке если можно, реализовал плавный старт колес:

Код:
/*
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;   
    } 
}
elik745i вне форума   Ответить с цитированием
Старый 18.09.2016, 20:58   #394
lsar
Member
 
Регистрация: 01.03.2016
Сообщений: 38
Вес репутации: 0
lsar is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

Здравствуйте.
Пытаюсь собрать робота. Изменил скетч под L298 драйвер. Установил модуль "usb драйверы".
Суть проблемы: когда на Arduino мониторе посылаю cm=W то моторы крутятся, если на веб странице нажимаю- ничего. Только диоды на Nano горят. Через терминал смотрел,транзитом: роутор- нано-usb ttl.
модуль посылает тоже самое почти: cm=W или если отпустить кнопку cm=Wcm=x
Нужно ли заблокировать программный сброс, вроде не перезагружается?
Скорости менял и на 9600 и на 57600 и в скетче и в модуле(в модуле кстати не меняет).

Последний раз редактировалось lsar; 19.09.2016 в 05:20.
lsar вне форума   Ответить с цитированием
Старый 19.09.2016, 09:48   #395
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Модуль "CyberBot-3"

какая у Вас ардуина? Какой на ней USB мост?
Admin вне форума   Ответить с цитированием
Старый 19.09.2016, 11:30   #396
lsar
Member
 
Регистрация: 01.03.2016
Сообщений: 38
Вес репутации: 0
lsar is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

nano китай СР341 мост.
через FTDI драйвер не пошел, установил "Драйвера USB Serial".
если ttl подцепить к nano то в терминале видно что роутер отправляет.
только вот скорость 57600 в скетче поставить или 9600, разницы нет все равно терминал понимает только на скорости 9600. Попробую CyberBot-2 и в скетче убрать идентификацию.
lsar вне форума   Ответить с цитированием
Старый 19.09.2016, 20:31   #397
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Модуль "CyberBot-3"

с CH341 работать не будет
Admin вне форума   Ответить с цитированием
Старый 19.09.2016, 20:59   #398
lsar
Member
 
Регистрация: 01.03.2016
Сообщений: 38
Вес репутации: 0
lsar is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

Работает!!! отлично работает. только надо было соединить вывод RESET и GND конденсатором 10 мкФ.
lsar вне форума   Ответить с цитированием
Старый 19.09.2016, 23:18   #399
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Модуль "CyberBot-3"

И уменьшить скорость порта до 9600
Admin вне форума   Ответить с цитированием
Старый 20.09.2016, 05:06   #400
lsar
Member
 
Регистрация: 01.03.2016
Сообщений: 38
Вес репутации: 0
lsar is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

Да. Правда, скорость через интерфейс все равно не регулировался у меня.
lsar вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 8 (пользователей: 0 , гостей: 8)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 21:39. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика