Fórum | MyPower.CZ | Obnovitelné zdroje energie - energetická soběstačnost | Právě je sob zář 22, 2018 10:28 pm


Uprava kodu pro senzor pohybu

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.

Uprava kodu pro senzor pohybu

Příspěvekod fidos » pon úno 22, 2016 11:40 pm

Zdravim vsechny

jsem uplny zacatecnik s Arduinem a programovani take neni moje silna stranka, a proto pisu sem, jestli by mi nekdo nepomohl se zmenou kodu pro snimac pohybu :

HC-SR501
http://arduinobasics.blogspot.cz/2013/1 ... art-2.html

ktery pak ovlada transmitter:

http://arduinobasics.blogspot.cz/2014/0 ... orial.html

tady je kod, upravoval jsem ho podle sebe, ale bohuzel nekde je chyba a ja nevim kde :

Pin Configuration:
- Digital#12 of Arduino to Data Input of TX module
- Digital#2 of Arduino to Motion Detection Alarm
----------------------------------------------------------------------------------*/
#include <VirtualWire.h>
char *controller;

void setup() {
pinMode(13,OUTPUT);
pinMode(2,INPUT);
vw_set_ptt_inverted(true);
vw_set_tx_pin(12);
vw_setup(4000);
}

void loop(){
int motion_1 = 2;
int light_1 = 13;

pinMode (motion_1,INPUT);
pinMode (light_1, OUTPUT);

digitalWrite(light_1,LOW);
delay(1000); //this delay is to let the sensor settle down before taking a reading

int sensor_1 = digitalRead(motion_1);
if (sensor_1 == LOW){
digitalWrite(light_1,HIGH);
delay(500);
digitalWrite(light_1,LOW);
delay(500);
}

if(digitalRead(2) == 1){
//You can add a for loop here to take multiple shots
controller="1" ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx();
digitalWrite(13,1);
delay(10);
}
else{
controller="0";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx();
digitalWrite(13,0);
}
}

Pro zkusene si myslim, ze to bude jednoduche, vedel by nekdo?
fidos
 
Příspěvky: 8
Registrován: pát úno 19, 2016 3:43 pm
Reputation: 0

Re: Uprava kodu pro senzor pohybu

Příspěvekod 8milan8 » úte úno 23, 2016 10:58 am

Otázka je, co ti nejde. :)

Jinak vw_setup(1200) nastavuje bitrate na 1200. Čím menší, tím lepší, ale pod 1000 už se nevyplatí moc jít. Já používám 1200 a dosah je ideální. Záleží na vzdálenosti...

Další věcí je to, že tohle pásmo, na kterém tyto moduly vysílají je free a nemělo by se moc zarušovat. Takže se počítá s tím, že to bude používané jen na odeslání nějaké informace jednou za dlouhou dobu. Ten kód co jsem poslal tohle nesplňuje, spíše jsem učesal co jsi napsal a když to bude fungovat, tak se to dá vyladit tak, aby to fungovalo dobře a neporušovalo to legislativu. ;) Tenhle kód pošle každých 100ms buď 1 nebo 0.


Kód: Vybrat vše
#include <VirtualWire.h>

#define PIN_MOTION  2
#define PIN_LIGHT   13
#define PIN_TX      12

char *message;

void setup() {
  pinMode(PIN_LIGHT, OUTPUT);
  pinMode(PIN_MOTION, INPUT);

  digitalWrite(PIN_LIGHT, LOW);
 
  vw_set_ptt_inverted(true);
  vw_set_tx_pin(PIN_TX);
  vw_setup(1200);

  delay(1000);
}

void loop(){
  byte input = digitalRead(PIN_MOTION);
 
  if (input == HIGH){
    digitalWrite(PIN_LIGHT, HIGH);
   
    message = "1" ;
    vw_send((uint8_t *)message, strlen(message));
    vw_wait_tx();
  }
  else{
    digitalWrite(PIN_LIGHT, LOW);
   
    message = "0";
    vw_send((uint8_t *)message, strlen(message));
    vw_wait_tx();
  }

  delay(100);
}

8milan8
 
Příspěvky: 127
Registrován: čtv led 01, 2015 6:30 pm
Reputation: 3

Re: Uprava kodu pro senzor pohybu

Příspěvekod fidos » úte úno 23, 2016 4:33 pm

Diky moc za kod

Ted mi ale nejde zkompilovat projekt a hlasi toto : collect2.exe: error: ld returned 5 exit status

Co je spatne?
fidos
 
