Forum: Projekte & Code Neues Relaiskartenprojekt ("The ultimate relay card")


von Michael G. (linuxgeek) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi Forum,

endlich mal wieder ein (etwas aufwaendigeres) Projekt fast 
fertiggestellt. Hier kurz vorgestellt:

Meine neue Relaiskarte beherbergt vier Industrieralais (falls irgendwie 
mit dem vorhandenem Flash moeglich, auch noch Erweiterungsnmodule 
geplant), welche man auf recht flexible Art und Weise sowohl per Enet 
als auch per USB ansteuern kann (USB-Support steht softwareseitig noch 
aus).

Hier die Eckdaten:

- Eurokartenformat, doppelseitige Platine
- 4 Industrierelais (Finder 55.32), zwei Kanaele direkt per Transistor 
schaltbar
- Basiert auf Atmega169
- Schnittstellen: Enet (ENC28J60+Magjack), USB (FT232)
- 3.5-stelliges LCD zur Anzeig der Zeit
- Per Goldcap gepufferte Echtzeit (lange Laufdauer)
- Flexible timer und unterschiedliche Modi spezifizierbar
- Linuxbasierter Kommandozeilenclient
- Uhr einstellbar und Relais steuerbar per RC-5 Fernbedienung
- Einstellungen und Timer sind auf das EEPROM persistierbar und gehen 
nach power down nicht verloren

Sourcen, Schaltplaene, Layout, Firmware und PC-Client hier zu finden:
SVN: http://svn.coremelt.net/avr/ultimate_relay_card

Bitte keine riesige Diskussion ueber Sinn/Unsinn oder welche Features 
ihr lieber gehabt haettet. Alles steht unter CC und kann daher frei 
modifiziert werden. Ein Bild des fertigen Aufbaus haengt an.

Hier noch kurz eine Zusammenfassung unterstuetzter Befehle:

supported switches and options:
--help/-?, --version/-V ........ dump this screen
--verbosive/-v ................. more verbosive output, including 
network traffic
--usb/-u ....................... use USB connection rather than ethernet
--address/-a <addr>[:<port>] ... USB serial number or IP address to 
connect to
--on/-o <relay(s)> ............. switch relay(s) on, integer or bitmask 
0b1...0
--off/-f <relay(s)> ............ switch relay(s) off, integer or bitmask 
0b1...0
--toggle/-t <relay(s)> ......... toggle relay(s), integer or bitmask 
b1...0
--sysinfo/--S .................. show the relay card's settings and 
system status
--get-time/-i .................. retrieve and display the real time from 
the card
--sync-time/-s ................. synchronize the RTC with the local 
system time
--set-time/-I <datetime> ....... set the RTC to this specific date and 
time
     syntax: dd.MM.yy[yy]-hh:mm:ss, all fields must be specified
--network-conf/-n <option> ..... update a network setting of the card
     available settings: ip:<ip address>[:port], mac:<mac address>, 
port:<port>
                         handshake:<8 byte handshake sequence>, 
restore_defaults
--set-timer/-T <timer> ......... activate a timer (see below)
     syntax: <addr>[+]/<mode>/<start time>/[<end time>].
     with time format 'dd.MM.yy[yy] hh:mm:ss', non-mandatory fields 
default to now-
     Optional '+' will add a timer rather than override all existing 
ones for <address>.
--list-timers/-l ............... show all active timers of the relay 
card
--delete-timer/-d <index> ...... delete a specific active timer
     syntax: [a]<start index>[-<end index>]
             (Optional 'a' will delete all timers for the specified 
address.)
--persist/-p <mode> ............ persist all settings of the card to its 
EEPROM
     available modes: all, timers, settings
--reset/-r ..................... trigger a watchdog reset
--configfile/-c <file> ......... use this configuration file instead of 
the default

Wuerde mich freuen, wenn der ein oder andere von Euch das nachbauen 
wuerde und mir evt. sogar beim Beseitigen noch vorhandener Fehler helfen 
koennte.

Fuer Fragen stehe ich auch bereit.

Greets,
Michael

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Hier noch ein paar Anwendungsbeispiele:

- Abfragen der Systeminformationen:
michael@quark:/stuff/test/avr/ultimate_relay_card/pc_client 
(svn)-[avr:215]- # ./rcontrol2 -S

