SomfyDuino: USB-адаптер для управления Somfy IO через Arduino Nano
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino Nano R3 | 1 |
| Шлейф 7 жил (flat cable) | 1 |
| Пульт Somfy IO (например, GX037) | 1 |
Инструменты
- Паяльник
О проекте
Идея
Хотел интегрировать роллетты Somfy IO в свою систему умного дома без облачного оборудования производителя. Получилось — использовал обычный IO-пульт!
Что нужно
- Пульт Somfy IO (1-канальный GX037). 5-канальные имеют ту же распиновку, просто больше кнопок/LED.
- Любой Arduino с USB (Nano, Micro, Pro Micro). SoftSerial тоже работает.
- 7-жильный шлейф и термоусадка для аккуратности.
Питание пульта — от Arduino (~20 мА при передаче). Батарейку из пульта нужно извлечь.
Прошивка
Для подключения к RPi или другому контроллеру удобно убрать все Serial.print — Arduino будет только слушать команды.
Формат команд описан в коде. Пример: u5e — нажать UP 500 мс; ud9993e — UP+DOWN 3 сек; p999995e — PROG 5 сек.
Примечание: кнопка SELECT на 1-канальном пульте не переключает каналы, но и не ломает работу.
Код (Serial → Somfy)
// SomfyDuino by Bjoern Foldenauer 05/2017
int progPin = 8, upPin = 12, downPin = 10, myPin = 11, selectPin = 9, ledPin = 13;
bool upPress = false, downPress = false, myPress = false, progPress = false, selectPress = false;
unsigned long holdTime = 0;
int repeatSend = 0;
char incomingChar;
void setup() {
Serial.begin(9600);
Serial.println("SomfyDuino 0.71");
Serial.println("Commands:");
Serial.println("u - UP, d - DOWN, m - MY, p - PROG, s - SELECT");
Serial.println("r - +1 повтор, 1-9 - удержание (x100 мс), e - Execute");
Serial.println("Example: u5e (UP 500ms), ud9993e (UP+DOWN 3s)");
pinMode(progPin, OUTPUT); pinMode(upPin, OUTPUT); pinMode(downPin, OUTPUT);
pinMode(myPin, OUTPUT); pinMode(selectPin, OUTPUT); pinMode(ledPin, OUTPUT);
digitalWrite(progPin, HIGH); digitalWrite(upPin, HIGH); digitalWrite(downPin, HIGH);
digitalWrite(myPin, HIGH); digitalWrite(selectPin, HIGH); digitalWrite(ledPin, LOW);
}
void loop() {
while (Serial.available() == 0) delay(50);
if (Serial.available() > 0) {
incomingChar = Serial.read();
Serial.println(incomingChar);
switch (incomingChar) {
case 'u': upPress = true; break;
case 'd': downPress = true; break;
case 'm': myPress = true; break;
case 'p': progPress = true; break;
case 's': selectPress = true; break;
case '1': holdTime += 100; break;
case '2': holdTime += 200; break;
case '3': holdTime += 300; break;
case '4': holdTime += 400; break;
case '5': holdTime += 500; break;
case '6': holdTime += 600; break;
case '7': holdTime += 700; break;
case '8': holdTime += 800; break;
case '9': holdTime += 900; break;
case 'r': repeatSend++; break;
case 'e': somSend(); break;
}
}
}
void somSend() {
Serial.print("Pressing: ");
for (int i = 0; i <= repeatSend; i++) {
if (upPress) { digitalWrite(upPin, LOW); Serial.print("up "); }
if (downPress) { digitalWrite(downPin, LOW); Serial.print("down "); }
if (myPress) { digitalWrite(myPin, LOW); Serial.print("my "); }
if (progPress) { digitalWrite(progPin, LOW); Serial.print("prog "); }
if (selectPress) { digitalWrite(selectPin, LOW); Serial.print("select "); }
digitalWrite(ledPin, HIGH);
Serial.print("for "); Serial.print(holdTime); Serial.println(" ms");
delay(holdTime);
digitalWrite(progPin, HIGH); digitalWrite(upPin, HIGH); digitalWrite(downPin, HIGH);
digitalWrite(myPin, HIGH); digitalWrite(selectPin, HIGH); digitalWrite(ledPin, LOW);
delay(holdTime);
}
upPress = downPress = myPress = progPress = selectPress = false;
holdTime = 0; repeatSend = 0;
Serial.println("done.");
}
Схемы и фото
Производственный процесс
- Удалённый мониторинг погоды на Raspberry Pi 3 с PubNub
- Создание профессионального универсального пульта на Raspberry Pi с LIRC
- Перехват команд ИК-пульта на Raspberry Pi без LIRC: подход через Python UART
- Система удалённого мониторинга сердечного ритма с алертами AWS IoT
- Умный выключатель питания AC под управлением SMS с Raspberry Pi и Hologram
- ROObockey: Робот для уличного хоккея с точной прицельной системой
- Облачный мониторинг: система удаленного контроля для управления активами в реальном времени
- 5 ключевых преимуществ удаленного контроля производства для современной промышленности
- Безопасный удаленный gRPC доступ с grpcurl на устройствах PLCnext
- Топ-3 преимущества удаленного мониторинга для производственной эффективности