Моя вариация на гусеничную тему

LoneDog
Offline
Зарегистрирован: 22.10.2013

Вот такая получилась радиоуправляемая платформа. Умеет ездить вперед назад поворачивать во все стороны, включать освещение по команде. Каждый двигатель (левый и правый) имеет 16 скоростей вперед и 16 назад, но как показала практика это абсолютно лишнее, хватило бы и по 3 скорости.

В планах установить на платформу пусковую установку для ракет, типа этих

пока есть вопросы с поджогом фитиля. Да и вообще конструкция пусковой установки пока на этапе проектирования, но хочется успеть к новому году.

Радиоуправление реализовано на модулях nrf24l01 и с этим есть к знатокам вопросы, у меня не получилось достичь радиуса приема более 5 метров может, что не так делаю? И в приделах этого радиусе бывают пропуски команд .

Вроде все советы почитал и учел в цепи питания конденсаторы, питание от отдельного стабилизатора на 3.3V L78L33 да в общем то и все...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

незнаю. я тестировал на воде метров 80 была дальность потом начинались сбои

LoneDog
Offline
Зарегистрирован: 22.10.2013

jeka_tm пишет:

незнаю. я тестировал на воде метров 80 была дальность потом начинались сбои

Смотрел видео с Вашей лодкой. Вот и решил что в моей конструкции ошибка в программной или (и) аппаратной части. 

Вот скетчи для пульта:

#include <SPI.h>
#include <nrf24l01p.h>

enum
{
  SPI_SS_PIN = 10,
  NRF_CE_PIN = 9,
  NRF_CHANNEL = 120,
  NRF_POWER_UP_DELAY = 2,
  NRF_PAYLOAD_LENGTH = 5
};
// массив комманд отсылаемых устройству
uint8_t command[6];
// библиотека LCD
#include <LiquidCrystal.h>
// пины LCS
LiquidCrystal lcd(6, 4, 16, 2, 17, 18);
// пины кнопочек
int But1Pin = 3;
int But2Pin = 5;
int But3Pin = 7;
// состояния кнопочек при старте считаем что отжаты
boolean LastBut1 = LOW;
boolean LastBut2 = LOW;
boolean LastBut3 = LOW;

unsigned long curtime = 0;
int timetorepeat = 280;

int SpeedLeft = 0; // Скорость левого двигателя
int SpeedRight = 0; // Скорость правого двигателя
int LightMode = 0; // знаение режима света
int Add_button = 0; // Дополнительная кнопка 
boolean Stoped = LOW; // флаг полной остановки моторов




// пины патенциометров
const int pin_A = 14; // pin 7
const int pin_B = 15; // pin 8



void setup()
{
  //сконфигурим наш приемопередатчик
  //  Mirf.spi = &MirfHardwareSpi;
  //  Mirf.init();
  //  Mirf.setTADDR((byte *)"app1"); //задаем адрес передатчика - текущего устройства?
  //  Mirf.setRADDR((byte *)"app2"); //Здесь задаём адрес приемника
  //  Mirf.payload = MAX_BUFF; //Здесь задаём буфер
  //  Mirf.channel = 10;
  //Это канал приёма-передачи - должен
  //быть одинаковым у устройств.

  //Mirf.config();
  SPI.begin();

  pinMode(SPI_SS_PIN, OUTPUT);
  digitalWrite(SPI_SS_PIN, HIGH);

  pinMode(NRF_CE_PIN, OUTPUT);
  digitalWrite(NRF_CE_PIN, HIGH);

  uint8_t address[5] = { 0xE2, 0xE4, 0x23, 0xE4, 0x02 };
  nrf_init(address);


  // далее займемся LCD
  lcd.begin(20, 4);
  // и кнопочками
  pinMode(But1Pin, INPUT);
  pinMode(But2Pin, INPUT);
  pinMode(But3Pin, INPUT);
  
  SpeedRight = map(analogRead(pin_A), 0, 1023, -16, 16);
  SpeedLeft = map(analogRead(pin_B), 0, 1023, -16, 16);
  // формируем массив - комманду
  command[0] = int(Stoped);
  command[1] = LightMode;
  command[2] = SpeedRight;
  command[3] = SpeedLeft;
  command[4] = Add_button;
  command[5] = int(Stoped)+LightMode+SpeedRight+SpeedLeft+Add_button;

  // начало отправки
  static uint8_t payload[NRF_PAYLOAD_LENGTH];
 // strcpy((char*)payload, command);
    nrf24l01p_write_tx_payload(command, sizeof(command));

  digitalWrite(NRF_CE_PIN, HIGH);
  delay(1);
  digitalWrite(NRF_CE_PIN, LOW);

  do {} while (!(nrf24l01p_get_irq_flags() & (1 << NRF24L01P_IRQ_TX_DS)));
  nrf24l01p_clear_irq_flag(NRF24L01P_IRQ_TX_DS);
  // конец отправки
  curtime = millis();
}

