<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://www.raspibo.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Cesarino</id>
	<title>Cesarino - Cronologia</title>
	<link rel="self" type="application/atom+xml" href="https://www.raspibo.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Cesarino"/>
	<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Cesarino&amp;action=history"/>
	<updated>2026-05-10T19:54:32Z</updated>
	<subtitle>Cronologia della pagina su questo sito</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Cesarino&amp;diff=4415&amp;oldid=prev</id>
		<title>Oloturia: Creata pagina con 'Cesarino è un robot che cerca la luce. Se non ne trova abbastanza continuerà a girare all'infinito, o almeno fino a che non finiscono le batterie. Il cuore e lo chassis di C...'</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Cesarino&amp;diff=4415&amp;oldid=prev"/>
		<updated>2015-06-27T14:44:28Z</updated>

		<summary type="html">&lt;p&gt;Creata pagina con &amp;#039;Cesarino è un robot che cerca la luce. Se non ne trova abbastanza continuerà a girare all&amp;#039;infinito, o almeno fino a che non finiscono le batterie. Il cuore e lo chassis di C...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nuova pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Cesarino è un robot che cerca la luce. Se non ne trova abbastanza continuerà a girare all'infinito, o almeno fino a che non finiscono le batterie. Il cuore e lo chassis di Cesarino è [[OttoBot]]. Anzi: sono proprio lo stesso robot con due sistemi di guida differenti. Per saperne di più sulla programmazione dell'ATmega8, usato per la logica di Cesarino, vi rimando alla pagina di [[OttoBot]]. In questa guida faremo come se si stesse usando un qualsiasi Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:Cesarino 1ver.JPG]]&lt;br /&gt;
