Сетевое Множество ардуино - Это "Ракетная наука?"
Есть набор ардуино, которые должны обмениваться данными-для модели контроллера запуска ракеты!
Как отправить 24 бита информации (команды запуска) с "master" Arduino, по 12 бит каждый на два "slave" Arduino, которые находятся на расстоянии от 15' до 150' от "master".
Каждый "раб" должен отправить 12 бит информации (непрерывность статии)"хозяину".
"Master" < - - - 15' to 115' ---> "Slave 1" <--- 15' to 115' ---><--- 10' до 35' --> "Раб 2"<--- 10' до 35' -->
Кажется, слишком долго для I2C?
@LydaRA, 👍1
Обсуждение2 ответа
Лучший ответ:
Лучшим решением было бы использовать адаптер RS485, подключенный к каждому Arduino через последовательный порт. Это проверенное и верное решение, которое идеально подходит для такой установки и стоит всего несколько долларов дополнительного оборудования на узел.
Если вы не можете использовать дополнительное оборудование, вы также можете создать систему токовой петли бедного человека, такую как RS485, используя обычные выводы Arduino, поскольку они способны искать и топить 20 мА.
С любым из этих решений вы можете отправлять столько данных, сколько хотите, пока у вас есть какой-то минимальный протокол для сериализации его в последовательность битов на проводе. Чтобы отправить 12 битов, вы можете просто определить условие запуска как простаивающий "0" на проводе в течение определенного периода времени, за которым следует "1" стартовый бит, за которым следует 12 битов данных, за которым, возможно, следует бит четности или контрольная сумма, и завершается "1" стоп-бит.
Проверьте, как, скажем, RS232 или RS485 сериализуют биты, чтобы получить представление о том, как это работает. Если вы в конечном итоге используете оборудование, которое поддерживает отправку данных только в 8-битных блоках, то вы можете, скажем, отправить два байта на "пакет" данных, где каждый байт имеет 6 бит ваших данных, плюс один бит, который указывает, является ли этот байт первой группой из 6 бит или второй группой, а затем один бит четности для проверки ошибок.
У меня есть I2C для работы между ардуино с различными размерами байтов. Я скопировал тестовый код ниже. Обратите внимание, что существует отдельный код для отправки и получения. Он может быть изменен, но содержит основную идею.
Один (или несколько) ардуино отправляет на главный контроллер I2C:
Код отправителя:
//sender test
#include <Wire.h>
#include <Wire.h>
#define NUMDATA 4
byte byteData[2 * NUMDATA]; //= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//test
void setup()
{
Wire.begin(3); // join i2c bus with address #3
Wire.onRequest(requestEvent); // register event
}
void loop()
{
int aData;
for(int i = 0; i < NUMDATA; i++){
aData = analogRead(i);
byteData[i*2 + 1] = ((aData >> 8) & 0xFF);
byteData[i*2] = (aData & 0xFF);
// memcpy((void *)byteData[i*2], (void *) analogRead(i), sizeof(int));
}
}
void requestEvent()
{
Wire.write(byteData, 2 * NUMDATA);
}
Получение кода:
#include <Wire.h>
void setup()
{
Wire.begin(); // join i2c bus (address optional for main controller)
Serial.begin(9600); // start Serial for output
}
void loop()
{
getSenderData();
Serial.println("Hello");
delay(500);
}
void getSenderData() {
//Gets sensor data for one grid
//Byte Array to get raw bytes
byte ICdataAsBytes[8];
int i = 0;
Wire.requestFrom(3,8); // request 6 bytes from sending device #2
while(Wire.available()) // sender may send less than requested
ICdataAsBytes[i++] = Wire.read();
int *tempData =(int*)&ICdataAsBytes;
for( i = 0; i < 4; i++)
Serial.println(tempData[i]);
}
I2C на расстояниях до 115 футов (≈ 35 м) ? Действительно?, @Edgar Bonet
Ах, я пропустил эту важную заметку, спасибо. Да, расстояние, кажется, выходит за рамки спецификации., @pete_a_dunham
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
Это можно улучшить, избавившись от "TiA...", я не знаю, что такое "Коробки RSO" и "Коробки Pad". Я подозреваю, что, если бы описывалось по-другому, вы бы получали ответы от большой(r) группы людей. Если вопрос сводится к передаче 16-битной информации между двумя Ардуино на низкой частоте на расстоянии 100 футов, вероятно, многие люди здесь смогут ответить на этот вопрос., @timemage
проведите небольшое исследование о системах управления огнем фейерверков .... возможно, вам следует подумать об использовании нескольких контактов для выдачи команды запуска на одну стартовую платформу, @jsotola
Это похоже на работу для [DMX512](https://en.wikipedia.org/wiki/DMX512)..., @Majenko
Хммм. Думал об использовании кабелей DMX. Но да, если нужно добавить подпечать, сигнализация DMX может быть такой же действительной, но проще, чем 802.{что угодно} сеть. Кто-нибудь связывал DMX - сигналы с Arduino?, @LydaRA
Проверьте эту ссылку о DMX512 на Arduino: https://playground.arduino.cc/Learning/DMX/, @Fahad