void loop()
{
  // Режим освещения
  if (digitalRead(But1Pin) == HIGH && LastBut1 == LOW)
  {
    LightMode = LightMode + 1;
    if (LightMode >= 5)
    {
      LightMode = 0;
    }
    LastBut1 = HIGH;
  }
  else
  {
    LastBut1 = digitalRead(But1Pin);
  }
  // Дополнительная кнопка пульта
    if (digitalRead(But3Pin) == HIGH && LastBut3 == LOW)
  {
    Add_button = Add_button + 1;
    if (Add_button >= 10)
    {
      Add_button = 0;
    }
    LastBut3 = HIGH;
  }
  else
  {
    LastBut3 = digitalRead(But3Pin);
  }
  // кнопка экстренной остановки
  if (digitalRead(But2Pin) == HIGH && LastBut2 == LOW)
  {
    Stoped = !Stoped;
    LastBut2 = HIGH;
  }
  else
  {
    LastBut2 = digitalRead(But2Pin);
  }
  SpeedRight = map(analogRead(pin_A), 0, 1012, -16, 16);
  SpeedLeft = map(analogRead(pin_B), 0, 1023, -16, 16);
  lcd.setCursor(1, 1);
  lcd.print(SpeedLeft);
  lcd.print(" ");

  lcd.setCursor(17, 1);
  lcd.print(SpeedRight);
  lcd.print(" ");

  lcd.setCursor(0, 0);
  lcd.print("Left");
  lcd.setCursor(15, 0);
  lcd.print("Right");

  lcd.setCursor(5, 2);
  lcd.print("Light mode: ");
  lcd.print(LightMode);

  if (Stoped)
  {
    lcd.setCursor(6, 0);
    lcd.print("STOPED!");
  }
  else
  {
    lcd.setCursor(6, 0);
    lcd.print("       ");
  }
//lcd.setCursor(5, 3);
//    lcd.print(command[0]);
//    lcd.print(command[1]);
//    lcd.print(command[2]);
//    lcd.print(command[3]);
//    lcd.print(command[4]);
//    lcd.print(" ");
 if ( command[0] != int(Stoped) or command[1] != LightMode or command[2] != SpeedRight or command[3] != SpeedLeft or command[4] != Add_button)
  {
    command[0] = int(Stoped);
    command[1] = LightMode;
    command[2] = SpeedRight;
    command[3] = SpeedLeft;
    command[4] = Add_button;
    command[5] = int(Stoped)+LightMode+SpeedRight+SpeedLeft+Add_button;
    // начало отправки
    //static uint8_t payload[NRF_PAYLOAD_LENGTH];
    //strcpy((char*)payload, command);
    nrf24l01p_write_tx_payload(command, sizeof(command));

    digitalWrite(NRF_CE_PIN, HIGH);
    delay(1);
    digitalWrite(NRF_CE_PIN, LOW);

    do {} while (!(nrf24l01p_get_irq_flags() & (1 << NRF24L01P_IRQ_TX_DS)));
    nrf24l01p_clear_irq_flag(NRF24L01P_IRQ_TX_DS);
    // конец отправки
  }
  else if (curtime + timetorepeat <= millis())
  {
    
    // начало отправки
    //static uint8_t payload[NRF_PAYLOAD_LENGTH];
    //strcpy((char*)payload, command);
    nrf24l01p_write_tx_payload(command, sizeof(command));

    digitalWrite(NRF_CE_PIN, HIGH);
    delay(1);
    digitalWrite(NRF_CE_PIN, LOW);

    do {} while (!(nrf24l01p_get_irq_flags() & (1 << NRF24L01P_IRQ_TX_DS)));
    nrf24l01p_clear_irq_flag(NRF24L01P_IRQ_TX_DS);
    // конец отправки
    curtime = millis();
    //loopTime = currentTime;
  }
}

