Salve sono un ragazzo di 17 anni che frequenta il terzo anno in un istituto tecnico. Quest’anno alla mia classe è stato assegnato un lavoro a gruppi che consiste nel costruire un proprio progetto di robotica, assieme al mio gruppo abbiamo deciso di realizzare un sistema di differenziamento rifiuti intelligente basato principalmente su un lettore qr e dei motorini pilotati da un driver l293d che sollevano i coperchi dei cestini. Durante la realizzazione del progetto non abbiamo incontrato grandi problemi nella parte software ma arrivati al montaggio ci siamo accorti che i motorini quando vengono montati assieme ai driver iniziano a produrre un ronzio ma il meccanismo non si aziona mentre invece quando montati senza driver funzionano normalmente. Mi chiedevo se qualcuno avesse qualche idea sul motivo per il quale non funzionano quando pilotati dal driver l293d
(il montaggio simulato su tinker cad non da alcun problema) allego schema di montaggio e codice
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
const int rxPin=2;
const int txPin=3;
const int inputA = 16;
const int inputB = 4;
const int enablePin1 = 6;
const int inputC = 15;
const int inputD = 8;
const int enablePin2 = 11;
const int inputE = 14;
const int inputF = 12;
const int enablePin3 = 10;
int s;
int pulsante = 7;
LiquidCrystal_I2C lcd(0x27,16,2);
SoftwareSerial QR(2,3);
void setup(){
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("S.I.D.R.");
pinMode(inputA, OUTPUT);
pinMode(inputB, OUTPUT);
pinMode(enablePin1, OUTPUT);
pinMode(inputC, OUTPUT);
pinMode(inputD, OUTPUT);
pinMode(enablePin2, OUTPUT);
pinMode(inputE, OUTPUT);
pinMode(inputF, OUTPUT);
pinMode(enablePin3, OUTPUT);
pinMode(pulsante, INPUT);
Serial.begin(9600);
QR.begin(9600);
}
void loop(){
if(QR.available()>0)
{
s=QR.read();
s=s-48;
Serial.println(s);
delay(1000);
}
else if(Serial.available()>0)
{
s=Serial.read();
s=s-48;
Serial.println(s);
}
}
switch(s){
case 1:
analogWrite(enablePin1, 50);
digitalWrite(inputB, LOW);
digitalWrite(inputA, HIGH);
delay(5000);
digitalWrite(inputB, HIGH);
digitalWrite(inputA, LOW);
delay(5000);
s=0;
lcd.setCursor(0,0);
lcd.print("plastica");
delay(2000);
lcd.print("S.I.D.R.");
break;
case 2:
analogWrite(enablePin2, 50);
digitalWrite(inputD, LOW);
digitalWrite(inputC, HIGH);
delay(5000);
digitalWrite(inputD, HIGH);
digitalWrite(inputC, LOW);
delay(5000);
s=0;
lcd.setCursor(0,0);
lcd.print("carta");
delay(2000);
lcd.print("S.I.D.R.");
break;
case 3:
analogWrite(enablePin3, 50);
digitalWrite(inputF, LOW);
digitalWrite(inputE, HIGH);
delay(5000);
digitalWrite(inputF, HIGH);
digitalWrite(inputE, LOW);
delay(5000);
s=0;
lcd.setCursor(0,0);
lcd.print("vetro");
delay(2000);
lcd.print("S.I.D.R.");
break;
default:
analogWrite(enablePin1, 0);
analogWrite(enablePin2, 0);
analogWrite(enablePin3, 0);
break;
}
if(digitalRead(pulsante)== HIGH)
{
lcd.setCursor(0,0);
lcd.print("tutto aperto");
analogWrite(enablePin1, 50);
analogWrite(enablePin2, 50);
analogWrite(enablePin3, 50);
digitalWrite(inputB, LOW);
digitalWrite(inputA, HIGH);
digitalWrite(inputD, LOW);
digitalWrite(inputC, HIGH);
digitalWrite(inputF, LOW);
digitalWrite(inputE, HIGH);
delay(5000);
digitalWrite(inputB, HIGH);
digitalWrite(inputA, LOW);
digitalWrite(inputD, HIGH);
digitalWrite(inputC, LOW);
digitalWrite(inputF, HIGH);
digitalWrite(inputE, LOW);
delay(5000);
analogWrite(enablePin1, 0);
analogWrite(enablePin2, 0);
analogWrite(enablePin3, 0);
delay(1000);
lcd.print("S.I.D.R.");
}
}
