Arduino servo mechanizm - koziollbk - 16-04-2018
Witam, mam problem z moim projektem do szkoły. Ogólnie mówiąc zrobiłem makietę domku, zamontowałem w pokojach czujniki dymu i gazu MQ-2, zrobiłem proste automatyczne otwieranie drzwi na RFID + serwomechanizm i na koniec powiadomienie SMS, jeżeli poziom gazu przekroczy odpowiedni poziom. Wszystko działa do czasu gdy przykładam zapalniczkę i zostaje wysyłane powiadomienie sms - zaczyna wariować serwomechanizm i drzwi zaczynają się same otwierać i zamykać przez chwilę . Powiadomienie sms dochodzi prawidłowo. Dodam, że bez linijek wysyłania sms wszystko działa prawidłowo i wtedy serwo nie reaguje. Zasilam to na chwile obecną zasilaczem od komputera 350 W, używam osobnej linii 5v do zasilania czterech czujników MQ-2, osobnej używam do serwa, linii 3.3 v do RFID, i jednej wspólnej do modułu bluetooth (którego użyje w przyszłości jak uporam się z drzwiami), wyświetlacza i modułu gsm (SIM800L v2.2). Przewody masowe mam też osobne, tak jak 5V, Pewnie tu gdzieś leży problem bo nie jestem jeszcze dobrze obeznany w elektronice Jak zasilałem serwo z arduino to problem również był.
Może zastosowanie kondensatora na wyjściu zasilania serwomechanizmu rozwiąże problem ?
pozdrawiam serdecznie
RE: Arduino servo mechanizm - es2 - 16-04-2018
Pokaż schemat. Serwomechanizm i GSM pobierają dużo prądu w impulsie i pewnie jest problem z zasilaniem.
RE: Arduino servo mechanizm - Robson Kerman - 16-04-2018
Proszę podać kod, oraz model serwomechanizmu.
RE: Arduino servo mechanizm - koziollbk - 16-04-2018
model serwa to Tower pro SG-90
a kod :
Kod: #include <SPI.h>
#include <RFID.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include<SoftwareSerial.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
#include <Servo.h>
int czujnik = A0;
int czujnik2 = A2;
int czujnik3 = A4;
int czujnik4 = A6;
int odczyt = 0 ;
int odczyt2 = 0 ;
int odczyt3 = 0;
int odczyt4 = 0;
//int buzzer = 11;
int poziom_gazu = 400;
int pos = 90;
int suma;
#define SIM800_TX_PIN 8
#define SIM800_RX_PIN 7
SoftwareSerial serialSIM800(SIM800_TX_PIN, SIM800_RX_PIN);
Servo myservo;
#define SDA_DIO 9
#define RESET_DIO 10
RFID RC522(SDA_DIO, RESET_DIO);
void setup()
{
pinMode(czujnik, INPUT);
pinMode(czujnik2, INPUT);
pinMode(czujnik3, INPUT);
pinMode(czujnik4, INPUT);
myservo.attach(2);
Serial.begin(9600);
SPI.begin();
RC522.init();
//pinMode(buzzer, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setBacklight(HIGH);
RC522.init();
while (!Serial);
serialSIM800.begin(9600);
delay(1000);
}
void loop()
{
myservo.write(pos);
odczyt = analogRead(czujnik);
odczyt2 = analogRead(czujnik2);
odczyt3 = analogRead(czujnik3);
odczyt4 = analogRead(czujnik4);
Serial.print(odczyt);
Serial.print(" ");
Serial.print(odczyt2);
Serial.print(" ");
Serial.print(odczyt3);
Serial.print(" ");
Serial.print(odczyt4);
Serial.println(" ");
czujnik_gazu();
lcd.setCursor(1, 0);
lcd.print("Przyloz karte");
if (RC522.isCard())
{
RC522.readCardSerial();
Serial.println("Card detected:");
for ( int i = 0; i < 5; i++)
{
Serial.print(RC522.serNum[i], DEC);
}
suma = RC522.serNum[0] + RC522.serNum[1] + RC522.serNum[2] + RC522.serNum[3] + RC522.serNum[4];
Serial.print(suma, DEC);
if (suma == 542) {
// digitalWrite(buzzer, HIGH);
lcd.setCursor(8, 0);
lcd.print(" ");
lcd.setCursor(1, 0);
lcd.print("Dziekuje ");
lcd.setCursor(1, 1);
lcd.print("Milego dnia ");
delay(250);
// digitalWrite(buzzer, LOW);
void otiweranie_drzwi();
} else {
lcd.setCursor(1, 0);
lcd.print("Incorrect ID!");
}
}
delay(1000);
lcd.clear();
}
void czujnik_gazu() {
if (odczyt > poziom_gazu or odczyt2 > poziom_gazu or odczyt3 > poziom_gazu or odczyt4 > poziom_gazu )
{
serialSIM800.write("AT+CMGF=1\r\n");
delay(1000);
//serialSIM800.write("AT+CMGS=\"+48xxx\"\r\n");
delay(1000);
serialSIM800.write("Poziom gazu w Twoim domu jest zbyt wysoki !!");
delay(1000);
serialSIM800.write((char)26);
delay(1000);
}
}
void otiweranie_drzwi() {
for (pos = 90; pos >= 10; pos--)
{
myservo.write(pos);
delay(20);
}
delay(6000);
for (pos = 10; pos <= 90; pos++)
{
myservo.write(pos );
delay(20);
}
}
|