Go Down

Topic: vorrei comandare 1 rele dal pc... (Read 3273 times) previous topic - next topic

maxt2

ciao a tutti
ho appena trovato questo forum

volevo chiedere se con arduino si poteva fare questo:
io ho bisogno di comandare un rele (al momento me ne basta uno solo) dal computer
praticamente ho un computer con sopra linux senza interfaccia grafica (solo terminale)
io vorrei scrivere un programma per es. in c o altro, che stesso da terminale invia un segnale a arduino e questo mi dovrebbe far attivare un rele.. (cioe' e' il pc che deve dire a arduino quando attivare il rele, non mi serve che arduino da solo faccia il loop....)
in teoria sembra facile, ma sto cercando da ore su internet e non trovo niente di buono.. mi date una mano ?
vorrei capire se comprare arduino ecc oppure provare ad utilizzare direttaemente la parallela senza arduino...

mi fate capire se si puo' fare? mi date dei link?

grazie

Brunello

#1
Nov 04, 2012, 12:05 am Last Edit: Nov 04, 2012, 12:26 am by brunello Reason: 1
Come hai detto tu, e' facile.
Talmente facile che non ti saprei dare un link.

In pratica un piccolo sketch su Arduino, che legge dalla porta seriale connessa al PC con Linux e attiva il rele' in base al carattere ricevuto.

Stefanoxjx

Che portata deve avere questo relè?
Una cosa semplicissima sarebbe quella di prendere un relè a 5V e consumo molto basso e lo colleghi direttamente all'alimentazione della porta usb.
Poi tramite uno script attivi e disattivi l'alimentazione a quella determinata porta usb.
Da qualche parte dovrei avere anche uno script già pronto; devo cercarlo.
Ciao.
www.multiwii.it
www.sdmodel.it

Madwriter


Che portata deve avere questo relè?
Una cosa semplicissima sarebbe quella di prendere un relè a 5V e consumo molto basso e lo colleghi direttamente all'alimentazione della porta usb.
Poi tramite uno script attivi e disattivi l'alimentazione a quella determinata porta usb.
Da qualche parte dovrei avere anche uno script già pronto; devo cercarlo.
Ciao.


Allora arduino è sempre in loop altrimenti come fa a leggere/scrivere sulla seriale? ;)
ti consiglio(vedo che sei alle prime armi) di prendere un arduino uno, e qualche shield relay 5v :
http://www.ebay.com/itm/Dual-Relay-Shield-Digital-Module-5V-for-arduino-UNO-Mega-1280-or-2560-PIC-/360505399841?pt=LH_DefaultDomain_0&hash=item53efcbda21
lo sketch è molto semplice quindi tranquillo se cerchi nel forum trovi 10mila topic ;)
ps forse potresti fare a meno di arduino e comunicare direttametne con la parallela però in questo modo puoi gestire molte piu cose con arduino,led,altri relay etc :)
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Stefanoxjx



Che portata deve avere questo relè?
Una cosa semplicissima sarebbe quella di prendere un relè a 5V e consumo molto basso e lo colleghi direttamente all'alimentazione della porta usb.
Poi tramite uno script attivi e disattivi l'alimentazione a quella determinata porta usb.
Da qualche parte dovrei avere anche uno script già pronto; devo cercarlo.
Ciao.


Allora arduino è sempre in loop altrimenti come fa a leggere/scrivere sulla seriale? ;)
ti consiglio(vedo che sei alle prime armi) di prendere un arduino uno, e qualche shield relay 5v :
http://www.ebay.com/itm/Dual-Relay-Shield-Digital-Module-5V-for-arduino-UNO-Mega-1280-or-2560-PIC-/360505399841?pt=LH_DefaultDomain_0&hash=item53efcbda21
lo sketch è molto semplice quindi tranquillo se cerchi nel forum trovi 10mila topic ;)
ps forse potresti fare a meno di arduino e comunicare direttametne con la parallela però in questo modo puoi gestire molte piu cose con arduino,led,altri relay etc :)


