SomfyDuino: USB-naar-Somfy IO Adapter Voor Arduino Nano
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino Nano R3 | 1 |
| Plat kabel (7-adrig) | 1 |
| Somfy IO-afstandsbediening | 1 |
Benodigde tools en machines
- Solderbout (standaard)
Over dit project
Ideëvorming
Hallo,
Ik heb geprobeerd een USB-naar-Somfy IO-adapter te implementeren met een Arduino Nano om mijn rolgordijnen in de woonkamer in mijn eigen huisautomatiseringssysteem te integreren, zonder cloud-gebaseerde hardware van de oorspronkelijke leverancier te hoeven kopen. En hey! HET WERKT - met behulp van slechts een simpele IO-afstandsbediening.
Wat je nodig hebt
- Een Somfy IO-afstandsbediening - ik gebruikte de GX037.
- Bijna elke Arduino met een USB-connector werkt - maar soft serial werkt ook.
- Een 7-adrig plat kabel en een krimpslang voor nette afwerking.
Aansluiting volgens de bijlagen. De afstandsbediening wordt gevoed door de Arduino - hij verbruikt ongeveer 20mA tijdens zenden, dus dat moet prima gaan. Zorg ervoor dat je de batterij verwijdert.
Over de code
Als je het hele apparaat wilt verbinden met bv. een Raspberry Pi, wil je misschien alle Serial.print statements verwijderen - het is veel makkelijker om met de Arduino te communiceren als hij alleen luistert en zwijgt.
Hoe je commando's stuurt wordt in de code uitgelegd.
Veel plezier - reacties zijn welkom!
Groet,
Bjoern
P.S. - Ik gebruikte een eenkanaals afstandsbediening. Deze gebruikt in wezen dezelfde indeling als de 5-kanaals versie, maar ontbreekt enkele onderdelen (zoals de extra LED's). Ik vraag me af of het naar verschillende kanalen springt als SELECT geactiveerd wordt. Ik heb dit nog niet geprobeerd omdat ik al blij was dat ik één kanaal werkend had, maar ik zal dit bijhouden.
P.P.S. net gecheckt - de SELECT-knop heeft helaas geen effect - verandert niet van kanaal maar verpest de afstandsbediening ook niet.
Code
Serieel naar Somfy (Arduino)
// SomfyDuino
// door Bjoern Foldenauer
// 05/2017
int progPin = 8;
int upPin = 12;
int downPin = 10;
int myPin = 11;
int selectPin = 9;
int ledPin = 13;
boolean upPress = false;
boolean downPress = false;
boolean myPress = false;
boolean progPress = false;
boolean selectPress = false;
unsigned long holdTime = 0;
int repeatSend = 0;
char incomingChar;
void setup() {
Serial.begin(9600);
Serial.println("SomfyDuino 0.71");
Serial.println("Bjoern Foldenauer");
Serial.println("-----");
Serial.println("ontvangt enkele seriële karakters zoals:");
Serial.println("u - voorbereiden om UP in te drukken");
Serial.println("d - voorbereiden om DOWN in te drukken");
Serial.println("m - voorbereiden om MY in te drukken");
Serial.println("p - voorbereiden om PROG in te drukken");
Serial.println("s - voorbereiden om SELECT in te drukken");
Serial.println("r - verhoog zend-aantal met één");
Serial.println("elk cijfer X - verhoog houd-tijd met X*100 ms");
Serial.println("e - Uitvoeren! Voert een gedefinieerde (multi-knop) druk en houd uit");
Serial.println("");
Serial.println("Voorbeeld: gewone UP: u5e");
Serial.println(" 3 seconden UP/DOWN: ud9993e");
Serial.println(" 5 seconden PROG: p999995e");
Serial.println("");
pinMode(progPin, OUTPUT);
pinMode(upPin, OUTPUT);
pinMode(downPin, OUTPUT);
pinMode(myPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(selectPin, 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);
if (incomingChar == 'u') { upPress = true; }
if (incomingChar == 'd') { downPress = true; }
if (incomingChar == 'm') { myPress = true; }
if (incomingChar == 'p') { progPress = true; }
if (incomingChar == 's') { selectPress = true; }
if (incomingChar == '1') { holdTime += 100; }
if (incomingChar == '2') { holdTime += 200; }
if (incomingChar == '3') { holdTime += 300; }
if (incomingChar == '4') { holdTime += 400; }
if (incomingChar == '5') { holdTime += 500; }
if (incomingChar == '6') { holdTime += 600; }
if (incomingChar == '7') { holdTime += 700; }
if (incomingChar == '8') { holdTime += 800; }
if (incomingChar == '9') { holdTime += 900; }
if (incomingChar == 'r') { repeatSend++; }
if (incomingChar == 'e') { somSend(); }
}
}
void somSend() {
Serial.print("Indrukken: ");
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("voor ");
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 = false;
downPress = false;
myPress = false;
progPress = false;
selectPress = false;
holdTime = 0;
repeatSend = 0;
Serial.println("klaar.");
}
Schema's



Geen document beschikbaar.
Productieproces
- Externe weerbewaking met Raspberry Pi 3 en PubNub
- Een Professionele Raspberry Pi Universele Afstandsbediening Bouwen met LIRC
- IR-afstandsbediening-commando's vastleggen op Raspberry Pi zonder LIRC: Een Python UART-benadering
- Remote Hartslagmonitoringssysteem met AWS IoT-waarschuwingen
- SMS-gestuurde Slimme AC-stroomschakelaar met Raspberry Pi & Hologram
- ROObockey: Precisie-geassisteerde Remote-gecontroleerde Straathockey-robot
- Cloud Monitoring: Extern controlsysteem voor real-time activabeheer
- 5 Belangrijkste voordelen van externe productiecontrole voor de moderne industrie
- Veilige Remote gRPC Toegang Met grpcurl Op PLCnext Apparaten
- Top 3 voordelen van remote monitoring voor productie-efficiëntie
- Externe monitoring systemen verbeteren met geavanceerde IoT-upgrades