void nrf_init(uint8_t *address)
{
  delay(200);

  nrf24l01p_get_clear_irq_flags();
  nrf24l01p_close_pipe(NRF24L01P_ALL);
  nrf24l01p_open_pipe(NRF24L01P_TX, false);
  nrf24l01p_set_rx_payload_width(NRF24L01P_PIPE0, NRF_PAYLOAD_LENGTH);
  nrf24l01p_set_crc_mode(NRF24L01P_CRC_16BIT);
  nrf24l01p_set_address_width(NRF24L01P_AW_5BYTES);
  nrf24l01p_set_address(NRF24L01P_TX, address);
  nrf24l01p_set_operation_mode(NRF24L01P_PTX);
  nrf24l01p_set_rf_channel(NRF_CHANNEL);

  nrf24l01p_set_power_mode(NRF24L01P_PWR_UP);
  delay(NRF_POWER_UP_DELAY);
}

void nrf24l01p_spi_ss(nrf24l01p_spi_ss_level_t level)
{
  digitalWrite(SPI_SS_PIN, (level == NRF24L01P_SPI_SS_LOW ? LOW : HIGH));
}

uint8_t nrf24l01p_spi_rw(uint8_t value)
{
  return SPI.transfer(value);
}

и для танчика:

#include <nrf24l01p.h>
#include <SPI.h>

int REG1 = 8; //- пин, управляющий защёлкой сдвигового регистра (SS в терминах SPI)

int Moto1L = 3; //-если 1 то крутит мотор влево
int Moto1R = 2; //-если 1 то крутит мотор вправо
int Moto1Cont = 9; //- пин с ШИМ управляющий скоростью первого двигателя

int Moto2L = 7; //-в нашем случае это поворотники левый
int Moto2R = 4; //-и правый ну или наоборот как подключил
int Moto2Cont = 10; //- пин с ШИМ управляющий скоростью второго двигателя

int SpeedLeft = 0;
int SpeedRight = 0;
int LightMode = 0;
int Stoped = 0;
byte LightBin = B00000000;

unsigned long curtime = 0;
int dotime = 300;

enum
{
  SPI_SS_PIN = 14,
  NRF_CE_PIN = 15,

  NRF_CHANNEL = 120,
  NRF_POWER_UP_DELAY = 2,
  NRF_PAYLOAD_LENGTH = 6
};

void setup()
{
  SPI.begin();

  pinMode(SPI_SS_PIN, OUTPUT);
  digitalWrite(SPI_SS_PIN, HIGH);

  pinMode(NRF_CE_PIN, OUTPUT);
  digitalWrite(NRF_CE_PIN, HIGH);

  pinMode(REG1, OUTPUT);
  digitalWrite(REG1, LOW); // выбор ведомого - нашего регистра
  SPI.transfer(LightBin); // очищаем содержимое регистра
  /* Завершаем передачу данных. После этого регистр установит
   * на выводах QA-QH уровни, соответствующие записанным битам.
   */
  digitalWrite(REG1, HIGH);

  uint8_t address[5] = { 0xE2, 0xE4, 0x23, 0xE4, 0x02 };
  nrf_init(address);

  pinMode(Moto1L, OUTPUT);
  pinMode(Moto1R, OUTPUT);
  pinMode(Moto1Cont, OUTPUT);

  pinMode(Moto2L, OUTPUT);
  pinMode(Moto2R, OUTPUT);
  pinMode(Moto2Cont, OUTPUT);

  docommand();
  curtime = millis();
  //  Serial.begin(9600);
  //  Serial.println("Init");
}

