Fórum | MyPower.CZ | Obnovitelné zdroje energie - energetická soběstačnost | Poslední návštěva: pát zář 20, 2019 9:19 am


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

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

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

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

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

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

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

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

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

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

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úť.
Dělej vše, jak nejlépe dovedeš. Ale ne lépe. 4. dohoda.
Si anode Spectrum BMS SEI formation Float Ochrana High SOC deg. MPPT Post Bud Bindi 1993
Uživatelský avatar
rottenkiwi
 
Příspěvky: 2798
Registrován: pát úno 13, 2015 2:24 pm
Bydliště: SO, SK

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


Zpět na Arduino

Kdo je online

Uživatelé procházející toto fórum: CC [Bot] a 0 návštevníků

Reputation System ©'