Проблема подключения датчика Холла к ардуино нано

Chirva
Offline
Зарегистрирован: 21.09.2014

Здравствуйте. 

Помогите мне, пожалуйста, решить мою проблему с работой датчика Холла. Я использую ардуино нано и датчик холла с LM393. Вообще-то у меня имеется два датчика, один из них подключен к выходу RX0, другой к D10. Тот, который подключен к RX0 работает замечательно, видит магнит, а который к 10 выходу при подключении к ардуино перестает реагировать на магнит. Если я его отключаю от ардуино то все работает. Код вы можете посмотреть ниже, я использую еще NRF24l01 и Adafruit Motor Shield. Сам не очень разбираюсь в этих вещах, код писал знакомый перуанец и до него я достучаться не могу, он уже гдке-то в Южной Америке. 

/**
 * Prog for Remote Control
 *
 * Pins:
 * Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7
 *
 */
#include <AFMotor.h>
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
 
AF_DCMotor motor(3,MOTOR12_64KHZ);
//AF_DCMotor Selenoide(3);
 
int S0 = 10; // Sensor 0
int S1 = 0; // Sensor 1
int pre_state =1; // 1: 
int In_S0 = 0; // Input Sensor 0
int In_S1 = 0; // Input Sensor 1
int ChangeState;
 
// Pin 4,5,7,8,10,12 are used for DC Motor
 
int Selenoid = 5; // selenoid 1
 
int State = 0; //Idle
int NxtState = 0; 
 
byte Data_send=0;
 
unsigned long Command;
void setup(){
// Configure pin mode for inputs 
 
  //Selenoide.setSpeed(0);
  //Selenoide.run(RELEASE);
  
  motor.run(FORWARD);
  motor.setSpeed(255); 
  motor.run(RELEASE);
  delay(4000);  
 
  pinMode(Selenoid, OUTPUT); 
 
  pinMode(S0, INPUT_PULLUP); 
  pinMode(S1, INPUT_PULLUP); 
 
 
  
  Serial.begin(9600);//Set the SPI Driver.
  Mirf.spi = &MirfHardwareSpi;//Setup pins / SPI.
  Mirf.init();
  Mirf.setRADDR((byte *)"Actuator");//Configure reciving address.
  
  //Set the payload length to sizeof(unsigned long) the
  //return type of millis().  
  //NB: payload on client and server must be the same.
  Mirf.payload = sizeof(unsigned long);
  /*
   * Write channel and payload config then power up reciver.
   */
   
  Mirf.config();
  
  Serial.println("Actuator Ready"); 
  
  byte data[Mirf.payload]; //A buffer to store the data.
}
 
void loop(){
   
  State=NxtState;
  if(Mirf.dataReady()){
    //ChangeState=1;
    Serial.println("DATA..."); 
    Mirf.getData((byte *) &Command);
  }else{
    //ChangeState=1;
    Command=-1;
  }
  
  In_S0=digitalRead(S0);
  In_S1=digitalRead(S1);
  ChangeState=1;
  if(ChangeState){
    switch ( State ) {
    case 0:            // IDLE
      if((Command==1) && (pre_state==2)){ pre_state=State;
                                          NxtState=1;} // NxtState=UP 
      else if((Command==2)&& (pre_state==1)){ pre_state=State;
                                            NxtState=2;} //NxtState=DOWN
 
      else{NxtState=0;}
      break;
    case 1:            // UP
      if(Command==2){ pre_state=State; 
                      NxtState=2;} // NxtState=DOWN 
      else if(Command==3){pre_state=State; 
                          NxtState=3;} //NxtState=STOP
      else if(In_S0==0){pre_state=State; 
                        NxtState=0;} //NxtState=IDLE
      else{NxtState=1;}
      break;
    case 2:            // DOWN
      if(Command==1){pre_state=State; 
                     NxtState=1;} // NxtState=UP 
      else if(Command==3){pre_state=State; 
                          NxtState=3;} //NxtState=STOP
      else if(In_S1==0){pre_state=State; 
                        NxtState=0;} //NxtState=DOWN
      else{NxtState=2;}
      break;
    case 3:            // STOP
      if(Command==1){ pre_state=State; 
                      NxtState=1;} // NxtState=UP 
      else if(Command==2){pre_state=State; 
                          NxtState=2;} //NxtState=DOWN
      else{NxtState=3;}
      break;
    default:            // Note the colon, not a semicolon
      Serial.println("Error in State machine..."); 
      break;
    }
  }
 
    switch ( State ) {
    case 0:            // IDLE
      // Selenoide
      digitalWrite(Selenoid, LOW);
      delay(1500);
      //UP 
      motor.run(RELEASE);
      delay(1000);
      Serial.println("State: IDLE"); 
      break;
    case 1:            // UP
      // Selenoide
      digitalWrite(Selenoid, HIGH);
      delay(1500);
      //UP 
      //Serial.print("FORWARD");
      motor.run(FORWARD);
      motor.setSpeed(255); 
      
      Serial.println("State: UP Motor");
      break;
    case 2:            // DOWN
      // Selenoide
      digitalWrite(Selenoid, HIGH);
      delay(500);
      //
      //Serial.print("BACKWARD");
      motor.run(BACKWARD);
      motor.setSpeed(255); 
      
      Serial.println("State: DOWN Motor");
      break;
    case 3:            // STOP
      // Selenoide
      digitalWrite(Selenoid, HIGH);
      delay(500);
      //STOPPED 
      motor.run(RELEASE);
      delay(1000);
      
      Serial.println("State: STOPPED Motor");
      break;
    default:            // Note the colon, not a semicolon
      Serial.println("Error in State machine..."); 
      break;
    }
 
}
vvadim
Offline
Зарегистрирован: 23.05.2012

