Моя вариация на гусеничную тему
- Войдите на сайт для отправки комментариев
Вот такая получилась радиоуправляемая платформа. Умеет ездить вперед назад поворачивать во все стороны, включать освещение по команде. Каждый двигатель (левый и правый) имеет 16 скоростей вперед и 16 назад, но как показала практика это абсолютно лишнее, хватило бы и по 3 скорости.
В планах установить на платформу пусковую установку для ракет, типа этих
пока есть вопросы с поджогом фитиля. Да и вообще конструкция пусковой установки пока на этапе проектирования, но хочется успеть к новому году.
Радиоуправление реализовано на модулях nrf24l01 и с этим есть к знатокам вопросы, у меня не получилось достичь радиуса приема более 5 метров может, что не так делаю? И в приделах этого радиусе бывают пропуски команд .
Вроде все советы почитал и учел в цепи питания конденсаторы, питание от отдельного стабилизатора на 3.3V L78L33 да в общем то и все...

незнаю. я тестировал на воде метров 80 была дальность потом начинались сбои
незнаю. я тестировал на воде метров 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); }во всем вашем честно лень разбираться, но поделюсь своим кодом без дисплея, вроде все про него вырезал
передатчик
#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]); } } } }То есть Вы постоянно в цикле loop{} считываете параметры интерфейса управления и шлете команду на приемник? Я так не решился делать может в этом и загвоздка я если ничего не меняется посылаю четыре раза в секунду (250 миллисекунд) и если приемник в течении 300 миллисекунд не получает команду то останавливаются двигатели. Наверное надо увеличить частоту отправки команд. Буду пробовать. Спасибо за примеры.
да я постоянно считываю значения с переменных резисторов управления, конвертирую значения и записываю в массив. и отправляю его как только все предыдущее было сделано
в этом есть минус. периодически (раз в 1 секунду до раз в минуту) на полсекунды как будто зависает. предполагаю буфер. приемник не успел отработать, а данные шлются. приемник принимает, если приемник не принял данные (точнее не отправли сообщение передатчику о том что принял) еще раз шлются (вроде, если я правильно понял по смыслу названия функций библиотеки)
логичнее стопорить прием пока не сделаем все что в loop, но это предположение, ноя не проверял
там если что есть прерывание при получении данных. не обязательно пинговать постоянно.
я так не разбирался. поэтому посчитал наверно рациональнее просто перестать слушать
хотя пухлявый если предложишь более рациональный подход будем тебе благодарны
я так не разбирался. поэтому посчитал наверно рациональнее просто перестать слушать
хотя пухлявый если предложишь более рациональный подход будем тебе благодарны
я уже писал в другой теме. что NRF24 они разве что дешевые и поэтому с ними все носятся как с писаной торбой. но на этом вообщем то и все.
имеет смысл потратить еще пару баксов и взять что нибуть посерьезней.
я так не разбирался. поэтому посчитал наверно рациональнее просто перестать слушать
хотя пухлявый если предложишь более рациональный подход будем тебе благодарны
я уже писал в другой теме. что NRF24 они разве что дешевые и поэтому с ними все носятся как с писаной торбой. но на этом вообщем то и все.
имеет смысл потратить еще пару баксов и взять что нибуть посерьезней.
тогда хочется сравнения. за что пару баксов стоит заплатить. и кроме плюсов описать минусы (они у всех есть) а также ссылки на примеры использования. может и я стану использовать, хоть и хватало пока
тогда хочется сравнения. за что пару баксов стоит заплатить. и кроме плюсов описать минусы (они у всех есть) а также ссылки на примеры использования. может и я стану использовать, хоть и хватало пока
я не собираю модельки. поэтому не могу плюсы и минус относительно моделек написать.
для моделек есть вон куча всяких трансиверов готовых. до 2 ват мощностью
ну 2 ватта это много. если бы стал делать то на чем бы остановился? цена не последний вопрос например
ну 2 ватта это много. если бы стал делать то на чем бы остановился? цена не последний вопрос например
я не люблю изобретать велосипеды. если бы стал делать, то наверное взял бы что то из готового професионального.
да тут подходы наши различаются. я считаю хобби без обоснованной необходимости не должно дорого стоить
да тут подходы наши различаются. я считаю хобби без обоснованной необходимости не должно дорого стоить
хех, мой опыт говорит что чем бы ты не занимался, делать это нужно максимально хорошо, и цена тут не играет роли, нехватает денег на хорошую вещь, лучше вообще ничего не брать, ибо купиш подешевле, оно сломается или будет работать не так, и все настроение и радость от такого хобби просто нафиг.. к тмоу же это ХОББИ, оно должно радовать.
да. но понятие хобби у каждого разное. я меня это собрать самому и самого доступного, и это мне больше удовольствие приносит
это как сделать из "говна" конфетку, лучше больше сил затратить, хоть время потраченное дороже чем съэкономленные деньги
да. но понятие хобби у каждого разное. я меня это собрать самому и самого доступного, и это мне больше удовольствие приносит
это как сделать из "говна" конфетку, лучше больше сил затратить, хоть время потраченное дороже чем съэкономленные деньги
ну из гавна конфеты не получаются. народный опыт однако.
а удовольствия будет на порядок больше если брать и делать из нормальных компанентов, мечту.
гавно утрировано, из дешевых деталей
насчет удовольствия кому как, мне приятнее самому собирать
гавно утрировано, из дешевых деталей
насчет удовольствия кому как, мне приятнее самому собирать
тоесть чипы готовые вы принципиально не используете, и собираете из ламп их старых телевизеров? или трансисторы тоже сами производите из кусков материалов?
нет конечно. например модуль nrf24l01 отношу к дешевым деталям, и на них и делаю
не стану конечно паять свой аналог uln2003 на транзисторах, смысла нет. должна быть рациональность
должна быть рациональность
вот, должна быть рациональность!
просто мы с доктором год назад собирали уже один прототип из дешевых деталей... потом долго выпиливали код что бы оно заработало как можно ближе к тому что задумано. а потом плюнули, переработали всю концепцию и решили что будем делать не оглядываясь на финальную цену.
ну тут ведь смотря что пытаться добиться. есть вещи чтьо материальные затраты ни в какое сравнение с временем, что ни делай
например на алиэкспрессе продется очень дешевый дисплей с паралельными интерфейсом (по сравнению с другими), известен контроллер, но нет распиновки как я не искал. в итоге конечно я купил дороже, с которым уже на 95 процентов известно как работать
кстати у продавца тоже по распиновке инфы нет
ну тут ведь смотря что пытаться добиться. есть вещи чтьо материальные затраты ни в какое сравнение с временем, что ни делай
например на алиэкспрессе продется очень дешевый дисплей с паралельными интерфейсом (по сравнению с другими), известен контроллер, но нет распиновки как я не искал. в итоге конечно я купил дороже, с которым уже на 95 процентов известно как работать
кстати у продавца тоже по распиновке инфы нет
дадада, мы это уже все проходили и дисплеи подешевле и прочую фигню. на выходе получается очень грустный результат и потраченое время.
так я потратил время тольк на поиск инфы по этому дисплею
так я потратил время тольк на поиск инфы по этому дисплею
просто если тебе на самом деле интересно. то проще всего и удобней покупать напрямую на заводах. Да, они врятли тебе продадут 1 экземпляр, 2-5 штук продадут легко. Да, цена будет рознечная а не оптовая, но можно поторговаться. Да, тебе придется платить за пересылку плюс ко всему. Да сумарные сатраты могут получиться чуть дороже чем купить что то аналогичное на али или таобао.
НО, есть одно большое НО, ты молучиш всю документацию на покупаемый продукт. Все спецификации, примеры и прочее барахло какое тебе зачешся вдруг.
как вариант, но лучше купить уже опробованое, хоть как то. чтобы если вопросы будут не тупить и знать что сказать, да и труд не зря пропал, комуто помог
как вариант, но лучше купить уже опробованое, хоть как то. чтобы если вопросы будут не тупить и знать что сказать, да и труд не зря пропал, комуто помог
если все будут покупать только опробованое. то кто будет разрабатывать новое? мне видимо показалось что смысл ХОББИ разработка нового. а не повторение где увиденых проектов из доступного и дешевого.
те кому энтузиазма хватит, знаний и приборов
те кому энтузиазма хватит, знаний и приборов
не в приборах дело и не в количестве знаний. нужно что бы желание было узнавать что то новое. и делать что то новое.
Смотри, простой пример, но доктор его четко сформулировал, " кучи народа разрабатывают умные дома, и все у них там вроде крута и правильно, но по факту получается выключатель который можно подергать с мобилки" . так какой смысл во всем этом процессе? можно брать супер запчасти или очень дешевые. можно делать корпуса или просто развешивать на гвоздиках, общая идея получается выключатель с управлением с телефона.
так я же написал про энтузиазм
Можно мои 5 копеек? После обрыва связи надо тут же принимать решение о "парковке/возврате". Поиграться и на машинко конечно ненадо. На катере сбавить обороты и руля чуть-чуть, чтоб на спокойной воде назад в зону управления завернул, на самолете просто разбиться или как израиль подушку на брюхе раскрыть и лепестком падать. В кременчуге в радиусе 1км повыще камеру поднять, чтоб за зеленку заглянуть, и назад, дешево. Так укры делали.
Фото пульта
а с поджигом фитилей идей нет, я думал использовать тонкую нихромовую нить, но надо расчитать длинну и сечение так чтобы хватило тепла пожечь фитиль, и в тоже время она (нить) не была бы слишком тонкая и не скорела при пуске ракеты. Но толстая нить для прогрева бдет требовать большого тока, вот я и подума что если паралельно нити накаливания поставить конденсатор с приличной емкость, но пока затрудняюсь в подборе элементарной базы.
экспериментально просто подберите время на какое можно подавать питание на нить и все. нить мгновенно сгорит если слишком высокий ток, а если нет потребуется около секунды. на ардуине время нужно отсчитать не проблема
электроспичка
Береш диод стеклянный и к спичке к головке -если пропустить небольшой ток то спичка загорается так еще в 80-е юные техники поступали.