Skocz do zawartości

betepok

Użytkownicy
  • Zawartość

    35
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O betepok

  • Ranga
    3/10

Informacje

  • Płeć
    Mężczyzna
  1. Zadanie wykonane poniżej kod może się komuś przyda. Wystarczyło zmniejszyć czułość diody IR. Przy przesuwaniu kulek nie wyłapuje wiązki. Generalnie działa. W przyszłości dodam drugi silnik, zasobnik, czujnik na łuski. Może zaprojektuje jakąś prostą płytkę dla uporządkowania elementów w sterowniku. marek1707 dzięki za dobre słowo i wsparcie. Zasobnik do wydruku 3D Sam sterownik /* * - uruchaminie silnikow DC przy urzyciu 1xL298 dwukanalowy sterownik silnikow * - sterowanie predkosci silnikow 2x10kΩ * - czujnik podczerwieni IR * - przelacznik mikrostyk */ unsigned long aktualnyCzas = 0; unsigned long CzasStartuSilnika_A = 0; unsigned long CzasStartuSilnika_B = 0; int buttonPin2 = 3; //Wlacznik silnika B //Silnik A - podlaczenie do L298 int in1 = 4; int in2 = 5; int ConA = 6; int speed1; // czytaj z (A0) //Silnik B - podlaczenie do L298 int in3 = 7; int in4 = 8; int ConB = 9; int speed2; // czytaj z (A1) void setup() { //Wlacznik silnika A Serial.begin(9600); pinMode(12, INPUT);// Czujnik IR digitalWrite(12, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone) pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); //Wlacznik silnika B pinMode(buttonPin2, INPUT); //pracuje jako wejscie mikrostyk digitalWrite(buttonPin2, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone) pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); } //Silnik A - Kontrola obrotów i predkosci void TurnOnMotorA(){ //Wlaczenie silnika A digitalWrite(in1, LOW); //Zmiana kierunku - wstecz HIGH, LOW digitalWrite(in2, HIGH); speed1 = analogRead(A0); //Czytanie wartosci z A0 speed1 = speed1*0.2492668622; //Kalibracja potencjometru analogWrite(ConA,speed1); //Przeslanie wartosci do silnika } void TurnOffMotorA(){ //Wylaczenie silnika A digitalWrite(in1, LOW); //Zmiana kierunku - wstecz HIGH, LOW digitalWrite(in2, LOW); speed1 = analogRead(A0); speed1 = speed1*0.2492668622; analogWrite(ConA,speed1); } //Silnik B void TurnOnMotorB(){ //Wlaczenie silnika B digitalWrite(in3, LOW); digitalWrite(in4, HIGH); speed2 = analogRead(A1); speed2 = speed2*0.2492668622; analogWrite(ConB,speed2); } void TurnOffMotorB(){ //Wylaczenie silnika B digitalWrite(in3, LOW); digitalWrite(in4, LOW); speed2 = analogRead(A1); speed2 = speed2*0.2492668622; analogWrite(ConB,speed2); } void loop() { //Pobierz liczbe milisekund od startu aktualnyCzas = millis(); //Silnik A int detectIR = digitalRead(12); // Czytanie wartosci czujnika IR if(detectIR == HIGH && aktualnyCzas - CzasStartuSilnika_A >= 5000UL){ Serial.println("MOTOR STOP"); CzasStartuSilnika_A = aktualnyCzas; TurnOffMotorA(); } delay(100); if (detectIR == LOW && aktualnyCzas - CzasStartuSilnika_A >= 2000UL){ Serial.println("Motor START"); CzasStartuSilnika_A = aktualnyCzas; TurnOnMotorA(); } //Silnik B if(digitalRead(buttonPin2) == HIGH) { //Jezeli przycisk nie jest wcisniety TurnOnMotorB(); //Wlacz Motor B } else { TurnOffMotorB(); //Wylacz Motor B } }
  2. Próbujmy jeszcze raz. https://photos.app.goo.gl/D6AvMrhXorYu1ZrM6 https://photos.app.goo.gl/HRiERGmvHiqbSac26 int detect = digitalRead(12); // wykrywa stan HIGH/LOW if(detect == LOW && czasON - czasLOW >= 2000UL){ CzasStartuSilnika_A = aktualnyCzas; TurnOnMotorA(); } if (detect == HIGH && aktualnyCzas - CzasStartuSilnika_A >= 5000UL){ czasLOW = czasON; TurnOffMotorA(); } W czasie pracy podajnik zaczyna podawać kulki. Kiedy zatrzymam produkcję na 5 sekund podajnik kulek zatrzyma się. Jeśli produkcja trwa kulki są podawane cały czas. Myślę, że czujnik na chwilę przechodzi w stan ON następnie OFF i dolicza 5 sekund do zatrzymania. Moim celem jest wyeliminowanie chwilowego stanu ON/OFF kiedy kulki przesuwają się w rurce.
  3. Na pewno tak ma być? Po uaktywnieniu czujnika opóźnienie dwie sekundy przed uruchomieniem silnika? Co to daje? Tak ponieważ jeśli czujnik na chwilę zmieni stan leci z programem i dorzuca kulki. Dlatego pomyślałem o opóźnieniu 2 sekundy. [ Dodano: 13-07-2018, 17:02 ] JEŻELI krytyka jest konstruktywna czuje się w porządku Z drugiej strony widzę chęć pomocy, szkoda odpuścić. 1)Start programu 2)Odczytanie stanu czujnika aktywny (1)/nieaktywny (0) a)Jeżeli czujnik aktywny (1) idź do pkt. 3 b)Jeżeli czujnik nieaktywny (0) idź do pkt. 1 3)Odmierzanie czasu 2 sekundy 4)Silnik START 5)Jeżeli czujnik nieaktywny (0) 6)Odmierzanie czasu 5 sekundy 7)Silnik STOP Idź do pkt.1
  4. 1)Start programu 2)Odczytanie stanu czujnika aktywny/nieaktywny a)Czujnik aktywny idź do pkt. 3 b)Czujnik nieaktywny idź do pkt. 1 3)Odmierzanie czasu 2 sekundy 4)Silnik START 5)Rurka pełna - Czujnik nieaktywny 6)Odmierzanie czasu 5 sekundy 7)Silnik STOP Idź do pkt.1
  5. 1)Start 2)Czujnik 0 idź do 4 3)Czujnik 1 idź do 9 4)Odmierzanie czasu 2 sekundy 5)Silnik START 6)Rurka pełna - Czujnik 1 7)Odmierzanie czasu 5 sekundy 8)Silnik STOP 9)Idź do 1
  6. Widzę to tak. 1) Włączam urządzenie 2)Odczytanie stanu czujnika. Stan czujnika widzi/nie widzi a)Jeśłi czujnik nie widzi kulek. Odmierza czas 2 sekundy, Silnik START (Silnik pracuje do czasu kiedy czujnik zobaczy kulki plus 5 sekund) b)Jełśi czujnik widzi kulki, Silnik STOP 3)Czujnik nie widzi kulek. Odmierza czas 2 sekundy, Silnik START 4)Czujnik widzi kulki. Odmierza czas 5 sekund, Silnik STOP 5)Czujnik nie widzi kulek. Odmierza czas 2 sekundy, Silnik START 6)Czujnik widzi kulki. Odmierza czas 5 sekund, Silnik STOP
  7. 1 Włączam urządzenie 2 Czujnik nie widzi kulek 3 Silnik start 4 Silnik pracuje do czasu zakrycia czujnika plus 5 sekund 5 Silnik stop 6 Czujnik nie widzi kulek 7 Odlicza czas 2 sekundy 8 Jeżeli czujnik nie widzi kulek 9 Silnik start 10 Jeżeli czujunik widzi kulki 11 Silnik Stop
  8. Podajnik kulek Silnik obraca podajnikiem, który podaje kulki do rurki wyposażonej w czujnik IR. Kulki układają się jedna za drugą jeśli kulka przerwie wiązkę IR silnik po 5 sekundach zatrzymuje się. Pięć sekund jest ustawione celowo aby po uruchomieniu zawsze podał trochę więcej kulek. Dzięki temu silnik nie podaje co chwilę po jednej kulce. Problem występuje kiedy kulki się przesuwają w rurce. Przez chwilę wiązka IR zmienia stan na LOW silnik działa kolejne pięć sekund co wypełnia rurkę na kulki. Nie było by problemu gdyby zamiast kulek dać WAŁECZKI!
  9. Witam Staram się rozwiązać temat czasu, przerwania w wykonywaniu kodu. Program ma wykryć stan LOW i dopiero jeśli stan LOW utrzyma się np dwie sekundy wykonuje kod "START silnika" Jeśli w czasie dwóch sekund stan zmieni na HIGH nic się nie dziej. W tym momencie program startuje natychmiast i przy stanie HIGH zatrzymuje silnik po pięciu sekundach. jak ugryźć temat ruszania po określonym czasie? //Silnik A int detect = digitalRead(12); // wykrywa stan HIGH/LOW if(detect == LOW){ CzasStartuSilnika_A = aktualnyCzas; TurnOnMotorA(); //START silnika } //zatrzymanie po 5 sek. do wykrycia stanu HIGH if (detect == HIGH && aktualnyCzas - CzasStartuSilnika_A >= 5000UL){ TurnOffMotorA(); //STOP silnika }
  10. Tak Arduino Nano Tak 2x10k + 10uF Pomierzę wieczorem Dzieliłem wartość na 2. Wynik poniżej Na koniec wstawiłem "0" i zaczyna od 0.00 //Digital low pass filter extracts the 2.5 V or 1.65 V dc offset, // then subtract this - signal is now centered on 0 counts. offsetI = 0; filteredI = sampleI - offsetI; W sumie działa tak jak chciałem na razie nie rozumiem co dokładnie się stało
  11. Schemat i biblioteki wiozłem z LINK Próbowałem z "delay" efekt ten sam. Po restarcie bez wyłączenia zasilania również to samo. #include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance Klema do wykrywania zamkniecia obwodu int ledPinRed = 8; //Dioda dniagnostyczna int V; //Napiecie void setup() { Serial.begin(9600); pinMode (ledPinRed, OUTPUT); emon1.current(2, 111.1); // Wykrywa zamkniecia obwodu Port Analogowy 2 kalibracja 111.1 delay(10000); //efekt z delay } void loop() { float Irms1 = emon1.calcIrms(1480); // Calculate Irms only Serial.print(Irms1*230.0); // Apparent power Serial.println(" "); V = Irms1*230; }
  12. Witam Poproszę o pomoc w temacie. Do portu analogowego (2) podłączyłem czujnik SCT013. Czujnik ma za zadanie sprawdzać napięcie i w razie wykrycia włączyć diodę plus w przyszłości wysłać SMS. Program w teorii działa lecz w czasie włączenia Arduino Nano na porcie A2 pojawiają się śmieci które zakłócają pracę programu. Czy jest sposób na zignorowanie fałszywych sygnałów? Program zapala diodę i wysyła SMS mimo braku napięcia wykrytego przez czujnik SCT013. W załączniku zachowanie programu po włączeniu #include <SoftwareSerial.h> SoftwareSerial mySerial(9, 10); // Port TX, RX Do komunikacji z modułem SMS #include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance Klema do wykrywania zamkniecia obwodu int ledPinRed = 8; //Dioda dniagnostyczna int a=0; // zmienna "a" zlicza wystąpienia zamkniętego obwodu jesli =1 wyslij SMS int V; //Napiecie void setup() { mySerial.begin(9600); Serial.begin(9600); pinMode (ledPinRed, OUTPUT); emon1.current(2, 111.1); // Wykrywa zamkniecia obwodu Port Analogowy 2 kalibracja 111.1 delay(500); } void loop() { float Irms1 = emon1.calcIrms(1480); // Calculate Irms only Serial.print(Irms1*230.0); // Apparent power Serial.println(" "); V = Irms1*230; if (V >= 150 && a == 0){ digitalWrite(ledPinRed, HIGH); Serial.print("SMS - OBWOD ZAMKNIETY!"); Serial.println("Sending Text...OBWOD ZAMKNIETY!"); mySerial.print("AT+CMGF=1\r"); // Set the shield to SMS mode delay(100); mySerial.print("AT+CMGS=\"+48XXXXXXXXXXX\"\r"); delay(200); mySerial.print("OBWOD ZAMKNIETY!"); mySerial.print(V); mySerial.print(" napiecie"); mySerial.print("\r"); //the content of the message delay(500); mySerial.print((char)26);//the ASCII code of the ctrl+z is 26 (required according to the datasheet) delay(100); mySerial.println(); Serial.println("Text Sent."); delay(500); mySerial.println("ATD++48XXXXXXXX;");//dial the number, must include country code delay(100); mySerial.println(); a++; } else digitalWrite(ledPinRed, LOW); Serial.print("A "); Serial.println(a); }
  13. W jaki sposób uruchomic silnik? Już kiedyć to uruchomiłem chciałem powrócic do tematu tym razem z WiFi testrob@robo-desktop:~/robocik01$ python example00.py 0 4000 File "example00.py", line 11 pwm.setPWM(2, 0, speed) ^ IndentationError: expected an indented block Czegoś brakuje testrob@robo-desktop:~/robocik01$ python example00.py 1000 0 Traceback (most recent call last): File "example00.py", line 3, in pwm = PWM(0x60) File "/home/testrob/robocik01/Adafruit_PWM_Servo_Driver.py", line 57, in __init__ self.i2c = get_i2c_device(address, i2c, i2c_bus) File "/home/testrob/robocik01/Adafruit_PWM_Servo_Driver.py", line 19, in get_i2c_device import Adafruit_GPIO.I2C as I2C ImportError: No module named Adafruit_GPIO.I2C Adafruit_GPIO.I2C - skąd moge pobrać?
  14. Czy jest szansa na udostępnienie biblioteki Adafruit_PWM_Servo_Driver?
×
×
  • Utwórz nowe...