system status and information about the detected card:
--------------------------------------------------------------
firmware revision: ....................... 344
real time: ............................... 23.02.2012 22:45:28
system uptime: ........................... 0d 0h 41m 34s
ENC28J60 silicon revision: ............... 4
number of builtin relays: ................ 4
number of builtin switches: .............. 2
current relay switch status: ............. 000000
IP network address and port: ............. 192.168.0.42:80
PHY physical MAC address: ................ df:19:a0:f6:fa:48
duty cycle counter relay #1: ............. 4
duty cycle counter relay #2: ............. 0
duty cycle counter relay #3: ............. 0
duty cycle counter relay #4: ............. 0

WARNING: The firmware revision of this card (rev. 344) is too recent to 
work reliably
with this client. Either upgrade the firmware or downgrade it to rev. 
338. Not using
the correct firmware could result in unexpected or broken operation and 
is generally
unsupported by the scope of this project.

- Synchronisieren der lokalen Uhrzeit mit der RTC:
./rcontrol2 -s

- Anzeigen der aktuellen RTC-Zeit:
michael@quark:/stuff/test/avr/ultimate_relay_card/pc_client 
(svn)-[avr:215]- # ./rcontrol2 -i
23.02.2012 22:46:36

- Setzen der aktuellen Zeit manuell:
./rcontrol -I 23.02.12-22:50:0

- Relais 0-4 einschalten:
./rcontrol -o b1111

- Relais 2 ausschalten:
./rcontrol -f 1

- Timer aktivieren (Relais 1 in 10 Minuten ein- und in 20 Minuten wieder 
aus schalten):
./rcontrol2 -T 0/of/10m/20m

- aktuell definierte Timer listen:
michael@quark:/stuff/test/avr/ultimate_relay_card/pc_client 
(svn)-[avr:215]- # ./rcontrol2 -l

-----------------------------------------------------------
timer [1/1]@0 slot #0:
-----------------------------------------------------------
  timer mode: .............. 'of' [once off/on]
  start time: .............. 23.02.2012 22:57:52
  start trigger time ....... 9m 24s
  end time: ................ 23.02.2012 23:07:52
  end trigger time ......... 19m 24s
  timer resolution: ........ sec-min-hr-day-daym-mon-year

Es gibt eine Vielzahl an Moeglichkeiten, weitere Timer zu definieren, 
darunter auch zyklische Timer (z.B. jeden Di um 18:00) und modulare 
timer (alle so und soviele Zeiteinheiten schalten).

- Lösche den timer in slot 0:
./rcontrol -d 0

- Lösche alle timer, die auf Relaisadresse 0 definiert sind:
./rcontrol -d a0

- Lösche alle timer der Slots 0-19
./rcontrol -d 0-19

- Persistiere alle Einstellungen und timer (geschieht auch ab und zu 
automatisch, jedoch nur einmal am Tag, um den EEPROM zu schonen)
./rcontrol -p all

- Zeige Netzwerkverkehr:
./rcontrol -vi

michael@quark:/stuff/test/avr/ultimate_relay_card/pc_client 
(svn)-[avr:215]- # ./rcontrol2 -vi
sending 9 data bytes to 192.168.0.42:80:
=> 000: 0x84[132] 001: 0x57[087] 002: 0x05[005] 003: 0xb5[181] 004: 
0x30[048]
   005: 0x17[023] 006: 0x37[055] 007: 0x7e[126] 008: 0x02[002]
received 8 response data bytes after 1.12ms:
<= 000: 0xab[171] 001: 0x11[017] 002: 0x34[052] 003: 0x16[022] 004: 
0x17[023]
   005: 0x02[002] 006: 0x0c[012] 007: 0x01[001]
23.02.2012 22:52:17

- Aendere die IP-Adresse auf 192.168.0.100:
./rcontrol -n ip:192.168.0.100

- Loese einen Reset aus:
./rcontrol -r

Bald wird auch noch ein Konfigfile unterstuetzt, in dem alle variablen 
Settings hinterlegt werden koennen, so dass man es nicht mehr in den 
Befehlen angeben muss.

Viele Gruesse,
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.