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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2015, 22:33   #191
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
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'у: Можно ли как-то считать то, что приходит в порт Arduino? Например отправлять обратно в TX и выводить на экран WEB-интерфейса?
Можно конечно. Самый простой вариант в Вашем скетче это внести изменения в следующей функции
Цитата:
void sendAnalog(){

int k = analogRead(A0);
int f = analogRead(A1);
Serial.write("{\"dat1\":\"");
Serial.print(k);
Serial.write("\",\"dat2\":\"");
Serial.print(f);
Serial.write("\"}");
}
Цитата:
Aruino LCD дисплей, например HD44780 и дублировать туда приходящие через порт команды, и как это правильно реализовать в скетче?
А зачем? Я же Вам написал в чем у Вас загвоздка, Вы не там ищите проблему, а слушать не хотите. Нарисуйте схему, мне так проще будет найти ошибку
Admin вне форума   Ответить с цитированием
Старый 25.10.2015, 20:45   #192
favi
Junior Member
 
Регистрация: 16.04.2014
Сообщений: 19
Вес репутации: 0
favi is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

favi вне форума   Ответить с цитированием
Старый 25.10.2015, 23:00   #193
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
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"

Несколько замечаний по схеме?
1-Питание моторшилда от ардуино, откуда там 5в?
2-Я вижу у Вас стабилизатор линейный, на какой максимальный ток он рассчитан?
Не греется? Просадки при включении движков не наблюдаются?
3-Так как китайцы экономят на емкостях конденсаторов, то я бы добавил пару электролитов 4700мкФ и 1000мкФ. 4700 повесил бы на 11в на входе моторшилда, а 1000 параллельно хабу или роутеру
Admin вне форума   Ответить с цитированием
Старый 26.10.2015, 13:29   #194
tanir196
Junior Member
 
Регистрация: 03.10.2014
Адрес: Балашиха
Сообщений: 12
Вес репутации: 0
tanir196 is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

Скажите плиз. Для чего нужно 5 вольт из стабилизатора подключать к 5 вольтам Ардуино . Вроде он (ардуино) уже запитан? Или это для стабилизации , но какой?
tanir196 вне форума   Ответить с цитированием
Старый 27.10.2015, 17:47   #195
elik745i
Senior Member
 
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0
elik745i is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

Цитата:
Сообщение от favi Посмотреть сообщение
Обновил код elik745i

Действительно стало лучше. Во всяком случае повысилась отзывчивость робота. Раньше робот при нажатии на кнопки A и D кратковременно включал моторы, а при нажатии на кнопки W и S примерно на 1.5 - 2 секунды.

С обновлением скетча, робот стал одинакого реагировать на все кнопки WSAD включая моторы кратковременно. Более того увеличился интервал зависания. Один раз у меня получилось 300 раз кратковременно нажать на кнопку A прежде чем робот завис.

А вот с подключением камеры все осталось по прежнему. Стоит дать одну команду и робот зависает. Видеопоток останавливается и моторы начинают вращаться бесконечно. При этом нажатие на кнопки заставляет моргать светодиод RX.

Вопрос Admin'у: Можно ли как-то считать то, что приходит в порт Arduino? Например отправлять обратно в TX и выводить на экран WEB-интерфейса? Или подключить к Aruino LCD дисплей, например HD44780 и дублировать туда приходящие через порт команды, и как это правильно реализовать в скетче?
я так и делал, когда дебаггил...
используй вот этот:

https://youtu.be/HcA-f-SeI6g


Код:
/* 
Sketch based on Cyberlib library from 
cyber-place.ru, however due to some hangups 
desition were taken to get rid of this library 
and use arduino standard libraries 
and Adafrruit libraries. LCD module used 
just for debuging and is optional, however 
many useful information can be hooked to it.

Wiring:
1.8''LCD is just insertewd to MEGA pins 8 -> AREF
2 servos (yaw and pitch) hooked to digital pins 2 
and 3 (configurable, just like LCD pins)
Servos powered by 5 volt regulator from external 
power supply (this is important not to fry arduino 
or your modem)
For video demonstration please visit my youtube:
http://youtu.be/HcA-f-SeI6g
Any references/updates please visit my blog: 
www.voltrans.az
*/

//#include <CyberLib.h>  // Подключаем библиотеку  
#include <Servo.h> // Подключаем библиотеку сервоприводов  
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>

Servo myservo1;  
Servo myservo2;  

