ciao ragazzi sono nuovo e quest'anno ho l'esame di maturita e come tesina vorrei portare un braccio robotico costruito da me comandato da 3 schede arduino.
Nella scheda uno è presente il controllo del joistic e dei servo , nella seconda è presente il controllo per i motori e nella terza che devo ancora iniziare mettero una telecamera per l'andamento automatico del braccio!
Io pero ho un problema ovvero vorrei che quando riconosco il movimento del motore(motoriduttore messo come base comandato dalla secondo scehda) la scheda 1 mandasse tramite la libreria softwareserial alla seconda i comandi di avanti e indietro del motore! il problema è che non succede propio niente! i servo , e i motori sono funzionanti all 100%.
inoltre ho provato a vedere che caratterr arriva ed esso è strano e ogni volta che apro il monitor seriale si pianta l'IDE ARDUINO.
/*
B R A C C I O R O B O T I C O
Creato da : Alessandro Manfredi
T E S I N A E S A M E D I M A T U R I T A
*/
#include "Arduino.h"
#include <SoftwareSerial.h>
const byte RX_SERIALE = 2;
const byte TX_SERIALE = 4;
SoftwareSerial Connessione ( RX_SERIALE , TX_SERIALE ); // RX , TX
// COSTANTI PER PORTE MOTORE CANALE A
const int DIREZIONE_A = 12;
const int BRAKE_A = 9;
const int VELOCITA_A = 3;
// CONSTENTE PER LA CONNESSIONE CON LA SCHEDA ARDUINO-SERVO-JOISTIC
// CONSTANTE PER I VALORI DELLA CONNESSIONE
const byte MOTORE_AVANTI = 0X33;
const byte MOTORE_INDIETRO = 0X53;
// COMMENTO I PIN PER IL CANALE DUE PERCHè USO SOLO UN MOTORE
/*const int DIREZIONE_B = 13;
const int BRAKE_A = 8;
const int VELOCITA_A = 11;*/
// vaiabile per leggere il valore del dato in arrivo sulla porta per la connessione
char Valore_Connessione;
void setup() {
//Settaggi Canale A
pinMode ( DIREZIONE_A , OUTPUT); //Initiates Motor Channel A pin
pinMode ( BRAKE_A , OUTPUT); //Initiates Brake Channel A pin
pinMode ( VELOCITA_A , OUTPUT );
//Settaggio PORTA CONNESSIONE CON SCHEDA ARDUINO-SERVO-JOISTCI
Serial.begin(4800);
// setto i alori delle porte della seriale inventata
pinMode ( RX_SERIALE , INPUT );
pinMode ( TX_SERIALE , OUTPUT );
Connessione.begin(4800);
Connessione.flush();
}
// DIREZIONE : HIGH = AVANTI && LOW ==
void loop(){
if ( Connessione.available () )
{
Valore_Connessione = Connessione.read();
if ( Valore_Connessione == MOTORE_AVANTI ) // motore avanti
{
Motore_Avanti();
Serial.println ( "aaaaaaaa ");
}
else if ( Valore_Connessione == MOTORE_INDIETRO );
{
Motore_Indietro();
Serial.println ( "iiiiiii");
}
}
Serial.println( Valore_Connessione );
/*if ( Valore_Connessione == MOTORE_AVANTI ) Motore_Avanti();
if ( Valore_Connessione == MOTORE_INDIETRO ) Motore_Indietro();
Serial.println(Valore_Connessione + " C" );
*/
//Motore_Avanti();
// resetto il
Valore_Connessione = 0;
Connessione.flush();
}
void Motore_Avanti ( )
{
digitalWrite( DIREZIONE_A , HIGH);
digitalWrite( BRAKE_A , LOW);
analogWrite ( VELOCITA_A, 255);
return;
}
void Motore_Indietro ()
{
digitalWrite( DIREZIONE_A, LOW);
digitalWrite( BRAKE_A, LOW);
analogWrite( VELOCITA_A, 255);
}
Ma supponiamo che ce la faccia, alle, non per smontarti ma saresti in grado di sviluppare un software che acquisisca un video da una telecamera e che ne riconosca le informazioni? Guarda, mi fermo prima, saresti anche solo in grado di scrivere il driver per la telecamera?
Ti dico questo perché tu non ti imbatta in qualcosa che potenzialmente potrebbe risultare più grande di te proprio per il progetto della maturità, poi magari mi smentisci, nel qual caso mi complimenterei con te...
Serial.begin(9600);
// imposto al baud.rate a 9600 sulla seriale inventata
pinMode ( RX_SERIALE , INPUT );
pinMode ( TX_SERIALE , OUTPUT );
Connessione.begin(4800);
// settaggio della porta per il collegamento con la schda ARDUINO-MOTORI
Perchè la prima riga è seriale inventata? La seriale che, diciamo, hai "inventato" non è Connessione?
2.Inoltre, usando la SoftwareSerial e dichiarando:
SoftwareSerial Connessione = SoftwareSerial( RX_SERIALE , TX_SERIALE );
dubito molto che servano le 2 righe pinMode su RX_SERIALE e TX_SERIALE, presumo lo faccia già la libreria internamente.
3.Le funzioni tue che ritornano void non necessitano di return. Togliele così accorci il codice.
4.Perchè poi nel codice tutte quelle righe vuote? Il programma sembra lungo un Km. Indenti bene, perciò basta quello per la leggibilità del codice. Al limite appesantisci i commenti (es. // *** POLSO AVANTI DESTRA GIU ***)
5.Una cosa che proverei a modificare nel ricevente è la dichiarazione di Valore_Connessione, la dichiarerei byte e non char. I comandi li dichiari byte.
6.Sei sicuro dei collegamenti tra le seriali dei due Arduino?
Premetto che la telecamera che prendo è la CMUCAM4 la quale ha gia le librerie scritte per arduino e che viene montata gia in cima ad una shield! cmnq per il fatto della seriale "Connessione", perchè sul pin13 non è possibile gestirci dati della seriale con SoftwareSerial?
alle588:
Premetto che la telecamera che prendo è la CMUCAM4
La CMUCAM 4 non è una telecamera, è un sistema, minimale, per la visione artificiale composto da un sensore cmos e un microprocessore di fascia medio/alta dedicato alla gestione dei dati.
Ti posso chiedere una cosa? ma almeno sai cos'è? è stata fatta per arduino apposta! all'interno della cmucam4 c'è un microprocessore elabora lui stesso le immagini
Voglio chiedere un altra cosa che grazie alla quale ho dovuto buttare due arduino!..quando attacco arduino al joistcic shield arduino si scalda un po e poi quando tento di caricarci in cima il programma non mi riconosce piu la porta seriale e il LED "L" rimane sempre acceso
alle588:
Ti posso chiedere una cosa? ma almeno sai cos'è? è stata fatta per arduino apposta! all'interno della cmucam4 c'è un microprocessore elabora lui stesso le immagini
A parte il fatto che astrobeed non apre la bocca a casaccio, 130 euro per quella schedina è un po' tantino.... Io userei un Raspberry PI oppure un' Aria G25.
Oppure se ne hai la possibilità potresti mettere una webcam che passa le immagini ad un portatile che passa via seriale ad Arduino i movimenti che deve compiere. (Spero che tu non risponda male anche a me)
Ciao
C
Lo shield ha i pulsanti attaccati senza resistenza a GND, usandoli con le pull-up interne (come in effetti stai facendo) non ci sono problemi.
Se hai bruciato l'ATmega è per qualche altro motivo, ad esempio i collegamenti dei motori.
per adesso grazie mille a tutti! e mi scuso ancora!...comunque se non è la shield del joisic non saprei cosa potrebbe essere! perchè quando "funzionava" ancora tutto i motori ed i servo giravano perfettamente! da un giorno all' altro è successo tutto questo pasticcio!!!
Non ti resta che fare qualche prova, collegando solo i motori e la motor shield con uno sketck di prova minimale.
Inoltre ricorda che se monti più shield impilati essi non devo utilizzare gli stessi pin. Controlla i pin utilizzati dalle varie schede se sono montate sullo stesso Arduino.
Per il resto dovresti, oltre al codice già postato, indicarci i collegamenti e le schede o componentistica aggiuntiva utilizzata, magari anche con uno schema o una foto. Perché così non è facile capire com'è collegato il tutto e se è corretto.
E tranquillo!! Abbiano superato la 40-ina e sia già maturi. (tranne Cece)
I collegamenti non sono complicati...anzi!!! uso una scheda per la shield con il joistic , una per la shield dei motori e una per la cmucam....i collegamenti ei servo rosso (+) , nero(gnd) , giallo (segnale) come collegamenti non è un problema!! ho fatto anche quelle prove consli sketch minimali e tutto funziona ma quando è tutto attaccato ( al braccio ) fa dei macelli! puo essere che essendo un po pesante il servo (gomito) faccia fatica e allora si brucia! secondo me è impossibile ma a questo punto le penso tutte!! io uso il mac come pc non vorrei che sia quello però non penso! è un macbook pro