Si, ma se deve solo accendere  e spegnere un relè (tra l'altro su linux) non ha senso fargli mettere arduino.
Arduino se lo può comprare per divertirsi ed imparare cose nuove ma per quello che gli serve credo sia solo una cosa in più.
www.multiwii.it
www.sdmodel.it

Madwriter




Che portata deve avere questo relè?
Una cosa semplicissima sarebbe quella di prendere un relè a 5V e consumo molto basso e lo colleghi direttamente all'alimentazione della porta usb.
Poi tramite uno script attivi e disattivi l'alimentazione a quella determinata porta usb.
Da qualche parte dovrei avere anche uno script già pronto; devo cercarlo.
Ciao.


Allora arduino è sempre in loop altrimenti come fa a leggere/scrivere sulla seriale? ;)
ti consiglio(vedo che sei alle prime armi) di prendere un arduino uno, e qualche shield relay 5v :
http://www.ebay.com/itm/Dual-Relay-Shield-Digital-Module-5V-for-arduino-UNO-Mega-1280-or-2560-PIC-/360505399841?pt=LH_DefaultDomain_0&hash=item53efcbda21
lo sketch è molto semplice quindi tranquillo se cerchi nel forum trovi 10mila topic ;)
ps forse potresti fare a meno di arduino e comunicare direttametne con la parallela però in questo modo puoi gestire molte piu cose con arduino,led,altri relay etc :)