void loop()
{
  //Serial.println("Waiting for a packet...");
  //Serial.println(int("C"));
  if ((nrf24l01p_get_irq_flags() & (1 << NRF24L01P_IRQ_RX_DR)))
  {
    nrf24l01p_clear_irq_flag(NRF24L01P_IRQ_RX_DR);
    //  Serial.println("Data");
    static char payload[NRF_PAYLOAD_LENGTH];
    nrf24l01p_read_rx_payload((uint8_t*)payload);//, sizeof(payload));
    if (payload[5] == (payload[0] + payload[1] + payload[2] + payload[3] + payload[4]))
    {
      //  Serial.println("DataIN");
      if (SpeedLeft != int(payload[3]) or SpeedRight != int(payload[2]) or LightMode != int(payload[1]) or Stoped != int(payload[0]))
      {
        //  Serial.println("CommandIN");
        SpeedLeft = int(payload[3]);
        SpeedRight = int(payload[2]);
        LightMode = int(payload[1]);
        Stoped = int(payload[0]);
        //   Serial.println(SpeedLeft);
        //   Serial.println(SpeedRight);


        docommand();
      }
      curtime = millis();
    }
  }
  if (curtime + dotime < millis())
  {
    Stoped = 1;
    docommand();
  }
}

void docommand()
{
  if (Stoped != 0)
  {
    digitalWrite(Moto1L, LOW);
    digitalWrite(Moto1R, LOW);
    analogWrite(Moto1Cont, 0);

    digitalWrite(Moto2L, LOW);
    digitalWrite(Moto2R, LOW);
    analogWrite(Moto2Cont, 0);
  }

  else
  {
    if (SpeedLeft < 0)
    {
      digitalWrite(Moto1L, LOW);
      digitalWrite(Moto1R, HIGH);
    }
    else if ((SpeedLeft > 0))
    {
      digitalWrite(Moto1L, HIGH);
      digitalWrite(Moto1R, LOW);
    }
    else if ((SpeedLeft == 0))
    {
      digitalWrite(Moto1L, LOW);
      digitalWrite(Moto1R, LOW);
    }
    analogWrite(Moto1Cont, map(abs(SpeedLeft), 0, 16, 120, 254));

    if (SpeedRight < 0)
    {
      digitalWrite(Moto2L, LOW);
      digitalWrite(Moto2R, HIGH);
    }
    else if ((SpeedRight > 0))
    {
      digitalWrite(Moto2L, HIGH);
      digitalWrite(Moto2R, LOW);
    }
    else if ((SpeedRight == 0))
    {
      digitalWrite(Moto2L, LOW);
      digitalWrite(Moto2R, LOW);
    }
    analogWrite(Moto2Cont, map(abs(SpeedRight), 0, 16, 120, 254));
  }

  if (SpeedRight < 0 and SpeedLeft < 0)

  {
    LightBin = LightBin | B00000011;
    digitalWrite(REG1, LOW);
    SPI.transfer(LightBin);
    digitalWrite(REG1, HIGH);
  }
  else
  {
     LightBin = LightBin & B11111100;
    digitalWrite(REG1, LOW);
    SPI.transfer(LightBin);
    digitalWrite(REG1, HIGH);
  }

  if (LightMode == 0)
  {
     LightBin = LightBin & B00000011;
    digitalWrite(REG1, LOW);
    SPI.transfer(LightBin);
    digitalWrite(REG1, HIGH);
  }
  else if (LightMode == 1)
  {
     LightBin = LightBin | B00001100;
    digitalWrite(REG1, LOW);
    SPI.transfer(LightBin);
    digitalWrite(REG1, HIGH);
  }
  else if (LightMode == 2)
  {
     LightBin = LightBin | B00111100; 
    digitalWrite(REG1, LOW);
    SPI.transfer(LightBin);
    digitalWrite(REG1, HIGH);
  }
  else if (LightMode == 3)
  {
     LightBin = (LightBin & B11001111) | B11001100;
    digitalWrite(REG1, LOW);
    SPI.transfer(LightBin);
    digitalWrite(REG1, HIGH);
    //    digitalWrite(REG1, LOW);
    //    SPI.transfer(LightBin | B11001100);
    //    digitalWrite(REG1, HIGH);
  }
  else if (LightMode == 4)
  {
     LightBin = LightBin | B11111100;
    digitalWrite(REG1, LOW);
    SPI.transfer(LightBin);
    digitalWrite(REG1, HIGH);
  }

}