//long previousMillis; // Нужно для таймера  
//uint8_t LedStep = 0; // Счетчик 
int val1 = 0;
int val2 = 0;
//int servoSpeed = 20;
int servoAngle = 20;
int minAngle = 0;
int maxAngle = 180;


//int i;
int q=2;
int w=114;

boolean light_stat; 
uint8_t inByte;  
uint8_t speed=255; //максимальная скорость по умолчанию 

//#define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D11_Out; D12_Out;}   
#define TFT_CS     13
#define TFT_RST    12  // you can also connect this to the Arduino reset
                      // in which case, set this #define pin to 0!
#define TFT_DC     11
#define TFT_SCLK 9   // set these to be whatever pins you like!
#define TFT_MOSI 10   // set these to be whatever pins you like!
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
const int ledPin =  8; 
const int irlight = 46;
const int blastLed = 47;
int backlit = 100;     //backlit


void setup()    
{ 

  noTone(49);
  pinMode(ledPin, OUTPUT);
  pinMode(irlight, OUTPUT);
  pinMode(blastLed, OUTPUT);
  analogWrite(ledPin, backlit);  
  tft.initR(INITR_BLACKTAB);   // ST7735-Chip initialisieren  
  tft.fillScreen(ST7735_BLACK);
  tft.drawRoundRect(0,0,128,160,6,ST7735_WHITE);
  tft.drawRect(0,100,128,12,ST7735_WHITE);
  tft.drawTriangle(64, 5, 43, 35, 86, 35, ST7735_WHITE);
  tft.drawTriangle(64, 95, 43, 65, 86, 65, ST7735_WHITE);
  tft.drawTriangle(5, 50, 40, 35, 40, 65, ST7735_WHITE);
  tft.drawTriangle(123, 50, 89, 35, 89, 65, ST7735_WHITE);
  
  
  tft.setTextColor(ST7735_WHITE);
  tft.setCursor(46, 42);
  tft.print("WEBCAM");
  tft.setCursor(46, 52);
  tft.print("CONTROL");
  
  tft.setCursor(10, 102);
  tft.setTextColor(ST7735_WHITE);
  tft.setTextWrap(true);
  tft.print("Serial Monitor:");
  myservo1.attach(24); // Подключение сервоприводов к порту  
  myservo2.attach(26); // Подключение сервоприводов к порту  
  myservo1.write(val1);
  myservo2.write(val2);
  delay(500);
  myservo1.detach();
  myservo2.detach();
  init;  // Инициализация портов     
  horn(); //звуковое оповещение готовности робота   
  Serial.begin(57600);// Инициализация порта для связи с роутером    
  //wdt_enable (WDTO_500MS);
  tft.setCursor(72, 90);
  tft.setTextColor(ST7735_RED);
  tft.print("BLAST OFF");
  tft.setCursor(8, 90);
  tft.setTextColor(ST7735_RED);
  tft.print("IR OFF");
}    