''La prima versione, quasi funzionante''&lt;br /&gt;
&lt;br /&gt;
== Componenti ==&lt;br /&gt;
Cesarino è stato assemblato con:&lt;br /&gt;
* Un ATmega8 con il bootloader di Arduino (potete usare qualsiasi Arduino-like)&lt;br /&gt;
* Un HC-SR04, sensore a ultrasuoni (per evitare gli ostacoli, su [[Ardubottino]] ne trovate uno simile)&lt;br /&gt;
* Due motori DC (con ruote)&lt;br /&gt;
* Una fotoresistenza&lt;br /&gt;
* Una resistenza da 1K&lt;br /&gt;
* Il ponte a H L298, lo stesso usato in [[Ardubottino]] al quale vi rimando per sapere come funziona&lt;br /&gt;
* Batterie: nel dettaglio una 9V per i motori e 4 AA per l'ATmega8 e il resto della logica.&lt;br /&gt;
* Uno chassis, stampato malamente in 3D!&lt;br /&gt;
&lt;br /&gt;
== La fotoresistenza, questa sconosciuta ==&lt;br /&gt;
In realtà non c'è molto da sapere. È una resistenza che cambia il suo valore a seconda di quanta luce riceve. Il rapporto luce/resistenza è '''inversamente proporzionale''' ovvero più luce riceve, meno resistenza oppone. Per contro, più luce riceve, più corrente lascia passare.&lt;br /&gt;
La fotoresistenza ha 2 pin, uno va messo a +5V, l'altro in un'entrata analogica dell'Arduino. L'entrata analogica va poi messa a terra (usando un'opportuna resistenza) in modo da fare un divisore di voltaggio.&lt;br /&gt;
&lt;br /&gt;
[[File:FotoresCes.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Il resto della roba, come funziona? ==&lt;br /&gt;
La trovate tutta su [[Ardubottino]]. L'unica differenza è che l'HC-SR04 non ha la possibilità di usare il trigger dell'ultrasuono e l'echo sullo stesso filo. Ha bisogno di due fili (questo significa che lo sketch di esempio dell'IDE di Arduino ha bisogno di essere modificato).&lt;br /&gt;
&lt;br /&gt;
[[File:Cesarino_Schema.png]]&lt;br /&gt;
&lt;br /&gt;
== E ora il codice! == &lt;br /&gt;
&lt;br /&gt;
 const int fw1 = 5;&lt;br /&gt;
 const int bk1 = 6;&lt;br /&gt;
 const int fw2 = 7;&lt;br /&gt;
 const int bk2 = 8;&lt;br /&gt;
 const int am1 = 9;&lt;br /&gt;
 const int am2 = 10; //motor pins, fw=forward, bk=back, am=enable&lt;br /&gt;
 const int lightSensor = A0; //pin for light sensor&lt;br /&gt;
 const int lightThreshold = 60;&lt;br /&gt;
 const int pingPin = 4;&lt;br /&gt;
 const int trigPin = 3 ;&lt;br /&gt;
 int changeDir = 0; &lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
   Serial.begin(19200);&lt;br /&gt;
   Serial.println(&amp;quot;Ready&amp;quot;);&lt;br /&gt;
   pinMode(fw1,OUTPUT);&lt;br /&gt;
   pinMode(bk1,OUTPUT);&lt;br /&gt;
   pinMode(fw2,OUTPUT);&lt;br /&gt;
   pinMode(bk2,OUTPUT);&lt;br /&gt;
   pinMode(am1,OUTPUT);&lt;br /&gt;
   pinMode(am2,OUTPUT);&lt;br /&gt;
   pinMode(pingPin, INPUT);&lt;br /&gt;
   pinMode(trigPin, OUTPUT);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void motorAction(int fwm, int bkm,int anm,int motspeed) { //requires fd pin, bk pin, en pin and speed (PWM)&lt;br /&gt;
       if (motspeed &amp;gt; 0 ) {             //going forward&lt;br /&gt;
         digitalWrite(fwm,HIGH);&lt;br /&gt;
         digitalWrite(bkm,LOW);&lt;br /&gt;
       } else if (motspeed &amp;lt; 0) {       //reverse&lt;br /&gt;
         digitalWrite(fwm,LOW);&lt;br /&gt;
         digitalWrite(bkm,HIGH);&lt;br /&gt;
       } else {                         //stop&lt;br /&gt;
         digitalWrite(fwm,LOW);&lt;br /&gt;
         digitalWrite(bkm,LOW);&lt;br /&gt;
       }&lt;br /&gt;
       analogWrite(anm,abs(motspeed));&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void straight(int spd) {          //all of these functions must be rewritten if&lt;br /&gt;
   motorAction(fw1,bk1,am1,spd);   //a different kind of motors (stepper, servo..)&lt;br /&gt;
   motorAction(fw2,bk2,am2,spd);   //are used&lt;br /&gt;
 }&lt;br /&gt;
   &lt;br /&gt;
 void right(int spd) {&lt;br /&gt;
   motorAction(fw1,bk1,am1,spd);&lt;br /&gt;
   motorAction(fw2,bk2,am2,0);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 void left(int spd) {&lt;br /&gt;
   motorAction(fw1,bk1,am1,0);&lt;br /&gt;
   motorAction(fw2,bk2,am2,spd);  &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void halt() {&lt;br /&gt;
   motorAction(fw1,bk1,am1,0);&lt;br /&gt;
   motorAction(fw1,bk1,am2,0);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 bool proximity(){&lt;br /&gt;
   long duration;&lt;br /&gt;
   digitalWrite(trigPin, LOW);&lt;br /&gt;
   delayMicroseconds(2);&lt;br /&gt;
   digitalWrite(trigPin, HIGH);&lt;br /&gt;
   delayMicroseconds(5);&lt;br /&gt;
   digitalWrite(trigPin, LOW);&lt;br /&gt;
   duration = pulseIn(pingPin, HIGH);&lt;br /&gt;
   if (duration/29/2 &amp;lt; 10) {         //avoids obstacles 10 cm away&lt;br /&gt;
     return true;&lt;br /&gt;
   } else {&lt;br /&gt;
     return false;&lt;br /&gt;
   }&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 void loop(){&lt;br /&gt;
   if (analogRead(lightSensor) &amp;lt; lightThreshold) { //if the light is not enough go FORWARD&lt;br /&gt;
     Serial.println(&amp;quot;FORWARD&amp;quot;);                    //serial output for debugging reasons (plug the motors off and see how it works)&lt;br /&gt;
     straight(100);&lt;br /&gt;
     changeDir ++;&lt;br /&gt;
     if (changeDir &amp;gt; 1000) {                       //sometimes it changes direction; it's just for not letting the robot to follow&lt;br /&gt;
       right(150);                                 //a straight line, anyway the path is quite predictable&lt;br /&gt;
       left(-150);&lt;br /&gt;
       delay(500);&lt;br /&gt;
       changeDir = 0;&lt;br /&gt;
     }&lt;br /&gt;
   } else {&lt;br /&gt;
     Serial.println(&amp;quot;HALT&amp;quot;);                       //it found enough light, so it stays still&lt;br /&gt;
     halt();&lt;br /&gt;
   }&lt;br /&gt;
   while(proximity()) {&lt;br /&gt;
     Serial.println(&amp;quot;PROXIMITY&amp;quot;);                  //found an obstacle&lt;br /&gt;
     right(-150);&lt;br /&gt;
     left(150);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Non ho testato bene il codice. Si può fare di meglio ma non ho avuto molto tempo. Ci guarderò con calma nelle prossime settimane. In particolare non ho testato i delay (avevo usato delayMicroseconds al posto di delay, ma ho scoperto che accetta solo interi) e il sistema per far cambiare direzione è pratico ma brutale. Ad ogni modo Cesarino è andato in giro per la mia cucina, sbattendo qua e là e correndo come un pazzo, fino a che non si è messo sotto la finestra. Lì si è fermato.&lt;br /&gt;
&lt;br /&gt;
[[File:Cesarino_last.JPG]]&lt;br /&gt;
&lt;br /&gt;
''Sst! Non disturbatelo!''&lt;/div&gt;</summary>
		<author><name>Oloturia</name></author>
	</entry>
</feed>