void nrf_init(uint8_t *address)
{
  delay(100);

  nrf24l01p_get_clear_irq_flags();
  nrf24l01p_close_pipe(NRF24L01P_ALL);
  nrf24l01p_open_pipe(NRF24L01P_PIPE0, false);
  nrf24l01p_set_crc_mode(NRF24L01P_CRC_16BIT);
  nrf24l01p_set_address_width(NRF24L01P_AW_5BYTES);
  nrf24l01p_set_address(NRF24L01P_PIPE0, address);
  nrf24l01p_set_operation_mode(NRF24L01P_PRX);
  nrf24l01p_set_rx_payload_width(NRF24L01P_PIPE0, NRF_PAYLOAD_LENGTH);
  nrf24l01p_set_rf_channel(NRF_CHANNEL);

  nrf24l01p_set_power_mode(NRF24L01P_PWR_UP);
  delay(NRF_POWER_UP_DELAY);
}

void nrf24l01p_spi_ss(nrf24l01p_spi_ss_level_t level)
{
  digitalWrite(SPI_SS_PIN, (level == NRF24L01P_SPI_SS_LOW ? LOW : HIGH));
}

uint8_t nrf24l01p_spi_rw(uint8_t value)
{
  return SPI.transfer(value);
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

во всем вашем честно лень разбираться, но поделюсь своим кодом без дисплея, вроде все про него вырезал

передатчик

#include <SPI.h>
#include "RF24.h"
#include <avr/pgmspace.h>
#include <CyberLib.h>

byte msg[3];

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи

#define accelerometr A0 
#define rul          A1 

int gaz=0;
int control=0;
int gaz_old=0;
int control_old=0;

void setup() 
{ 
  radio.begin();
  radio.setRetries(1,1);
  radio.openWritingPipe(pipe); // Открываем канал передачи
  Inicialize(1);
  Led_On;
} 
 
void loop(){ 
  sped();
  radio.write(msg, 3);
} 


//=================================================================
//                    Измеряем значения руля и газа
void sped(){       
  //газ 
  gaz = analogRead(accelerometr);
  if(gaz!=gaz_old){
    gaz_old = gaz;
    if(gaz<410) gaz=410;
    if(gaz>550) gaz=550;
    if (gaz<493){
      msg[2] = 1;
      gaz = map(gaz, 492, 410, 0, 254);
    }
    if (gaz>503){
      msg[2] = 0;
      gaz = map(gaz, 504, 550, 0, 254);
    }
    if ((gaz>=493) && (gaz<=503)){
      gaz = 0;
    }
    msg[1] = gaz;
  }

  //руль
  control = analogRead(rul);
  if(control!=control_old){
    control_old=control;
    if(control<254) control=254;
    if(control>686) control=686;

    if (control<481){
      control = map(control, 254, 480, 180, 90);
    }
    if (control>496){
      control = map(control, 497, 686, 90, 0);
    }
    if ((control>=481) && (control<=496)){
      control = 90;
    }
    msg[0] = control;
  }
}

приемник. для катера не нашел, хз куда дел, может не сохранил, приведу для машинки. пульт одинаковый

#include <SPI.h>
#include "RF24.h"
#include <Servo.h> 
RF24 radio(A2,A1);
const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала
#define dir 5
#define pwm 6
byte msg[3];
Servo myservo; 

void setup(){ 
  radio.begin();
  radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир 
  myservo.attach(2);
  pinMode(dir, OUTPUT);
  pinMode(pwm, OUTPUT);
} 
void loop(){ 
  if (radio.available()){
    bool done = false;
    while (!done){
      done = radio.read(msg, 3);
      myservo.write(map(msg[0],0,180,71,131));
      if(msg[2]==0){
        digitalWrite(dir, msg[2]);
        analogWrite(pwm, msg[1]);
      }
      if(msg[2]==1){
        digitalWrite(dir, msg[2]);
        analogWrite(pwm, 255-msg[1]);
      }
    }
  }
}


 

LoneDog
Offline
Зарегистрирован: 22.10.2013

То есть Вы постоянно в цикле loop{} считываете параметры интерфейса управления и шлете команду на приемник? Я так не решился делать может в этом и загвоздка я если ничего не меняется посылаю четыре раза в секунду (250 миллисекунд)  и если приемник в течении 300 миллисекунд не получает команду то останавливаются двигатели. Наверное надо увеличить частоту отправки команд. Буду пробовать. Спасибо за примеры.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да я постоянно считываю значения с переменных резисторов управления, конвертирую значения и записываю в массив. и отправляю его как только все предыдущее было сделано

в этом есть минус. периодически (раз в 1 секунду до раз в минуту) на полсекунды как будто зависает. предполагаю буфер. приемник не успел отработать, а данные шлются. приемник принимает, если приемник не принял данные (точнее не отправли сообщение передатчику о том что принял) еще раз шлются (вроде, если я правильно понял по смыслу названия функций библиотеки)

логичнее стопорить прием пока не сделаем все что в loop, но это предположение, ноя не проверял

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

там если что есть прерывание при получении данных. не обязательно пинговать постоянно.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я так не разбирался. поэтому посчитал наверно рациональнее просто перестать слушать

хотя пухлявый если предложишь более рациональный подход будем тебе благодарны

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

я так не разбирался. поэтому посчитал наверно рациональнее просто перестать слушать

хотя пухлявый если предложишь более рациональный подход будем тебе благодарны

я уже писал в другой теме. что NRF24 они разве что дешевые и поэтому с ними все носятся как с писаной торбой. но на этом вообщем то и все.

имеет смысл потратить еще пару баксов и взять что нибуть посерьезней.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Puhlyaviy пишет:

jeka_tm пишет:

я так не разбирался. поэтому посчитал наверно рациональнее просто перестать слушать

хотя пухлявый если предложишь более рациональный подход будем тебе благодарны

я уже писал в другой теме. что NRF24 они разве что дешевые и поэтому с ними все носятся как с писаной торбой. но на этом вообщем то и все.

имеет смысл потратить еще пару баксов и взять что нибуть посерьезней.

тогда хочется сравнения. за что пару баксов стоит заплатить. и кроме плюсов описать минусы (они у всех есть) а также ссылки на примеры использования. может и я стану использовать, хоть и хватало пока

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

тогда хочется сравнения. за что пару баксов стоит заплатить. и кроме плюсов описать минусы (они у всех есть) а также ссылки на примеры использования. может и я стану использовать, хоть и хватало пока

я не собираю модельки. поэтому не могу плюсы и минус относительно моделек написать.

для моделек есть вон куча всяких трансиверов готовых. до 2 ват мощностью

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну 2 ватта это много. если бы стал делать то на чем бы остановился? цена не последний вопрос например

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

ну 2 ватта это много. если бы стал делать то на чем бы остановился? цена не последний вопрос например

я не люблю изобретать велосипеды. если бы стал делать, то наверное взял бы что то из готового професионального. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да тут подходы наши различаются. я считаю хобби без обоснованной необходимости не должно дорого стоить

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

да тут подходы наши различаются. я считаю хобби без обоснованной необходимости не должно дорого стоить

хех, мой опыт говорит что чем бы ты не занимался, делать это нужно максимально хорошо, и цена тут не играет роли, нехватает денег на хорошую вещь, лучше вообще ничего не брать, ибо купиш подешевле, оно сломается или будет работать не так, и все настроение и радость от  такого хобби просто нафиг.. к тмоу же это ХОББИ, оно должно радовать.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да. но понятие хобби у каждого разное. я меня это собрать самому и самого доступного, и это мне больше удовольствие приносит

это как сделать из "говна" конфетку, лучше больше сил затратить, хоть время потраченное дороже чем съэкономленные деньги

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

да. но понятие хобби у каждого разное. я меня это собрать самому и самого доступного, и это мне больше удовольствие приносит

это как сделать из "говна" конфетку, лучше больше сил затратить, хоть время потраченное дороже чем съэкономленные деньги

ну из гавна конфеты не получаются. народный опыт однако.

а удовольствия будет на порядок больше если брать и делать из нормальных компанентов, мечту.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

гавно утрировано, из дешевых деталей

насчет удовольствия кому как, мне приятнее самому собирать

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

гавно утрировано, из дешевых деталей

насчет удовольствия кому как, мне приятнее самому собирать

тоесть чипы готовые вы принципиально не используете, и собираете из ламп их старых телевизеров? или трансисторы тоже сами производите из кусков материалов?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

нет конечно. например модуль nrf24l01 отношу к дешевым деталям, и на них и делаю

не стану конечно паять свой аналог uln2003 на транзисторах, смысла нет. должна быть рациональность

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

 должна быть рациональность

вот, должна быть рациональность!

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну тут ведь смотря что пытаться добиться. есть вещи чтьо материальные затраты ни в какое сравнение с временем, что ни делай

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

кстати у продавца тоже по распиновке инфы нет

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

ну тут ведь смотря что пытаться добиться. есть вещи чтьо материальные затраты ни в какое сравнение с временем, что ни делай

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

кстати у продавца тоже по распиновке инфы нет

дадада, мы это уже все проходили и дисплеи подешевле и прочую фигню. на выходе получается очень грустный результат и потраченое время.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так я потратил время тольк на поиск инфы по этому дисплею

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

так я потратил время тольк на поиск инфы по этому дисплею

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

НО, есть одно большое НО, ты молучиш всю документацию на покупаемый продукт. Все спецификации, примеры и прочее барахло какое тебе зачешся вдруг.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

как вариант, но лучше купить уже опробованое, хоть как то. чтобы если вопросы будут не тупить и знать что сказать, да и труд не зря пропал, комуто помог

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

как вариант, но лучше купить уже опробованое, хоть как то. чтобы если вопросы будут не тупить и знать что сказать, да и труд не зря пропал, комуто помог

если все будут покупать только опробованое. то кто будет разрабатывать новое? мне видимо показалось что смысл ХОББИ разработка нового. а не повторение где увиденых проектов из доступного и дешевого.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

те кому энтузиазма хватит, знаний и приборов

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

те кому энтузиазма хватит, знаний и приборов

не в приборах дело и не в количестве знаний. нужно что бы желание было узнавать что то новое. и делать что то новое.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так я же написал про энтузиазм

art100
Offline
Зарегистрирован: 09.03.2014

Можно мои 5 копеек? После обрыва связи надо тут же принимать решение о "парковке/возврате". Поиграться и на машинко конечно ненадо. На катере сбавить обороты и руля чуть-чуть, чтоб на спокойной воде назад в зону управления завернул, на самолете просто разбиться или как израиль подушку на брюхе раскрыть и лепестком падать. В кременчуге в радиусе 1км повыще камеру поднять, чтоб за зеленку заглянуть, и назад, дешево. Так укры делали.

 

LoneDog
Offline
Зарегистрирован: 22.10.2013

Фото пульта

а с поджигом фитилей идей нет, я думал использовать тонкую нихромовую нить, но надо расчитать длинну и сечение так чтобы хватило тепла пожечь фитиль, и в тоже время она (нить) не была бы слишком тонкая и не скорела при пуске ракеты. Но толстая нить для прогрева бдет требовать большого тока, вот я и подума что если паралельно нити накаливания поставить конденсатор с приличной емкость, но пока затрудняюсь в подборе элементарной базы.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

экспериментально просто подберите время на какое можно подавать питание на нить и все. нить мгновенно сгорит если слишком высокий ток, а если нет потребуется около секунды. на ардуине время нужно отсчитать не проблема

stels
Offline
Зарегистрирован: 03.01.2014

электроспичка

Vikirmih
Vikirmih аватар
Offline
Зарегистрирован: 16.03.2015

Береш диод стеклянный и к спичке к головке -если пропустить небольшой ток то спичка загорается так еще в 80-е юные техники поступали.