void loop()    
{   
  /*
    unsigned long currentMillis = millis(); // Обновление таймера  
      if (LedStep == 0 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек.   
      previousMillis = currentMillis; // обновление таймер  
      LedStep = 1; // Счетчик шагов  
    }  

    if (LedStep == 1 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек.  
      previousMillis = currentMillis; // обновление таймер  
      LedStep = 2; // Счетчик шагов  
    }  

    if (LedStep == 2 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек.  
      LedStep = 0; // Счетчик шагов  
    } 
*/
    
   if (Serial.available()) //Еесли что то пришло  
        { 
    
    byte inByte = Serial.read();
    tft.setTextColor(ST7735_WHITE);
    tft.setCursor(q, w);
    tft.print(inByte);
    tft.print(", ");
    q=q+24;
    if(q>=120){
      w=w+10;
      q=2;
    }
    if(w>=150){
     tft.fillRect(1,111,126,46,ST7735_BLACK);
    q=2;
   w=114;
    }
    
    switch (inByte)  // Смотрим какая команда пришла  
    {      
       case 'U': // Серво поднимается
                       if(val1<maxAngle){
                         up();
                         myservo1.attach(24);               // attaches the servo on pin 2
                         for(int i=0;i<servoAngle;i++){
                         myservo1.write(val1+i);           // sets the servo position according to the scaled value 
                         delay(servoAngle);
                         }
                         val1=val1+servoAngle;
                         myservo1.detach();                // detaches the servo on pin 2
                         }
         //up();
         // myservo1.write(i -= 10);      
        break;   
          
        case 'J': // Серво опускается
                        if(val1>minAngle){
                         dn();
                         myservo1.attach(24);               // attaches the servo on pin 2
                         for(int i=0;i<servoAngle;i++){
                         myservo1.write(val1-i);           // sets the servo position according to the scaled value 
                         delay(servoAngle);
                         }
                         val1=val1-servoAngle;
                         myservo1.detach();                // detaches the servo on pin 2
                         }
        //dn();
          //myservo1.write(i += 10);       
        break; 
               
        case 'H': // Серво поворачивается влево
                        if(val2<maxAngle){
                         lt();
                         myservo2.attach(26);               // attaches the servo on pin 2
                         for(int i=0;i<servoAngle;i++){
                         myservo2.write(val2+i);           // sets the servo position according to the scaled value 
                         delay(servoAngle);
                         }
                         val2=val2+servoAngle;
                         myservo2.detach();                // detaches the servo on pin 2
                         }
        //lt();
          //myservo2.write(i += 10);      
        break;   
          
        case 'K': // Серво поворачивается вправо 
                        if(val2>minAngle){
                         rt();
                         myservo2.attach(26);               // attaches the servo on pin 2
                         for(int i=0;i<servoAngle;i++){
                         myservo2.write(val2-i);           // sets the servo position according to the scaled value 
                         delay(servoAngle);
                         }
                         val2=val2-servoAngle;
                         myservo2.detach();                // detaches the servo on pin 2
                         }
        //rt();
          //myservo2.write(i -= 10);
        break;    
          
         case 'B': //  Бластер  
         if(light_stat) 
        { 
         digitalWrite(blastLed, LOW); 
         bIRoff();
         light_stat=false; 
        } else  
              { 
               digitalWrite(blastLed, HIGH);
              bIRon(); 
               light_stat=true; 
              } 
        break;  
         
        case 'C': // Клаксон  
         horn();  
        break;  
          
        case 'V': // Включить/Выключить фары  
        if(light_stat) 
        { 
         digitalWrite(irlight, LOW); 
         IRoff();
         light_stat=false; 
        } else  
              { 
               digitalWrite(irlight, HIGH);
              IRon(); 
               light_stat=true; 
              } 
        break;  
    }   
     if(inByte>47 && inByte<58) speed=(inByte-47)*25+5;//принимает команду и преобразуем в скорость          
  }   
// wdt_reset();  
} 
 void up(){
   tft.fillTriangle(64, 6, 44, 34, 85, 34, ST7735_GREEN);
   tft.fillTriangle(64, 6, 44, 34, 85, 34, ST7735_BLACK);
 }
 void dn(){
   tft.fillTriangle(64, 92, 46, 67, 83, 67, ST7735_GREEN);
   tft.fillTriangle(64, 92, 46, 67, 83, 67, ST7735_BLACK);  
 }
void lt(void){
      tft.fillTriangle(6, 50, 39, 36, 39, 64, ST7735_GREEN);
      tft.fillTriangle(6, 50, 39, 36, 39, 64, ST7735_BLACK);
      }
      
void rt(void){
      tft.fillTriangle(122, 50, 90, 36, 90, 64, ST7735_GREEN);
      tft.fillTriangle(122, 50, 90, 36, 90, 64, ST7735_BLACK);    
      }

void horn() 
{ 
  noTone(49);
  tone(49, 440, 150);	
  delay(250);
  tone(49, 440, 700);
} 

void bIRon(){
  tft.setCursor(72, 90);
  tft.setTextColor(ST7735_BLACK);
  tft.print("BLAST OFF");
  tft.setCursor(72, 90);
  tft.setTextColor(ST7735_GREEN);
  tft.print("BLAST ON");  
}

void bIRoff(){
  tft.setCursor(72, 90);
  tft.setTextColor(ST7735_BLACK);
  tft.print("BLAST ON");
  tft.setCursor(72, 90);
  tft.setTextColor(ST7735_RED);
  tft.print("BLAST OFF");
  
}

void IRon(){
  tft.setCursor(8, 90);
  tft.setTextColor(ST7735_BLACK);
  tft.print("IR OFF");
  tft.setCursor(8, 90);
  tft.setTextColor(ST7735_GREEN);
  tft.print("IR ON");  
}

void IRoff(){
  tft.setCursor(8, 90);
  tft.setTextColor(ST7735_BLACK);
  tft.print("IR ON");
  tft.setCursor(8, 90);
  tft.setTextColor(ST7735_RED);
  tft.print("IR OFF");
  
}
но это только первоначальный скетч, то есть если будете использовать совместите с моим последним скетчем, ну сами разберетесь....