Příspěvky: 8
Registrován: pát úno 19, 2016 3:43 pm
Reputation: 0

Re: Uprava kodu pro senzor pohybu

Příspěvekod fidos » úte úno 23, 2016 4:37 pm

resp. toto :

collect2.exe: error: ld returned 5 exit status

Užita knihovna VirtualWire v adresáři: d:\ARDUINO\arduino-nightly\libraries\VirtualWire (legacy)
exit status 1
Chyba kompilace.
fidos
 
Příspěvky: 8
Registrován: pát úno 19, 2016 3:43 pm
Reputation: 0

Re: Uprava kodu pro senzor pohybu

Příspěvekod fidos » úte úno 23, 2016 5:04 pm

Na Win10 mi to ale chodi akorat pise :

C:\Users\fidos\Documents\Arduino\sketch_feb23a\sketch_feb23a.ino: In function 'void loop()':

C:\Users\fidos\Documents\Arduino\sketch_feb23a\sketch_feb23a.ino:29:13: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

message = "1" ;

^

C:\Users\fidos\Documents\Arduino\sketch_feb23a\sketch_feb23a.ino:36:13: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

message = "0";

^

Jinak kdybych to chtel upravit, aby to odesilalo jen pri pohybu - senzor message = "1" je to mozny?
fidos
 
Příspěvky: 8
Registrován: pát úno 19, 2016 3:43 pm
Reputation: 0

Re: Uprava kodu pro senzor pohybu

Příspěvekod 8milan8 » úte úno 23, 2016 7:43 pm

Tak tady to je upravené. Funguje to takto. Nastaví se pin 13 (PIN_LIGHT) jako výstup pro kontrolní ledku a pin 2 (PIN_MOTION) jako vstup od čidla pohybu. Na pin 12 (PIN_TX) je připojený TX RF modul data (tedy jen datový pin).

Teď to udělá to, že pokud se na pinu 2 od čidla pohybu objeví logická jednička, tak se rozsvítí kontrolní ledka na pinu 13 a odešle se "1" pomocí RF modulu. Poté se vteřinu čeká a vše se opakuje. Takže dokud bude čidlo pohybu produkovat logickou jedničku, tak se každou vteřinu odešle "1".

Kód: Vybrat vše
#include <VirtualWire.h>

#define PIN_MOTION  2
#define PIN_LIGHT   13
#define PIN_TX      12

char *message;

void setup() {
  pinMode(PIN_LIGHT, OUTPUT);
  pinMode(PIN_MOTION, INPUT);

  digitalWrite(PIN_LIGHT, LOW);
 
  vw_set_ptt_inverted(true);
  vw_set_tx_pin(PIN_TX);
  vw_setup(1200);

  delay(1000);
}

void loop(){
  byte input = digitalRead(PIN_MOTION);
 
  if (input == HIGH){
    digitalWrite(PIN_LIGHT, HIGH);
   
    message = "1" ;
    vw_send((uint8_t *)message, strlen(message));
    vw_wait_tx();
    delay(1000);
  }
  else{
    digitalWrite(PIN_LIGHT, LOW);
  }
}
8milan8
 
Příspěvky: 127
Registrován: čtv led 01, 2015 6:30 pm
Reputation: 3

Re: Uprava kodu pro senzor pohybu

Příspěvekod fidos » stř úno 24, 2016 12:06 am

Skvely! Zda se, ze funguje, jeste cekam az mi prijde reciever, abych to mohl cely otestovat.

Dikes si borec :)
fidos
 
Příspěvky: 8
Registrován: pát úno 19, 2016 3:43 pm
Reputation: 0

Re: Uprava kodu pro senzor pohybu

Příspěvekod 8milan8 » čtv úno 25, 2016 9:40 am

Kdyžtak dej pak vědět, poladíme i druhou stranu. ;)
8milan8
 
Příspěvky: 127
Registrován: čtv led 01, 2015 6:30 pm
Reputation: 3

Re: Uprava kodu pro senzor pohybu

Příspěvekod fidos » pon dub 11, 2016 9:15 pm

Ahoj
jsi na prijmu? potreboval bych poradit s recieverem :)
fidos
 
Příspěvky: 8
Registrován: pát úno 19, 2016 3:43 pm
Reputation: 0

Re: Uprava kodu pro senzor pohybu

Příspěvekod fidos » čtv lis 17, 2016 6:45 pm

zdravim