NRF24l01 сидит и на 10 пине, а вы туда и датчик холла подключаете.

И код вставляйте правильно http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

и с RX-пина датчик нужно переместить на другой пин

art100
Offline
Зарегистрирован: 09.03.2014

круто

два провода воткнуть в одну дырку и не заметить

два провода ведь не лезут в одну дырку

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

art100 пишет:

круто

два провода воткнуть в одну дырку и не заметить

два провода ведь не лезут в одну дырку


У дырки 2 стороны. Он думает что если сверху то это верхняя 10 а если снизу то это нижняя 10. Вот.

Chirva
Offline
Зарегистрирован: 21.09.2014

NRF 24l01 сидит на 12,11,13,8 и 7. Нет, проблема не в том. Пока не решил в чем

Chirva
Offline
Зарегистрирован: 21.09.2014

Значится так, при подключение питания отдельно, от другого блока, все работает. Помогите разобраться, в чем проблема. Как сказал, NRF не подключено к 10 пину. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

честно сказать не понял зачем компаратор. у холла выход открытый коллектор. делаете подтяжку и все

а просто датчики отдельно тестировали? без доп. шилдов и тп.

Chirva
Offline
Зарегистрирован: 21.09.2014

у меня датчик на одной плате с lm393. Сейчас попробую фотографию прикрепить. На самом датчике есть диод (если правильно называю) который указывает, работает он или нет. Если отключить его от ардуины- работает, если подключить питание с другого блока тоже работает. Ставлю другой датчик- таже ерунда, хотя при работе от RX0 тот датчик срабатывал. Т.е проблема либо в коде либо в подкючении, питании. Не знаю, пока могу только экспериментировать. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

что за глупость цеплять на аналоговый пин? используй DO

много букв а все равно не понял. без ардуины датчики оба работают или нет? ну максимум питание с ардуины

Chirva
Offline
Зарегистрирован: 21.09.2014

К сожалению, я инженер-механие, потому не очень в этом всем разбираюсь. Если я подключаю к DO (так понял Digital Output) происходит обратное, те sensor просто гаснит и тоже не реагтрует на магнит (опять таки, на RX0 все стабильно)

Chirva
Offline
Зарегистрирован: 21.09.2014

хорошо, значит без ардуины датчики работают. Оба. С ардуиной один работает (который на RX0) один нет (который на pin10). Меняю их местами(физически). Происходит тоже самое, на RX0 работает, на pin 10 не работает. Питание у обоих от отдельного блока питания(не ардуино). Теперь подключаю неработающий датчик к другому блоку питания- работает. Надеюсь понятно. Если вруг не понятно, говорите еще раз все напишу и постараюсь объяснить 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а земли объеденены? и зачем каждый датчик питать от отдельного блока питания?

Chirva
Offline
Зарегистрирован: 21.09.2014

Да, земли, фактически, объеденены. И питаются они от одного провода. Просто, в качестве эксперимента, запитал его от другого источника и все заработало. Но другой источник в конструкции не поместится, не могу использовать его. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ищи ошибку в схеме

Chirva
Offline
Зарегистрирован: 21.09.2014

если не затруднит, посмотрите программирование, может там какая ошибка забралась? 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

вот например)) поймешь о чем я

// Pin 4,5,7,8,10,12 are used for DC Motor

так вот еще прикол

* Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

короче если зря этот шилд использовал. вот из описалова данного шилда

What pins are not used on the motor shield?
All 6 analog input pins are available. They can also be used as digital pins (pins #14 thru 19)
Digital pin 2, and 13 are not used.
The following pins are in use only if the DC/Stepper noted is in use:
Digital pin 11: DC Motor #1 / Stepper #1 (activation/speed control)
Digital pin 3: DC Motor #2 / Stepper #1 (activation/speed control)
Digital pin 5: DC Motor #3 / Stepper #2 (activation/speed control)
Digital pin 6: DC Motor #4 / Stepper #2 (activation/speed control)
The following pins are in use if any DC/steppers are used
Digital pin 4, 7, 8 and 12 are used to drive the DC/Stepper motors via the 74HC595 serial-to-parallel latch

на тех же пинах висит радиомодуль

лучше использовать внешний отдельный драйвер

вся проблема в безграмотности. не изучая что покупаешь, можно положить эту железку на полку до лучших времен ну или перепаивать

Chirva
Offline
Зарегистрирован: 21.09.2014

да, но это же вроде просто комментарии его к коду. В самом же коде вроде как не использован 10 пин. Или я ошибаюсь? Как можно посмотреть не использовал ли его где-нибудь дважды? 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так изза этого я и привел кусок из описания данного шилда, так как комментарий не факт что правильный

Chirva
Offline
Зарегистрирован: 21.09.2014

коммент скорее всего не правильный. Перуанец писал, он как программист вроде ничего, но разговаривает, в основном, на испанском. Потому не все понимал, что он мне говорил. А сейчас он в Южной Америке, никак его поймать не могу

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

мда. забей уже на коммент

Chirva
Offline
Зарегистрирован: 21.09.2014

На это забил

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

описание посмотри. не получится нормально шилд и радиомодуль запустить на хардварном spi

Chirva
Offline
Зарегистрирован: 21.09.2014

А можно поподробней чуть, что сделать что-бы все заработало? 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

перепаивать или проводками подключать на другие пины. отказаться от либы для управления двигателем