Si, ma se deve solo accendere  e spegnere un relè (tra l'altro su linux) non ha senso fargli mettere arduino.
Arduino se lo può comprare per divertirsi ed imparare cose nuove ma per quello che gli serve credo sia solo una cosa in più.


Anche questo è vero gli basta il modulo relay linkato ha già tutto :D
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

maxt2

#6
Nov 05, 2012, 11:53 am Last Edit: Nov 05, 2012, 11:57 am by maxt2 Reason: 1
stavo optando per arduino e non per la parallela per il semplice motivo che ormai la parallela sembra essere scomparsa dalla circolazione.. dovrei comprare prima un cavo da usb a parallela..

Quote

Poi tramite uno script attivi e disattivi l'alimentazione a quella determinata porta usb.
Da qualche parte dovrei avere anche uno script già pronto; devo cercarlo.

questo sarebbe molto interessante.. se lo trovi fammi sapere

a me non interessa molto quanta corrente riesca a gestire il rele
mi basta solamente che riesca ad alimentate la bobina di un contattore

alberto39


ciao a tutti
ho appena trovato questo forum

volevo chiedere se con arduino si poteva fare questo:
io ho bisogno di comandare un rele (al momento me ne basta uno solo) dal computer
praticamente ho un computer con sopra linux senza interfaccia grafica (solo terminale)
io vorrei scrivere un programma per es. in c o altro, che stesso da terminale invia un segnale a arduino e questo mi dovrebbe far attivare un rele.. (cioe' e' il pc che deve dire a arduino quando attivare il rele, non mi serve che arduino da solo faccia il loop....)
in teoria sembra facile, ma sto cercando da ore su internet e non trovo niente di buono.. mi date una mano ?
vorrei capire se comprare arduino ecc oppure provare ad utilizzare direttaemente la parallela senza arduino...

mi fate capire se si puo' fare? mi date dei link?

grazie

Ciao io ho http://www.robotstore.it/product/321/Modulo-Rel%C3%A8-%28Arduino-compatibile%29.html e http://www.robotstore.it/product/448/Rel%C3%A8-Shield-per-Arduino.html
e con il monitor seriare cioè con il programma di arduino il quale è collegato con la porta usb al pc e cosi ho scritto un codice se inserisco 1 si eccita il relè e se inserisco 2 si spegne.
spero essere stato chiaro se non è cosi dimmelo!!
ecco i video di quello che ho fatto
http://www.youtube.com/watch?v=xS-Jj10O-cw&feature=plcp

Stefanoxjx

Ecco lo script, l'ho trovato :)

Code: [Select]

#!/bin/bash

# USB Power Switching Script
# Script to toggle power management status of USB devices
# by DanyTheBat

declare -a ARRAYDEV
declare -a ARRAYPROD
declare -a ARRAYPWRSTATUS
declare -a ARRAYMAXPWR
let nprod=0

function padl {   
    tmp=$2
    while [ ${#tmp} -lt $1 ];
    do
        tmp="$tmp "
    done
    echo "$tmp"
}

function padr {   
    tmp=$2
    while [ ${#tmp} -lt $1 ];
    do
        tmp=" $tmp"
    done
    echo "$tmp"
}

function lower {
    echo "$(echo $1 | tr [:upper:] [:lower:])"
}

function query_level {
    # level: on - auto - suspend

    if [ -e $1/power/level ]; then
        ARRAYPWRSTATUS[$nprod]=$(cat $devhome/power/level)
    else if [ ! -e $devhome/power/level ]; then
        ARRAYPWRSTATUS[$nprod]=NA
        fi
    fi
}

function scan_usb {
    for idVendor in $(ls /sys/bus/usb/devices/*/idVendor); do
        devhome=$(dirname $idVendor)
        devlevel=$devhome/power/level

        # if product, leo, else leo idvendor e idproduct
        if [ -e $devhome/product ]; then
            ARRAYPROD[$nprod]="$devhome"
            ARRAYPRODDESC[$nprod]="$(cat $devhome/product)"
            ARRAYMAXPWR[$nprod]="$(cat $devhome/bMaxPower)"
            query_level $devhome
            ((nprod++))
        else if [ -e $devhome/idVendor ]; then
            ARRAYPROD[$nprod]="$devhome"
            ARRAYPRODDESC[$nprod]="$(cat $devhome/idVendor):$(cat $devhome/idPro
duct)"
            ARRAYMAXPWR[$nprod]="$(cat $devhome/bMaxPower)"
            query_level $devhome
            ((nprod++))
            fi
        fi
    done
}

function list_usb {
    for element in $(seq 0 $((${#ARRAYPROD[@]} -1))); do
        echo -e "|$(padl 25 "${ARRAYPRODDESC[$element]}")|$(padl 30 "(${ARRAYPRO
D[$element]})")|$(padr 11 "[${ARRAYPWRSTATUS[$element]}]")|$(padr 7 "${ARRAYMAXP
WR[$element]}")|"
        #echo -e "${ARRAYPRODDESC[$element]}\\t(${ARRAYPROD[$element]})\\t[${ARR
AYPWRSTATUS[$element]}]\\t${ARRAYMAXPWR[$element]}"
    done
}

function toggle_usb {
    for element in $(seq 0 $((${#ARRAYPROD[@]} -1))); do
        if [[ $(lower "${ARRAYPRODDESC[$element]}") =~ $(lower "$1") ]]; then
            if [ "${ARRAYPWRSTATUS[$element]}" == "on" ] || [ "${ARRAYPWRSTATUS[
$element]}" == "auto" ] ; then
                echo "suspend" > ${ARRAYPROD[$element]}/power/level
                echo -e "${ARRAYPRODDESC[$element]} switching from [${ARRAYPWRST
ATUS[$element]}] to [suspend]"
            else
                echo "auto" > ${ARRAYPROD[$element]}/power/level   
                echo -e "${ARRAYPRODDESC[$element]} switching from [${ARRAYPWRST
ATUS[$element]}] to [auto]"
            fi
        fi
    done
}

function verify_usb {
    for element in $(seq 0 $((${#ARRAYPROD[@]} -1))); do
        if [[ $(lower "${ARRAYPRODDESC[$element]}") =~ $(lower "$1") ]]; then
            return 0
        fi
    done

    return 1
}

function get_usb_by_name {
    for element in $(seq 0 $((${#ARRAYPROD[@]} -1))); do
        if [[ $(lower "${ARRAYPRODDESC[$element]}") =~ $(lower "$1") ]]; then
            echo -e "|$(padl 25 "${ARRAYPRODDESC[$element]}")|$(padl 30 "(${ARRA
YPROD[$element]})")|$(padr 11 "[${ARRAYPWRSTATUS[$element]}]")|$(padr 7 "${ARRAY
MAXPWR[$element]}")|"
        fi
    done
}

scan_usb

case $1 in
    -l) echo -e
        echo -e "USB Power Switching Script"
        echo -e "---------------------------------------------------------------
---------------"
        list_usb
        echo -e "---------------------------------------------------------------
---------------"
        echo -e
    ;;

    -t) if [ ! "$2" == "" ] && verify_usb $2; then
        toggle_usb $2
        else
        echo "Specify a valid USB Device: '$2' doesn't exist!!!"
        fi
    ;;

    -v) if verify_usb $2; then
        echo -e
        echo -e "USB Power Switching Script"
        echo -e "---------------------------------------------------------------
---------------"
        get_usb_by_name $2
        echo -e "---------------------------------------------------------------
---------------"
        echo -e
        echo -e "'$2' USB Device exists!!!"
        echo -e
        else
        echo -e
        echo -e "USB Power Switching Script"
        echo -e
        echo -e "'$2' USB Device doesn't exist!!!"
        echo -e
        fi
    ;;

    *) echo -e
       echo -e "USB Mouse Power Switching Script"
       echo -e "----------------------------------------------------------------
--------------"
       echo -e "-l\\tList USB Devices"
       echo -e "-t name\\ttoggle USB Device 'name' status"
       echo -e "-v name\\tverify if USB Device 'name' exists"
       echo -e
    ;;
esac

www.multiwii.it
www.sdmodel.it

pablos

#9
Nov 07, 2012, 02:31 pm Last Edit: Nov 07, 2012, 03:52 pm by pablos Reason: 1
Io lo facevo con la parallela, ma si parla dei vecchi 286, 386, 486 con Qbasic inviavo un carattere all' IRQ7 (se non ricordo male) e visualizzavo il byte inviato in bit su 8 leds.
La porta parallela possiede 8 linee in output e 4 in input digitali (dovrei ripassare la materia non ricordo se gli 8 bit sono I/O o solo out)
Se vuoi semplicemente usare la parallela qualche schemino in rete lo trovi ancora, il linux non lo conosco però penso che qualche linea di comando per la parallela su C si trova sicuramente.

Guarda cercando con qualche minuto in più qui trovi i pin e un pezzetto di programma c++, anche una bozza di schema con relè
http://it.wikipedia.org/wiki/Porta_parallela
Con questo sistema il dato non permane sui pin della parallela, dovrai provvedere tu a crearti una memoria a 1 bit magari con un flip-flop
no comment

maxt2


e con il monitor seriare cioè con il programma di arduino il quale è collegato con la porta usb al pc e cosi ho scritto un codice se inserisco 1 si eccita il relè e se inserisco 2 si spegne.
spero essere stato chiaro se non è cosi dimmelo!!


grazie per il video
il punto e' che io non voglio comandarlo interattivamente (e tramite quel programma)
io voglio comandarlo da terminale (cioe' senza interfaccia grafica) e non ho capito se e' una cosa facile da fare oppure no

cioe' se devo fare un programma in c, non so dove trovare qualcosa un esempio, qualcosa da riutilizzare ecc.

Stefanoxjx



e con il monitor seriare cioè con il programma di arduino il quale è collegato con la porta usb al pc e cosi ho scritto un codice se inserisco 1 si eccita il relè e se inserisco 2 si spegne.
spero essere stato chiaro se non è cosi dimmelo!!


grazie per il video
il punto e' che io non voglio comandarlo interattivamente (e tramite quel programma)
io voglio comandarlo da terminale (cioe' senza interfaccia grafica) e non ho capito se e' una cosa facile da fare oppure no

cioe' se devo fare un programma in c, non so dove trovare qualcosa un esempio, qualcosa da riutilizzare ecc.


Se usi lo script che ti ho mandato, una volta capito su quale porta usb è collegato il relè, alla fine diventa un singolo comando per attivare e disattivare il relè.
Potrai lanciarlo manulamente o metterlo in cron in base alle tue esigenze.
www.multiwii.it
www.sdmodel.it

maxt2

grazie per lo script

appena ho un po' di tempo mi metto con calma e vedo di capire come funziona

Go Up