tak skoro po roce mam cas, abych dokoncil dalkovou spoust :) Akorat zkusenosti s arduinem mam porad stejny, a tak bych se chtel zeptat jestli by mi nekdo nepomoh upravit kod pro reciever. Mel by umet prijmout signal z transmiteru a rozsvitit ir ledku, ktera zapne fotak. Viz.:http://www.instructables.com/id/Motion-Triggered-DSLR-Remote-System/?ALLSTEPS

kod :

Remote Receiver (RX - Nikon):

#include
#include

Nikon D5000(11); // I Use Nikon (please use the code that works with your DSLR)

void setup() {

vw_set_ptt_inverted(true);

vw_set_rx_pin(12);

vw_setup(4000);

vw_rx_start();

unsigned int data = 0;

pinMode(13, OUTPUT);

pinMode(11, OUTPUT);

}

void loop() {

uint8_t buf[VW_MAX_MESSAGE_LEN];

uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) {

if(buf[0]=='1') {

digitalWrite(13,1);

D5000.shutterNow();

}

if(buf[0]=='0') {

digitalWrite(13,0);

}

}

}

Zkousel sem tenhle kod (dole) a zda se, ze reciever prijima - pri pohybu na transmiteru sepne snimac a posila na reciever - ledka na desce nebo na vystupu se rozblika a pri vypnuti transmiteru prestane. Akorat mi neni jasny proc, kdyz transmiter nevysila, ledka na recieveru furt sviti.

kod :

#define rfReceivePin A0 //RF Receiver pin = Analog pin 0
#define ledPin 13 //Onboard LED = digital pin 13

unsigned int data = 0; // variable used to store received data
const unsigned int upperThreshold = 70; //upper threshold value
const unsigned int lowerThreshold = 50; //lower threshold value

void setup(){
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}

void loop(){
data=analogRead(rfReceivePin); //listen for data on Analog pin 0

if(data>upperThreshold){
digitalWrite(ledPin, LOW); //If a LOW signal is received, turn LED OFF
Serial.println(data);
}

if(data<lowerThreshold){
digitalWrite(ledPin, HIGH); //If a HIGH signal is received, turn LED ON
Serial.println(data);
}
}
fidos
 
Příspěvky: 8
Registrován: pát úno 19, 2016 3:43 pm
Reputation: 0

Re: Uprava kodu pro senzor pohybu

Příspěvekod rottenkiwi » čtv lis 17, 2016 8:17 pm

No lebo tam nie je poriešenie stavu, ak máme data<lowerThreshold
a po ňom je na dátovom analógovom pine niečo medzi 50 a 70.
Čo sa stane vtedy ? No dáta sú mimo intervalu a nemá čo LED na pine13 vypnúť.
Only God & bank can create something from nothing. LTC: LX4UmmYHzT293zcJJ4BjTcPTRSHoLWLDn7
Vodík LiFePO charge BMS SEI formation Float IBM Quantum Zverák 787 Dreamliner Issue Ako žiť eko Online-monitoring
Uživatelský avatar
rottenkiwi
 
Příspěvky: 1716
Registrován: pát úno 13, 2015 2:24 pm
Bydliště: SO, SK
Reputation: 69

Re: Uprava kodu pro senzor pohybu

Příspěvekod fidos » čtv lis 17, 2016 9:09 pm

Kdyz se vratim ke kodu pro ir ledku, proc mi reciever nezapina ir, kdyz transmiter posila? :) sry sem uplnej zacatecnik

tady jenom aktualizuju kod, ktery je pro me, mam canon a ne nikon :

/*----------------------------------------------------------------------------------
Motion Activated DSLR Shutter Remote
Receiver Sketch (433mHz Serial RX)
Written By: Angelo Casimiro (ASCAS/ TechBuilder)
Date Written: October 18, 2014

Pin Configuration:
- Digital#12 of Arduino to Data Out of RX module
- Digital#11 of Arduino to IR LED
----------------------------------------------------------------------------------*/
#include <multiCameraIrControl.h>
#include <VirtualWire.h>

Canon D5(11);

void setup()
{
vw_set_ptt_inverted(true);vw_set_rx_pin(12);
vw_setup(4000);vw_rx_start();unsigned int data = 0;
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);
}
void loop(){

uint8_t buf[VW_MAX_MESSAGE_LEN];uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)){
if(buf[0]=='1'){
digitalWrite(13,1);
D5.shutterNow();
}
if(buf[0]=='0'){
digitalWrite(13,0);
}
}
}
fidos
 
Příspěvky: 8
Registrován: pát úno 19, 2016 3:43 pm
Reputation: 0


Zpět na Arduino

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník

Reputation System ©'