Последний раз редактировалось elik745i; 27.10.2015 в 18:01.
elik745i вне форума   Ответить с цитированием
Старый 27.10.2015, 17:57   #196
elik745i
Senior Member
 
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0
elik745i is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

По поводу схемы тоже что то она мне не нравится, лучше возьмите кусок текстолита макетного и ее используйте, как распределительную, питение моторов, ардуино и вайфая надо разделить отдельными коденсаторами, что бы посадки менее влияли на остальное, тогда и зависания пропадут, и вообще надо поконкретнее чертить схемку, ато эта как будто настряпана на коленках, ведь потом кто то захочет повторить ваш опыт...
есть очень хороший способ чертить схемы - карандаш и бумага, далее сфотькайте и уже сюда, если сложно работать в пеинте...
elik745i вне форума   Ответить с цитированием
Старый 27.10.2015, 23:08   #197
Павел_Сергеевич
Junior Member
 
Регистрация: 23.09.2015
Сообщений: 26
Вес репутации: 0
Павел_Сергеевич is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

нашел баг. камера с роутером работают если подключаться через ноут, но вот с телефона samsung кнопки появляются, загрузка идет... и виснит перед завершением.
да, возможно ли управление ботом через интернет, допустим из другого города. если да то как?
и можно ли добавить скетч под платформы авто типа, для серво-машинки для поворота и для мотора который будет поворачивать руливую тягу.

Последний раз редактировалось Павел_Сергеевич; 27.10.2015 в 23:15.
Павел_Сергеевич вне форума   Ответить с цитированием
Старый 27.10.2015, 23:16   #198
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
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"

Цитата:
нашел баг. камера с роутером работают если подключаться через ноут,
Не совсем понятно

Цитата:
возможно ли управление ботом через интернет, допустим из другого города. если да то как?
Возможно, если у тебя IP статический или белый
Admin вне форума   Ответить с цитированием
Старый 28.10.2015, 00:22   #199
Павел_Сергеевич
Junior Member
 
Регистрация: 23.09.2015
Сообщений: 26
Вес репутации: 0
Павел_Сергеевич is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-3"

подключил камеру к модифицированному ротеру (wrt) подключаюсь к роутеру через wifi с телефона самсунг, в стандартном браузере забиваю ip попадаю в панель управления wrt активирую модуль робот шпион, появляются кнопки на ~5-20% шкалы загрузки, доходит шкала до ~80-95% и останавливается. видео нет. с ноута выхожу на тот же ip активирую модуль робот шпион, появляются кнопки и виликолепное изображение с камеры.

а как сделать ip статичным или белым? хотя бы ссылку на эту тему.
Павел_Сергеевич вне форума   Ответить с цитированием
Старый 28.10.2015, 00:48   #200
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
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"

IP-адреса бывают: "белыми" или "серыми".

Белый - это уникальный IP в интернете.
Серый - это внутренний IP локальной сети, напрямую доступный только внутри этой сети. Во внешний мир серые ходят через прокси или нат.

Аналогию белого и серого IP в интернете можно представить по телефонии:
Белый - это нормальный телефонный номер, на который можно позвонить откуда угодно.
Серый - это номер офисной АТС, на который извне офиса напрямую не дозвонишься, а только через всякие хитрости типа роботов или по просьбе "переключите на такой-то номер", что не всегда удобно, зато внутренних номеров можно сделать внутри офиса хоть тыщщу, как и серых IP внутри локальной сети.

Еще IP-адреса бывают "статичными" или "динамическими".

Статичный - это когда за вашим компьютером привязан конкретный IP-адрес.
Динамический - это когда при включении компьютер получает произвольный IP из какого-то диапазона, что сильно экономит дефицитное IP-пространство для провайдера, но порой жутко неудобно для абонента.

По аналогии с телефонией: представьте, если бы каждый день Ваш сотовый телефон получал новый произвольный, пусть даже и федеральный номер. Исходящие звонки будут как-бы без проблем, правда на том конце провода постоянно будут спрашивать "а кто это?". А вот со входящими будут явные проблемы, т.к. кто бы знал, на какой номер Вам прямо сейчас позвонить

Если у тебя белый, динамический IP , то модуль "DDNS" тебе поможет
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 11 (пользователей: 0 , гостей: 11)
 

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

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

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


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


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